svf-tools 1.0.510 → 1.0.511

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 (45) hide show
  1. package/.gitignore +1 -0
  2. package/SVF-doxygen/html/html/AndersenHCD_8cpp_source.html +2 -2
  3. package/SVF-doxygen/html/html/AndersenHLCD_8cpp_source.html +2 -2
  4. package/SVF-doxygen/html/html/AndersenLCD_8cpp_source.html +2 -2
  5. package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +4 -13
  6. package/SVF-doxygen/html/html/Andersen_8h_source.html +34 -35
  7. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +3 -3
  8. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +1 -3
  9. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +29 -29
  10. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +19 -19
  11. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +28 -28
  12. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +74 -75
  13. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +14 -138
  14. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +3 -3
  15. package/SVF-doxygen/html/html/functions_func_h.html +3 -4
  16. package/SVF-doxygen/html/html/functions_func_p.html +1 -5
  17. package/SVF-doxygen/html/html/functions_h.html +4 -5
  18. package/SVF-doxygen/html/html/functions_o.html +3 -3
  19. package/SVF-doxygen/html/html/functions_p.html +11 -19
  20. package/SVF-doxygen/html/html/functions_r.html +9 -5
  21. package/SVF-doxygen/html/html/functions_s.html +18 -16
  22. package/SVF-doxygen/html/html/functions_t.html +5 -7
  23. package/SVF-doxygen/html/html/functions_v.html +3 -3
  24. package/SVF-doxygen/html/html/functions_w.html +11 -11
  25. package/SVF-doxygen/html/html/search/all_10.js +6 -7
  26. package/SVF-doxygen/html/html/search/all_11.js +2 -2
  27. package/SVF-doxygen/html/html/search/all_12.js +9 -9
  28. package/SVF-doxygen/html/html/search/all_13.js +3 -3
  29. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  30. package/SVF-doxygen/html/html/search/all_16.js +2 -2
  31. package/SVF-doxygen/html/html/search/all_8.js +1 -1
  32. package/SVF-doxygen/html/html/search/all_9.js +1 -1
  33. package/SVF-doxygen/html/html/search/all_b.js +1 -1
  34. package/SVF-doxygen/html/html/search/all_c.js +1 -1
  35. package/SVF-doxygen/html/html/search/all_e.js +1 -1
  36. package/SVF-doxygen/html/html/search/all_f.js +1 -1
  37. package/SVF-doxygen/html/html/search/functions_7.js +1 -1
  38. package/SVF-doxygen/html/html/search/functions_f.js +2 -3
  39. package/SVF-doxygen/html/html/search/variables_13.js +2 -2
  40. package/SVF-doxygen/html/html/search/variables_9.js +1 -1
  41. package/SVF-doxygen/html/html/search/variables_c.js +1 -1
  42. package/SVF-doxygen/html/html/search/variables_e.js +1 -1
  43. package/include/WPA/Andersen.h +0 -8
  44. package/lib/WPA/AndersenWaveDiff.cpp +0 -40
  45. package/package.json +1 -1
@@ -66,16 +66,16 @@ $(function() {
66
66
  <div class="title">Andersen.h</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="Andersen_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">//===- Andersen.h -- Field-sensitive Andersen&#39;s pointer analysis-------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</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="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * Andersen.h</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: Nov 12, 2013</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#ifndef ANDERSENPASS_H_</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#define ANDERSENPASS_H_</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointerAnalysisImpl_8h.html">MemoryModel/PointerAnalysisImpl.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="WPAStat_8h.html">WPA/WPAStat.h</a>&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="WPASolver_8h.html">WPA/WPASolver.h</a>&quot;</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFIR_8h.html">MemoryModel/SVFIR.h</a>&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="ConsG_8h.html">Graphs/ConsG.h</a>&quot;</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="OfflineConsG_8h.html">Graphs/OfflineConsG.h</a>&quot;</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;{</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="namespaceSVF.html#ae9c142945ea31b6c70bceb93eb6f3ca4"> 43</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="keyword">typedef</span> <a class="code" href="classSVF_1_1WPASolver.html">WPASolver&lt;ConstraintGraph*&gt;</a> <a class="code" href="namespaceSVF.html#ae9c142945ea31b6c70bceb93eb6f3ca4">WPAConstraintSolver</a>;</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"><a class="line" href="classSVF_1_1AndersenBase.html"> 50</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1AndersenBase.html">AndersenBase</a>: <span class="keyword">public</span> WPAConstraintSolver, <span class="keyword">public</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;{</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#af89bc974fda6bed754bb07b3b6ee8ffe"> 55</a></span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#af89bc974fda6bed754bb07b3b6ee8ffe">AndersenBase</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PTATY</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a9a25374fb6d2218c6c59de0482548f49">Andersen_BASE</a>, <span class="keywordtype">bool</span> alias_check = <span class="keyword">true</span>)</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; : <a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>(_pag, <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, alias_check), <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>(nullptr)</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#aa7c0636780a86f376e9222bce771e859">iterationForPrintStat</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#afc320fbf269404fe128e69c98e6f9cac">OnTheFlyIterBudgetForStat</a>;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a8da8746b38c55561d3f6904e8fd0a9aa">~AndersenBase</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">analyze</a>() <span class="keyword">override</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"> 68</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#a891816407a4c6346f56bc01a67b78aac">initialize</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#a28a1c3571cdee5e05004b29ace364e67">finalize</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#ac05796a5672ddb5bd0e08924d79da065"> 74</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenBase.html#ac05796a5672ddb5bd0e08924d79da065">updateCallGraph</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">CallSiteToFunPtrMap</a>&amp;)<span class="keyword"> override</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</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"><a class="line" href="classSVF_1_1AndersenBase.html#afa4d710b093a6c7a33cb1aef823781f0"> 81</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenBase.html#afa4d710b093a6c7a33cb1aef823781f0">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AndersenBase.html">AndersenBase</a> *)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a0167fa7b59571c07b2cbec08905f6629"> 85</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenBase.html#a0167fa7b59571c07b2cbec08905f6629">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a> *pta)</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">return</span> ( pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a9a25374fb6d2218c6c59de0482548f49">Andersen_BASE</a></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab68615784a520e39856be5237930e6a6">Andersen_WPA</a></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac7c033efd59e2b5fcded79fc3ebdb9d4">AndersenLCD_WPA</a></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a46f5e74d5f4b0a2d134e68d262079c3f">AndersenHCD_WPA</a></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a99d50c1712075e4c3278fc4fa4c9cd2f">AndersenHLCD_WPA</a></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">AndersenWaveDiff_WPA</a></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac581e279a4bd69c059b0e5987f839a1f">AndersenWaveDiffWithType_WPA</a></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a6c06b12c95a4aa57edc6bef57514a7e1">AndersenSCD_WPA</a></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85accfa4ed42d3a3ac5e4abc403e738427b">AndersenSFR_WPA</a></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85acc2e7cbdd04a614a3b6189d2f01042f3">TypeCPP_WPA</a></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad24ef5326c26db858c73432aa7e67a0a">Steensgaard_WPA</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"> 100</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#aaec5125db063f8c1e7431ac7fe7a70f2"> 102</a></span>&#160; <a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</a>* <a class="code" href="classSVF_1_1AndersenBase.html#aaec5125db063f8c1e7431ac7fe7a70f2">getConstraintGraph</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="keywordflow">return</span> <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; }</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a566830d0c7a1f5cd967bb8f2ab168f8d"> 108</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#a566830d0c7a1f5cd967bb8f2ab168f8d">printStat</a>()</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="classSVF_1_1PointerAnalysis.html#ab83b827ea42d3a61aad20b1a1485d866">PointerAnalysis::dumpStat</a>();</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#af37392229dab0a1f2f807a12186c3b39">normalizePointsTo</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#aebfe0c7238eb24f74f105b950b86cb5e">cleanConsCG</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>);</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"><a class="line" href="classSVF_1_1AndersenBase.html#a6c3d6b4c004d9e43690c3807502eed74"> 118</a></span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1AndersenBase.html#a6c3d6b4c004d9e43690c3807502eed74">redundantGepNodes</a>;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a4acad18a6eb585ba9e3d2276dd591067"> 122</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AndersenBase.html#a4acad18a6eb585ba9e3d2276dd591067">numOfProcessedAddr</a>; </div><div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a04acd871bd1b98cd9e83e395334ac130"> 123</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AndersenBase.html#a04acd871bd1b98cd9e83e395334ac130">numOfProcessedCopy</a>; </div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#aa1246b392aeae1fd10c8a9ebedcc2dd9"> 124</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AndersenBase.html#aa1246b392aeae1fd10c8a9ebedcc2dd9">numOfProcessedGep</a>; </div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a69aae96fc1c99bf108075e5061f50f9e"> 125</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AndersenBase.html#a69aae96fc1c99bf108075e5061f50f9e">numOfProcessedLoad</a>; </div><div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a2b763519509ce21cf40893c01f8357b6"> 126</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AndersenBase.html#a2b763519509ce21cf40893c01f8357b6">numOfProcessedStore</a>; </div><div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a25b00d9ca71cbdd27530fc5d0dc84ee5"> 127</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AndersenBase.html#a25b00d9ca71cbdd27530fc5d0dc84ee5">numOfSfrs</a>;</div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a9f453ec1b4236b8194ae590981217259"> 128</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AndersenBase.html#a9f453ec1b4236b8194ae590981217259">numOfFieldExpand</a>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div><div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a0d7298cbf83568f24fd2bd1926a32968"> 130</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AndersenBase.html#a0d7298cbf83568f24fd2bd1926a32968">numOfSCCDetection</a>;</div><div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a6b7d0e57f741c446d0bf178939960143"> 131</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1AndersenBase.html#a6b7d0e57f741c446d0bf178939960143">timeOfSCCDetection</a>;</div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a02c5a50b214d36921e1404784e76704d"> 132</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1AndersenBase.html#a02c5a50b214d36921e1404784e76704d">timeOfSCCMerges</a>;</div><div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#ad40b196c2c699bd115529b806d20de25"> 133</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1AndersenBase.html#ad40b196c2c699bd115529b806d20de25">timeOfCollapse</a>;</div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#adaf738bee77a4b1fbb8d42911fabdb49"> 134</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AndersenBase.html#adaf738bee77a4b1fbb8d42911fabdb49">AveragePointsToSetSize</a>;</div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#abd73e930450b7c605f478672bdf9bdae"> 135</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AndersenBase.html#abd73e930450b7c605f478672bdf9bdae">MaxPointsToSetSize</a>;</div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#aae14de6fbca9280d8d0290326aa493f0"> 136</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1AndersenBase.html#aae14de6fbca9280d8d0290326aa493f0">timeOfProcessCopyGep</a>;</div><div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a9fe738f1e11c80006d540f246a80bfdf"> 137</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1AndersenBase.html#a9fe738f1e11c80006d540f246a80bfdf">timeOfProcessLoadStore</a>;</div><div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a2afb49f513c9534fd051117b59dc056b"> 138</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1AndersenBase.html#a2afb49f513c9534fd051117b59dc056b">timeOfUpdateCallGraph</a>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd"> 143</a></span>&#160; <a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</a>* <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;};</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html"> 149</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1Andersen.html">Andersen</a>: <span class="keyword">public</span> <a class="code" href="classSVF_1_1AndersenBase.html">AndersenBase</a></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;{</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a77e7378a3a35622bde2371d7d3ed7013"> 154</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1SCCDetection.html">SCCDetection&lt;ConstraintGraph*&gt;</a> <a class="code" href="classSVF_1_1Andersen.html#a77e7378a3a35622bde2371d7d3ed7013">CGSCC</a>;</div><div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a0f65f1881111167bffe1cb2ad05c0a51"> 155</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap&lt;CallSite, NodeID&gt;</a> <a class="code" href="classSVF_1_1Andersen.html#a0f65f1881111167bffe1cb2ad05c0a51">CallSite2DummyValPN</a>;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a680dc709c0263fc1a13aa5c81d95fc72"> 158</a></span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a680dc709c0263fc1a13aa5c81d95fc72">Andersen</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PTATY</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab68615784a520e39856be5237930e6a6">Andersen_WPA</a>, <span class="keywordtype">bool</span> alias_check = <span class="keyword">true</span>)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; : <a class="code" href="classSVF_1_1AndersenBase.html">AndersenBase</a>(_pag, <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, alias_check), pwcOpt(<a class="code" href="cJSON_8cpp.html#a65e9886d74aaee76545e83dd09011727">false</a>), diffOpt(<a class="code" href="cJSON_8cpp.html#a930920b2bc42824a5c03be681830f4b2">true</a>)</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a15218a84e653baf2cd7f1dc95ccfb77d"> 164</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1Andersen.html#a15218a84e653baf2cd7f1dc95ccfb77d">~Andersen</a>()</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;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#a891816407a4c6346f56bc01a67b78aac">initialize</a>();</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#a28a1c3571cdee5e05004b29ace364e67">finalize</a>();</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a95c0b2f501dff61993cd43a5cab89e17"> 176</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a95c0b2f501dff61993cd43a5cab89e17">resetData</a>()</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; <a class="code" href="classSVF_1_1AndersenBase.html#adaf738bee77a4b1fbb8d42911fabdb49">AveragePointsToSetSize</a> = 0;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#abd73e930450b7c605f478672bdf9bdae">MaxPointsToSetSize</a> = 0;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#aae14de6fbca9280d8d0290326aa493f0">timeOfProcessCopyGep</a> = 0;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a9fe738f1e11c80006d540f246a80bfdf">timeOfProcessLoadStore</a> = 0;</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;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#aaec53980b25ed769fa9a985860f810b5"> 186</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#aaec53980b25ed769fa9a985860f810b5">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1Andersen.html">Andersen</a> *)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</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"><a class="line" href="classSVF_1_1Andersen.html#a60214d7c6c9aac8e498644b048660ab9"> 190</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#a60214d7c6c9aac8e498644b048660ab9">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a> *pta)</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; <span class="keywordflow">return</span> (pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab68615784a520e39856be5237930e6a6">Andersen_WPA</a></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac7c033efd59e2b5fcded79fc3ebdb9d4">AndersenLCD_WPA</a></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a46f5e74d5f4b0a2d134e68d262079c3f">AndersenHCD_WPA</a></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a99d50c1712075e4c3278fc4fa4c9cd2f">AndersenHLCD_WPA</a></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">AndersenWaveDiff_WPA</a></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac581e279a4bd69c059b0e5987f839a1f">AndersenWaveDiffWithType_WPA</a></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a6c06b12c95a4aa57edc6bef57514a7e1">AndersenSCD_WPA</a></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85accfa4ed42d3a3ac5e4abc403e738427b">AndersenSFR_WPA</a>);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;</div><div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30"> 205</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">sccRepNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div><div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#acd2feff818906db49a1bb2d94c33db5f"> 209</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>&amp; <a class="code" href="classSVF_1_1Andersen.html#acd2feff818906db49a1bb2d94c33db5f">sccSubNodes</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> repId)</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">return</span> <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#aed605b010e313f4b11e95b83fe50e3b3">sccSubNodes</a>(repId);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639"> 216</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; <a class="code" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">getPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</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">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1PTData.html#a9ae6037637d8b9acb323333f491f4a7d">getPts</a>(<a class="code" href="classSVF_1_1WPASolver.html#a3bd463cd456a1d58242f118328f51ddb">sccRepNode</a>(<span class="keywordtype">id</span>));</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"><a class="line" href="classSVF_1_1Andersen.html#ab7dadfd4d810be4863f03ed996b3b3c4"> 220</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#ab7dadfd4d810be4863f03ed996b3b3c4">unionPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; target)</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="keywordtype">id</span> = <a class="code" href="classSVF_1_1WPASolver.html#a3bd463cd456a1d58242f118328f51ddb">sccRepNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1PTData.html#af7aa22f11558c12ff16612174e2221dd">unionPts</a>(<span class="keywordtype">id</span>, target);</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"><a class="line" href="classSVF_1_1Andersen.html#a8da98a9d33a6e9be329309f4af65e969"> 225</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#a8da98a9d33a6e9be329309f4af65e969">unionPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd)</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordtype">id</span> = <a class="code" href="classSVF_1_1WPASolver.html#a3bd463cd456a1d58242f118328f51ddb">sccRepNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; ptd = <a class="code" href="classSVF_1_1WPASolver.html#a3bd463cd456a1d58242f118328f51ddb">sccRepNode</a>(ptd);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1PTData.html#af7aa22f11558c12ff16612174e2221dd">unionPts</a>(<span class="keywordtype">id</span>,ptd);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;</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="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a8d6cea841b6ded0f80ef2b5784e9b752">dumpTopLevelPtsTo</a>();</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a2b13f14db90ad59a61dff097bcdf8fb7"> 235</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a2b13f14db90ad59a61dff097bcdf8fb7">setPWCOpt</a>(<span class="keywordtype">bool</span> flag)</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; pwcOpt = flag;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">if</span> (pwcOpt)</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; setSCCEdgeFlag(<a class="code" href="classSVF_1_1ConstraintNode.html#a6e59b815d784bc1a9437290ff0e1e28ca7f8c92a2f50277fee80899235ae477f9">ConstraintNode::Direct</a>);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; setSCCEdgeFlag(<a class="code" href="classSVF_1_1ConstraintNode.html#a6e59b815d784bc1a9437290ff0e1e28ca4b202c80793ae965686b9d275a5c586a">ConstraintNode::Copy</a>);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;</div><div class="line"><a name="l00244"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a44d62658bbd2efcef5ff479930b5dce9"> 244</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#a44d62658bbd2efcef5ff479930b5dce9">mergePWC</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">return</span> pwcOpt;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;</div><div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a69161671030b51c5a6cf139325aa098f"> 249</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a69161671030b51c5a6cf139325aa098f">setDiffOpt</a>(<span class="keywordtype">bool</span> flag)</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; diffOpt = flag;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; }</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;</div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a6804284abb4b63f44eefdaf044a301f7"> 254</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#a6804284abb4b63f44eefdaf044a301f7">enableDiff</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">return</span> diffOpt;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; }</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a2f88b6035ecb480f7d11afe6bc666541"> 261</a></span>&#160; CallSite2DummyValPN <a class="code" href="classSVF_1_1Andersen.html#a2f88b6035ecb480f7d11afe6bc666541">callsite2DummyValPN</a>; </div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordtype">void</span> heapAllocatorViaIndCall(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs,<a class="code" href="namespaceSVF.html#ac82022f3f81965c3ce9b26c299f537a7">NodePairSet</a> &amp;cpySrcNodes);</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"><a class="line" href="classSVF_1_1Andersen.html#ab90350dc4788d8e282404bd7944dd263"> 264</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#ab90350dc4788d8e282404bd7944dd263">pwcOpt</a>;</div><div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a187a23c3b522f2aca49d3c5408ab4469"> 265</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#a187a23c3b522f2aca49d3c5408ab4469">diffOpt</a>;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a7e26ac6fb40684694f7ff2aadfde8bc7"> 268</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a7e26ac6fb40684694f7ff2aadfde8bc7">computeDiffPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">if</span> (enableDiff())</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rep = <a class="code" href="classSVF_1_1WPASolver.html#a3bd463cd456a1d58242f118328f51ddb">sccRepNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab9c0bb439f98ae11dd178148109697ab">getDiffPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1DiffPTData.html#a6eab8e1201083ed8705379e100cfb3b7">computeDiffPts</a>(rep, <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab9c0bb439f98ae11dd178148109697ab">getDiffPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(rep));</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div><div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a106691684d8e7a69157d423393d83d66"> 276</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; <a class="code" href="classSVF_1_1Andersen.html#a106691684d8e7a69157d423393d83d66">getDiffPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; {</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rep = <a class="code" href="classSVF_1_1WPASolver.html#a3bd463cd456a1d58242f118328f51ddb">sccRepNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">if</span> (enableDiff())</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab9c0bb439f98ae11dd178148109697ab">getDiffPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1DiffPTData.html#a7c4159d873a836b6f6d9b2d2c044921d">getDiffPts</a>(rep);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1PTData.html#a9ae6037637d8b9acb323333f491f4a7d">getPts</a>(rep);</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="l00286"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a4baa6fc95d52afa370fc0fabffd42018"> 286</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a4baa6fc95d52afa370fc0fabffd42018">updatePropaPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcId)</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">if</span> (!enableDiff())</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcRep = <a class="code" href="classSVF_1_1WPASolver.html#a3bd463cd456a1d58242f118328f51ddb">sccRepNode</a>(srcId);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstRep = <a class="code" href="classSVF_1_1WPASolver.html#a3bd463cd456a1d58242f118328f51ddb">sccRepNode</a>(dstId);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab9c0bb439f98ae11dd178148109697ab">getDiffPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1DiffPTData.html#a0f422f826bb378ebb34199f0378e351d">updatePropaPtsMap</a>(srcRep, dstRep);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; }</div><div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a839ed248cf5ff8359217e2029f389d8a"> 294</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a839ed248cf5ff8359217e2029f389d8a">clearPropaPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src)</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">if</span> (enableDiff())</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rep = <a class="code" href="classSVF_1_1WPASolver.html#a3bd463cd456a1d58242f118328f51ddb">sccRepNode</a>(src);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab9c0bb439f98ae11dd178148109697ab">getDiffPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1DiffPTData.html#a7784c4a76aa41149975840af8b32c2a9">clearPropaPts</a>(rep);</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; }</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;</div><div class="line"><a name="l00303"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a9075cd05cb21e0f08a1109b7af6c7480"> 303</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a9075cd05cb21e0f08a1109b7af6c7480">initWorklist</a>() {}</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;</div><div class="line"><a name="l00305"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ab81b08574f80287803dd43b5ebe2adfa"> 305</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#ab81b08574f80287803dd43b5ebe2adfa">setSCCEdgeFlag</a>(<a class="code" href="classSVF_1_1ConstraintNode.html#a6e59b815d784bc1a9437290ff0e1e28c">ConstraintNode::SCCEdgeFlag</a> f)</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; {</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html#a0fd9fca5ed82cf83dbd825d23c63783a">ConstraintNode::sccEdgeFlag</a> = f;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; }</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1WPASolver.html#abd7fd785e70f66d394088101d78598ca">processNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordtype">void</span> processAllAddr();</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; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> processLoad(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* load);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> processStore(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* load);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> processCopy(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> processGep(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepCGEdge.html">GepCGEdge</a>* edge);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> handleCopyGep(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> handleLoadStore(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> processAddr(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* addr);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> processGepPts(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts, <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepCGEdge.html">GepCGEdge</a>* edge);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;</div><div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57"> 328</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57">addCopyEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst)</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; {</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a60bb27100e8c264be2add004069d1758">addCopyCGEdge</a>(src, dst))</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; updatePropaPts(src, dst);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</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="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; }</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenBase.html#ac05796a5672ddb5bd0e08924d79da065">updateCallGraph</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">CallSiteToFunPtrMap</a>&amp; callsites);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordtype">void</span> connectCaller2CalleeParams(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>, <a class="code" href="namespaceSVF.html#ac82022f3f81965c3ce9b26c299f537a7">NodePairSet</a>&amp; cpySrcNodes);</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> mergeNodeToRep(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> mergeSrcToTgt(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcId,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tgtId);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordtype">void</span> mergeSccNodes(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> repNodeId, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>&amp; subNodes);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordtype">void</span> mergeSccCycle();</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1WPASolver.html#a138b403af0370ad6fdf8cc6af0530392">collapsePWCNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1WPASolver.html#a79c2b3f10f3f813396d8caaa1f7bc62a">collapseFields</a>();</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordtype">bool</span> collapseNodePts(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordtype">bool</span> collapseField(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordtype">void</span> updateNodeRepAndSubs(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; <a class="code" href="classSVF_1_1WPASolver.html#aaa932894d00b69cfa741f9987a9cc6b8">SCCDetect</a>();</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;</div><div class="line"><a name="l00371"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a308ef1f3a1c9fd7ac1858d0c690aa37a"> 371</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a308ef1f3a1c9fd7ac1858d0c690aa37a">sanitizePts</a>()</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; {</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">ConstraintGraph::iterator</a> it = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it!=eit; ++it)</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; {</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(it-&gt;first);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> fldInsenObjs;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; {</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(o))</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; fldInsenObjs.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(o);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; }</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : fldInsenObjs)</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; {</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> &amp;allFields = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#afd200919cf8742bb62bb0bde279a558a">getAllFieldsObjVars</a>(o);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> f : allFields) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(it-&gt;first, f);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; }</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; }</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; }</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ad92dbecc91170b235180e59ba307acda"> 393</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1Andersen.html#ad92dbecc91170b235180e59ba307acda">PTAName</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;AndersenWPA&quot;</span>;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; }</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;</div><div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#af42fe6aeacfd31bbef7f5c80c8cf6173"> 399</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#af42fe6aeacfd31bbef7f5c80c8cf6173">matchType</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>*)</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; {</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; }</div><div class="line"><a name="l00404"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a85cc81a4f9399e9a23372fa2658325a6"> 404</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a85cc81a4f9399e9a23372fa2658325a6">addTypeForGepObjNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>*)</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; {</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; }</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> cluster(<span class="keywordtype">void</span>) <span class="keyword">const</span>;</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;};</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div><div class="line"><a name="l00419"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenWaveDiff.html"> 419</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1Andersen.html">Andersen</a></div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;{</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;</div><div class="line"><a name="l00424"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenWaveDiff.html#add4dcb6d74a8ce8747bcac5f740cd672"> 424</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a>* <a class="code" href="classSVF_1_1AndersenWaveDiff.html#add4dcb6d74a8ce8747bcac5f740cd672">diffWave</a>; <span class="comment">// static instance</span></div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00427"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenWaveDiff.html#a7478d23055a5db981d7a9515cffc99da"> 427</a></span>&#160; <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a7478d23055a5db981d7a9515cffc99da">AndersenWaveDiff</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PTATY</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">AndersenWaveDiff_WPA</a>, <span class="keywordtype">bool</span> alias_check = <span class="keyword">true</span>): <a class="code" href="classSVF_1_1Andersen.html">Andersen</a>(_pag, <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, alias_check) {}</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;</div><div class="line"><a name="l00430"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenWaveDiff.html#a48ff6fc4badc79ad3204ae9bd95cc540"> 430</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a>* <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a48ff6fc4badc79ad3204ae9bd95cc540">createAndersenWaveDiff</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag)</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; {</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">if</span>(diffWave==<span class="keyword">nullptr</span>)</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; {</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; diffWave = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a>(_pag, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">AndersenWaveDiff_WPA</a>, <span class="keyword">false</span>);</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; diffWave-&gt;<a class="code" href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">analyze</a>();</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">return</span> diffWave;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; }</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">return</span> diffWave;</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"><a class="line" href="classSVF_1_1AndersenWaveDiff.html#a5da6abb1a7f0ef3e3871ea6e5a623625"> 440</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a5da6abb1a7f0ef3e3871ea6e5a623625">releaseAndersenWaveDiff</a>()</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">if</span> (diffWave)</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keyword">delete</span> diffWave;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; diffWave = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1WPASolver.html#af1bb670efde7006e3e99b3735e4fc4cc">solveWorklist</a>();</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1WPASolver.html#abd7fd785e70f66d394088101d78598ca">processNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> postProcessNode(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> handleCopyGep(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node);</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> handleLoad(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* load);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> handleStore(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* store);</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> processCopy(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge);</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;<span class="keyword">protected</span>:</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> mergeNodeToRep(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId);</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;</div><div class="line"><a name="l00459"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenWaveDiff.html#a57c7c12ebcf06f2912e93c802c6cdd02"> 459</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a57c7c12ebcf06f2912e93c802c6cdd02">processCast</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>*)</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; {</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; }</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;};</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;<span class="comment"> * Lazy Cycle Detection Based Andersen Analysis</span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00469"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html"> 469</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1AndersenLCD.html">AndersenLCD</a> : <span class="keyword">virtual</span> <span class="keyword">public</span> <a class="code" href="classSVF_1_1Andersen.html">Andersen</a></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;</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00473"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#ae4e979d6e7fa83c8961d0caf0ca0f54e"> 473</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenLCD.html">AndersenLCD</a>* <a class="code" href="classSVF_1_1AndersenLCD.html#ae4e979d6e7fa83c8961d0caf0ca0f54e">lcdAndersen</a>;</div><div class="line"><a name="l00474"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#a501ff7f8648c735c4a896063128d9ccc"> 474</a></span>&#160; <a class="code" href="namespaceSVF.html#a0d2e17d5b07a50ed95e8f407cd6dd0be">EdgeSet</a> <a class="code" href="classSVF_1_1AndersenLCD.html#a501ff7f8648c735c4a896063128d9ccc">metEdges</a>;</div><div class="line"><a name="l00475"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#a63823aa384f1438917c3625befa30bad"> 475</a></span>&#160; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> <a class="code" href="classSVF_1_1AndersenLCD.html#a63823aa384f1438917c3625befa30bad">lcdCandidates</a>;</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00478"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#aab4737557838799f52b64ceb2ec543a3"> 478</a></span>&#160; <a class="code" href="classSVF_1_1AndersenLCD.html#aab4737557838799f52b64ceb2ec543a3">AndersenLCD</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PTATY</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac7c033efd59e2b5fcded79fc3ebdb9d4">AndersenLCD_WPA</a>) :</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <a class="code" href="classSVF_1_1Andersen.html">Andersen</a>(_pag, <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>), metEdges({}), lcdCandidates( {})</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; }</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;</div><div class="line"><a name="l00484"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#aa59a98c152562ff4038bb4ac3b7a72d1"> 484</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenLCD.html">AndersenLCD</a>* <a class="code" href="classSVF_1_1AndersenLCD.html#aa59a98c152562ff4038bb4ac3b7a72d1">createAndersenLCD</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag)</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; <span class="keywordflow">if</span> (lcdAndersen == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; {</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; lcdAndersen = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenLCD.html">AndersenLCD</a>(_pag);</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; lcdAndersen-&gt;<a class="code" href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">analyze</a>();</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">return</span> lcdAndersen;</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; <span class="keywordflow">return</span> lcdAndersen;</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; }</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;</div><div class="line"><a name="l00495"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#a583b062b7c221bd50e5f37b7cb9b7a62"> 495</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenLCD.html#a583b062b7c221bd50e5f37b7cb9b7a62">releaseAndersenLCD</a>()</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; {</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keywordflow">if</span> (lcdAndersen)</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keyword">delete</span> lcdAndersen;</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; lcdAndersen = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; }</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="comment">// &#39;lcdCandidates&#39; is used to collect nodes need to be visited by SCC detector</span></div><div class="line"><a name="l00505"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#ad3f4bd35f98c43a0642b91c6b0e7acb3"> 505</a></span>&#160;<span class="comment"></span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenLCD.html#ad3f4bd35f98c43a0642b91c6b0e7acb3">hasLCDCandidate</a> ()<span class="keyword"> const</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">return</span> !lcdCandidates.empty();</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; };</div><div class="line"><a name="l00509"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#ab58bd928fbfcc56344dcaf82a9c360a2"> 509</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenLCD.html#ab58bd928fbfcc56344dcaf82a9c360a2">cleanLCDCandidate</a>()</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; {</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; lcdCandidates.clear();</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; };</div><div class="line"><a name="l00513"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#aa830cfc0e46114751337e8ea3586d0bb"> 513</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenLCD.html#aa830cfc0e46114751337e8ea3586d0bb">addLCDCandidate</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; {</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; lcdCandidates.insert(nodeId);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; };</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="comment">// &#39;metEdges&#39; is used to collect edges met by AndersenLCD, to avoid redundant visit</span></div><div class="line"><a name="l00521"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#a4f374bbd066f9e8b1480184a1416b68b"> 521</a></span>&#160;<span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenLCD.html#a4f374bbd066f9e8b1480184a1416b68b">isMetEdge</a> (<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge)<span class="keyword"> const</span></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; EdgeSet::const_iterator it = metEdges.find(edge-&gt;<a class="code" href="classSVF_1_1ConstraintEdge.html#ab201b7df925c12e6944516f4b87d7823">getEdgeID</a>());</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordflow">return</span> it != metEdges.end();</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; };</div><div class="line"><a name="l00526"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#a0c5adfc0876e9bea02fe8ded41baeb91"> 526</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenLCD.html#a0c5adfc0876e9bea02fe8ded41baeb91">addMetEdge</a>(<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge)</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; {</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; metEdges.insert(edge-&gt;<a class="code" href="classSVF_1_1ConstraintEdge.html#ab201b7df925c12e6944516f4b87d7823">getEdgeID</a>());</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; };</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="comment">//AndersenLCD worklist processer</span></div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1WPASolver.html#af1bb670efde7006e3e99b3735e4fc4cc">solveWorklist</a>();</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="comment">// Solve constraints of each nodes</span></div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> handleCopyGep(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node);</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="comment">// Collapse nodes and fields based on &#39;lcdCandidates&#39;</span></div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="keywordtype">void</span> mergeSCC();</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="comment">// AndersenLCD specified SCC detector, need to input a nodeStack &#39;lcdCandidate&#39;</span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; <a class="code" href="classSVF_1_1WPASolver.html#aaa932894d00b69cfa741f9987a9cc6b8">SCCDetect</a>();</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordtype">bool</span> mergeSrcToTgt(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId);</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;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;</div><div class="line"><a name="l00548"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html"> 548</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1AndersenHCD.html">AndersenHCD</a> : <span class="keyword">virtual</span> <span class="keyword">public</span> <a class="code" href="classSVF_1_1Andersen.html">Andersen</a></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;{</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00552"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html#a33cb18543abbcd434861c5da7e588356"> 552</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1SCCDetection.html">SCCDetection&lt;OfflineConsG*&gt;</a> <a class="code" href="classSVF_1_1AndersenHCD.html#a33cb18543abbcd434861c5da7e588356">OSCC</a>;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00555"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html#a2356a7f8215725d2ee035630b1487b05"> 555</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenHCD.html">AndersenHCD</a>* <a class="code" href="classSVF_1_1AndersenHCD.html#a2356a7f8215725d2ee035630b1487b05">hcdAndersen</a>;</div><div class="line"><a name="l00556"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html#ac1de536453e92d7628b12e54cc7b2df7"> 556</a></span>&#160; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> <a class="code" href="classSVF_1_1AndersenHCD.html#ac1de536453e92d7628b12e54cc7b2df7">mergedNodes</a>;</div><div class="line"><a name="l00557"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html#af5fe01816e65ece685a3c3537ebd0137"> 557</a></span>&#160; <a class="code" href="classSVF_1_1OfflineConsG.html">OfflineConsG</a>* <a class="code" href="classSVF_1_1AndersenHCD.html#af5fe01816e65ece685a3c3537ebd0137">oCG</a>;</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00560"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html#ac7629cede14407d42ed5b5ec7e607b0e"> 560</a></span>&#160; <a class="code" href="classSVF_1_1AndersenHCD.html#ac7629cede14407d42ed5b5ec7e607b0e">AndersenHCD</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PTATY</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a46f5e74d5f4b0a2d134e68d262079c3f">AndersenHCD_WPA</a>) :</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <a class="code" href="classSVF_1_1Andersen.html">Andersen</a>(_pag, <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>), oCG(nullptr)</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; {</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; }</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_1AndersenHCD.html#aa3553e6d7c7245d3d2cdc9d083889c28"> 566</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenHCD.html">AndersenHCD</a> *<a class="code" href="classSVF_1_1AndersenHCD.html#aa3553e6d7c7245d3d2cdc9d083889c28">createAndersenHCD</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag)</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; {</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordflow">if</span> (hcdAndersen == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; {</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; hcdAndersen = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenHCD.html">AndersenHCD</a>(_pag);</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; hcdAndersen-&gt;<a class="code" href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">analyze</a>();</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">return</span> hcdAndersen;</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">return</span> hcdAndersen;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; }</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;</div><div class="line"><a name="l00577"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html#ad2cb6f353fef40a99ae9fba112663b84"> 577</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenHCD.html#ad2cb6f353fef40a99ae9fba112663b84">releaseAndersenHCD</a>()</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; {</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keywordflow">if</span> (hcdAndersen)</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keyword">delete</span> hcdAndersen;</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; hcdAndersen = <span class="keyword">nullptr</span>;</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;</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#a891816407a4c6346f56bc01a67b78aac">initialize</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; <span class="comment">// Get offline rep node from offline constraint graph</span></div><div class="line"><a name="l00589"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html#abeafc9d45d529577b99fe821e59fd9cb"> 589</a></span>&#160;<span class="comment"></span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenHCD.html#abeafc9d45d529577b99fe821e59fd9cb">hasOfflineRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)<span class="keyword"> const</span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keywordflow">return</span> oCG-&gt;<a class="code" href="classSVF_1_1OfflineConsG.html#a0a03ef009894059fa2591ea5f9ef87d9">hasOCGRep</a>(nodeId);</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; }</div><div class="line"><a name="l00593"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html#ac2e6a5acffff567e729b6aa9e9beeb55"> 593</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1AndersenHCD.html#ac2e6a5acffff567e729b6aa9e9beeb55">getOfflineRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; {</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordflow">return</span> oCG-&gt;<a class="code" href="classSVF_1_1OfflineConsG.html#a3f390900ee8761055c6d59107bc0ad27">getOCGRep</a>(nodeId);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; }</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="comment">// The set &#39;mergedNodes&#39; is used to record the merged node, therefore avoiding re-merge nodes</span></div><div class="line"><a name="l00601"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html#ab0414e29a745ed14e790c296042d1fe9"> 601</a></span>&#160;<span class="comment"></span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenHCD.html#ab0414e29a745ed14e790c296042d1fe9">isaMergedNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)<span class="keyword"> const</span></div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; NodeSet::const_iterator it = mergedNodes.find(node);</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="keywordflow">return</span> it != mergedNodes.end();</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; };</div><div class="line"><a name="l00606"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html#a6d6d770848a42c6291db663ab138461d"> 606</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenHCD.html#a6d6d770848a42c6291db663ab138461d">setMergedNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; {</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="keywordflow">if</span> (!isaMergedNode(node))</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; mergedNodes.insert(node);</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; };</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1WPASolver.html#af1bb670efde7006e3e99b3735e4fc4cc">solveWorklist</a>();</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> mergeSCC(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keywordtype">void</span> mergeNodeAndPts(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tgt);</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;};</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;</div><div class="line"><a name="l00624"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHLCD.html"> 624</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1AndersenHLCD.html">AndersenHLCD</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1AndersenHCD.html">AndersenHCD</a>, <span class="keyword">public</span> <a class="code" href="classSVF_1_1AndersenLCD.html">AndersenLCD</a></div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;{</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00628"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHLCD.html#ad22c1990d8faad9c7cae6d779c7de94a"> 628</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenHLCD.html">AndersenHLCD</a>* <a class="code" href="classSVF_1_1AndersenHLCD.html#ad22c1990d8faad9c7cae6d779c7de94a">hlcdAndersen</a>;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160;</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00631"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHLCD.html#aa4c37c2d4119b473b29ef21d630d7f26"> 631</a></span>&#160; <a class="code" href="classSVF_1_1AndersenHLCD.html#aa4c37c2d4119b473b29ef21d630d7f26">AndersenHLCD</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PTATY</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a99d50c1712075e4c3278fc4fa4c9cd2f">AndersenHLCD_WPA</a>) :</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <a class="code" href="classSVF_1_1Andersen.html">Andersen</a>(_pag, <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>), <a class="code" href="classSVF_1_1AndersenHCD.html">AndersenHCD</a>(_pag, <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>), <a class="code" href="classSVF_1_1AndersenLCD.html">AndersenLCD</a>(_pag, <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; {</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; }</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160;</div><div class="line"><a name="l00637"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHLCD.html#a835f347f1f947ac3bbf5e4c958e59f05"> 637</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenHLCD.html">AndersenHLCD</a> *<a class="code" href="classSVF_1_1AndersenHLCD.html#a835f347f1f947ac3bbf5e4c958e59f05">createAndersenHLCD</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag)</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; {</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="keywordflow">if</span> (hlcdAndersen == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; {</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; hlcdAndersen = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenHLCD.html">AndersenHLCD</a>(_pag);</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; hlcdAndersen-&gt;<a class="code" href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">analyze</a>();</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keywordflow">return</span> hlcdAndersen;</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; }</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keywordflow">return</span> hlcdAndersen;</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; }</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160;</div><div class="line"><a name="l00648"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHLCD.html#a23f7e4f0b51bd6474644f566998d367f"> 648</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenHLCD.html#a23f7e4f0b51bd6474644f566998d367f">releaseAndersenHLCD</a>()</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; {</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordflow">if</span> (hlcdAndersen)</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keyword">delete</span> hlcdAndersen;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; hlcdAndersen = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; }</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00656"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHLCD.html#a5926080868429040f5142843f01a2a5c"> 656</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenHLCD.html#a5926080868429040f5142843f01a2a5c">initialize</a>()</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; {</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <a class="code" href="classSVF_1_1AndersenHCD.html#aaac9cac7fc5696adb585abd9d67f8c14">AndersenHCD::initialize</a>();</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; }</div><div class="line"><a name="l00660"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHLCD.html#a0ead595bb9e36c89419adb22ef11a283"> 660</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenHLCD.html#a0ead595bb9e36c89419adb22ef11a283">solveWorklist</a>()</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; {</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <a class="code" href="classSVF_1_1AndersenHCD.html#ae3ac936d1ae3e46a9110b8c8ed9f279c">AndersenHCD::solveWorklist</a>();</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; }</div><div class="line"><a name="l00664"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHLCD.html#a9582cde6cbb510f3fb624109f8ea8f63"> 664</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenHLCD.html#a9582cde6cbb510f3fb624109f8ea8f63">handleCopyGep</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node)</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; {</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <a class="code" href="classSVF_1_1AndersenLCD.html#a139d80e25fe713194f719581915d36d5">AndersenLCD::handleCopyGep</a>(node);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; }</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="keywordtype">void</span> mergeSCC(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00669"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHLCD.html#a59da289c87f9ab815a15e0a745bdc31f"> 669</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenHLCD.html#a59da289c87f9ab815a15e0a745bdc31f">mergeSrcToTgt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId)</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; {</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AndersenLCD.html#ac78efb1e4246c06c64dad1d368ed032d">AndersenLCD::mergeSrcToTgt</a>(nodeId, newRepId);</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"> 673</span>&#160;</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160;};</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160;</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* ANDERSENPASS_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html">SVF::BVDataPTAImpl</a></div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00042">PointerAnalysisImpl.h:42</a></div></div>
69
+ <a href="Andersen_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">//===- Andersen.h -- Field-sensitive Andersen&#39;s pointer analysis-------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</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="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * Andersen.h</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: Nov 12, 2013</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#ifndef ANDERSENPASS_H_</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#define ANDERSENPASS_H_</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointerAnalysisImpl_8h.html">MemoryModel/PointerAnalysisImpl.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="WPAStat_8h.html">WPA/WPAStat.h</a>&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="WPASolver_8h.html">WPA/WPASolver.h</a>&quot;</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFIR_8h.html">MemoryModel/SVFIR.h</a>&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="ConsG_8h.html">Graphs/ConsG.h</a>&quot;</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="OfflineConsG_8h.html">Graphs/OfflineConsG.h</a>&quot;</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;{</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="namespaceSVF.html#ae9c142945ea31b6c70bceb93eb6f3ca4"> 43</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="keyword">typedef</span> <a class="code" href="classSVF_1_1WPASolver.html">WPASolver&lt;ConstraintGraph*&gt;</a> <a class="code" href="namespaceSVF.html#ae9c142945ea31b6c70bceb93eb6f3ca4">WPAConstraintSolver</a>;</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"><a class="line" href="classSVF_1_1AndersenBase.html"> 50</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1AndersenBase.html">AndersenBase</a>: <span class="keyword">public</span> WPAConstraintSolver, <span class="keyword">public</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;{</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#af89bc974fda6bed754bb07b3b6ee8ffe"> 55</a></span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#af89bc974fda6bed754bb07b3b6ee8ffe">AndersenBase</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PTATY</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a9a25374fb6d2218c6c59de0482548f49">Andersen_BASE</a>, <span class="keywordtype">bool</span> alias_check = <span class="keyword">true</span>)</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; : <a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>(_pag, <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, alias_check), <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>(nullptr)</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#aa7c0636780a86f376e9222bce771e859">iterationForPrintStat</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#afc320fbf269404fe128e69c98e6f9cac">OnTheFlyIterBudgetForStat</a>;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a8da8746b38c55561d3f6904e8fd0a9aa">~AndersenBase</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">analyze</a>() <span class="keyword">override</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"> 68</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#a891816407a4c6346f56bc01a67b78aac">initialize</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#a28a1c3571cdee5e05004b29ace364e67">finalize</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#ac05796a5672ddb5bd0e08924d79da065"> 74</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenBase.html#ac05796a5672ddb5bd0e08924d79da065">updateCallGraph</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">CallSiteToFunPtrMap</a>&amp;)<span class="keyword"> override</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</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"><a class="line" href="classSVF_1_1AndersenBase.html#afa4d710b093a6c7a33cb1aef823781f0"> 81</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenBase.html#afa4d710b093a6c7a33cb1aef823781f0">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AndersenBase.html">AndersenBase</a> *)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a0167fa7b59571c07b2cbec08905f6629"> 85</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenBase.html#a0167fa7b59571c07b2cbec08905f6629">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a> *pta)</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">return</span> ( pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a9a25374fb6d2218c6c59de0482548f49">Andersen_BASE</a></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab68615784a520e39856be5237930e6a6">Andersen_WPA</a></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac7c033efd59e2b5fcded79fc3ebdb9d4">AndersenLCD_WPA</a></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a46f5e74d5f4b0a2d134e68d262079c3f">AndersenHCD_WPA</a></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a99d50c1712075e4c3278fc4fa4c9cd2f">AndersenHLCD_WPA</a></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">AndersenWaveDiff_WPA</a></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac581e279a4bd69c059b0e5987f839a1f">AndersenWaveDiffWithType_WPA</a></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a6c06b12c95a4aa57edc6bef57514a7e1">AndersenSCD_WPA</a></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85accfa4ed42d3a3ac5e4abc403e738427b">AndersenSFR_WPA</a></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85acc2e7cbdd04a614a3b6189d2f01042f3">TypeCPP_WPA</a></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad24ef5326c26db858c73432aa7e67a0a">Steensgaard_WPA</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"> 100</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#aaec5125db063f8c1e7431ac7fe7a70f2"> 102</a></span>&#160; <a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</a>* <a class="code" href="classSVF_1_1AndersenBase.html#aaec5125db063f8c1e7431ac7fe7a70f2">getConstraintGraph</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="keywordflow">return</span> <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; }</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a566830d0c7a1f5cd967bb8f2ab168f8d"> 108</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#a566830d0c7a1f5cd967bb8f2ab168f8d">printStat</a>()</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="classSVF_1_1PointerAnalysis.html#ab83b827ea42d3a61aad20b1a1485d866">PointerAnalysis::dumpStat</a>();</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#af37392229dab0a1f2f807a12186c3b39">normalizePointsTo</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#aebfe0c7238eb24f74f105b950b86cb5e">cleanConsCG</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>);</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"><a class="line" href="classSVF_1_1AndersenBase.html#a6c3d6b4c004d9e43690c3807502eed74"> 118</a></span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1AndersenBase.html#a6c3d6b4c004d9e43690c3807502eed74">redundantGepNodes</a>;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a4acad18a6eb585ba9e3d2276dd591067"> 122</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AndersenBase.html#a4acad18a6eb585ba9e3d2276dd591067">numOfProcessedAddr</a>; </div><div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a04acd871bd1b98cd9e83e395334ac130"> 123</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AndersenBase.html#a04acd871bd1b98cd9e83e395334ac130">numOfProcessedCopy</a>; </div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#aa1246b392aeae1fd10c8a9ebedcc2dd9"> 124</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AndersenBase.html#aa1246b392aeae1fd10c8a9ebedcc2dd9">numOfProcessedGep</a>; </div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a69aae96fc1c99bf108075e5061f50f9e"> 125</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AndersenBase.html#a69aae96fc1c99bf108075e5061f50f9e">numOfProcessedLoad</a>; </div><div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a2b763519509ce21cf40893c01f8357b6"> 126</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AndersenBase.html#a2b763519509ce21cf40893c01f8357b6">numOfProcessedStore</a>; </div><div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a25b00d9ca71cbdd27530fc5d0dc84ee5"> 127</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AndersenBase.html#a25b00d9ca71cbdd27530fc5d0dc84ee5">numOfSfrs</a>;</div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a9f453ec1b4236b8194ae590981217259"> 128</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AndersenBase.html#a9f453ec1b4236b8194ae590981217259">numOfFieldExpand</a>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div><div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a0d7298cbf83568f24fd2bd1926a32968"> 130</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AndersenBase.html#a0d7298cbf83568f24fd2bd1926a32968">numOfSCCDetection</a>;</div><div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a6b7d0e57f741c446d0bf178939960143"> 131</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1AndersenBase.html#a6b7d0e57f741c446d0bf178939960143">timeOfSCCDetection</a>;</div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a02c5a50b214d36921e1404784e76704d"> 132</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1AndersenBase.html#a02c5a50b214d36921e1404784e76704d">timeOfSCCMerges</a>;</div><div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#ad40b196c2c699bd115529b806d20de25"> 133</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1AndersenBase.html#ad40b196c2c699bd115529b806d20de25">timeOfCollapse</a>;</div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#adaf738bee77a4b1fbb8d42911fabdb49"> 134</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AndersenBase.html#adaf738bee77a4b1fbb8d42911fabdb49">AveragePointsToSetSize</a>;</div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#abd73e930450b7c605f478672bdf9bdae"> 135</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1AndersenBase.html#abd73e930450b7c605f478672bdf9bdae">MaxPointsToSetSize</a>;</div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#aae14de6fbca9280d8d0290326aa493f0"> 136</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1AndersenBase.html#aae14de6fbca9280d8d0290326aa493f0">timeOfProcessCopyGep</a>;</div><div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a9fe738f1e11c80006d540f246a80bfdf"> 137</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1AndersenBase.html#a9fe738f1e11c80006d540f246a80bfdf">timeOfProcessLoadStore</a>;</div><div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a2afb49f513c9534fd051117b59dc056b"> 138</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1AndersenBase.html#a2afb49f513c9534fd051117b59dc056b">timeOfUpdateCallGraph</a>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd"> 143</a></span>&#160; <a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</a>* <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;};</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html"> 149</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1Andersen.html">Andersen</a>: <span class="keyword">public</span> <a class="code" href="classSVF_1_1AndersenBase.html">AndersenBase</a></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;{</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a77e7378a3a35622bde2371d7d3ed7013"> 154</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1SCCDetection.html">SCCDetection&lt;ConstraintGraph*&gt;</a> <a class="code" href="classSVF_1_1Andersen.html#a77e7378a3a35622bde2371d7d3ed7013">CGSCC</a>;</div><div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a0f65f1881111167bffe1cb2ad05c0a51"> 155</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap&lt;CallSite, NodeID&gt;</a> <a class="code" href="classSVF_1_1Andersen.html#a0f65f1881111167bffe1cb2ad05c0a51">CallSite2DummyValPN</a>;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a680dc709c0263fc1a13aa5c81d95fc72"> 158</a></span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a680dc709c0263fc1a13aa5c81d95fc72">Andersen</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PTATY</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab68615784a520e39856be5237930e6a6">Andersen_WPA</a>, <span class="keywordtype">bool</span> alias_check = <span class="keyword">true</span>)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; : <a class="code" href="classSVF_1_1AndersenBase.html">AndersenBase</a>(_pag, <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, alias_check), pwcOpt(<a class="code" href="cJSON_8cpp.html#a65e9886d74aaee76545e83dd09011727">false</a>), diffOpt(<a class="code" href="cJSON_8cpp.html#a930920b2bc42824a5c03be681830f4b2">true</a>)</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a15218a84e653baf2cd7f1dc95ccfb77d"> 164</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1Andersen.html#a15218a84e653baf2cd7f1dc95ccfb77d">~Andersen</a>()</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;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#a891816407a4c6346f56bc01a67b78aac">initialize</a>();</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#a28a1c3571cdee5e05004b29ace364e67">finalize</a>();</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a95c0b2f501dff61993cd43a5cab89e17"> 176</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a95c0b2f501dff61993cd43a5cab89e17">resetData</a>()</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; <a class="code" href="classSVF_1_1AndersenBase.html#adaf738bee77a4b1fbb8d42911fabdb49">AveragePointsToSetSize</a> = 0;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#abd73e930450b7c605f478672bdf9bdae">MaxPointsToSetSize</a> = 0;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#aae14de6fbca9280d8d0290326aa493f0">timeOfProcessCopyGep</a> = 0;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a9fe738f1e11c80006d540f246a80bfdf">timeOfProcessLoadStore</a> = 0;</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;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#aaec53980b25ed769fa9a985860f810b5"> 186</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#aaec53980b25ed769fa9a985860f810b5">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1Andersen.html">Andersen</a> *)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</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"><a class="line" href="classSVF_1_1Andersen.html#a60214d7c6c9aac8e498644b048660ab9"> 190</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#a60214d7c6c9aac8e498644b048660ab9">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a> *pta)</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; <span class="keywordflow">return</span> (pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab68615784a520e39856be5237930e6a6">Andersen_WPA</a></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac7c033efd59e2b5fcded79fc3ebdb9d4">AndersenLCD_WPA</a></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a46f5e74d5f4b0a2d134e68d262079c3f">AndersenHCD_WPA</a></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a99d50c1712075e4c3278fc4fa4c9cd2f">AndersenHLCD_WPA</a></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">AndersenWaveDiff_WPA</a></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac581e279a4bd69c059b0e5987f839a1f">AndersenWaveDiffWithType_WPA</a></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a6c06b12c95a4aa57edc6bef57514a7e1">AndersenSCD_WPA</a></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; || pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85accfa4ed42d3a3ac5e4abc403e738427b">AndersenSFR_WPA</a>);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;</div><div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30"> 205</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">sccRepNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div><div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#acd2feff818906db49a1bb2d94c33db5f"> 209</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>&amp; <a class="code" href="classSVF_1_1Andersen.html#acd2feff818906db49a1bb2d94c33db5f">sccSubNodes</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> repId)</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">return</span> <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#aed605b010e313f4b11e95b83fe50e3b3">sccSubNodes</a>(repId);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639"> 216</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; <a class="code" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">getPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</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">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1PTData.html#a9ae6037637d8b9acb323333f491f4a7d">getPts</a>(<a class="code" href="classSVF_1_1WPASolver.html#a3bd463cd456a1d58242f118328f51ddb">sccRepNode</a>(<span class="keywordtype">id</span>));</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"><a class="line" href="classSVF_1_1Andersen.html#ab7dadfd4d810be4863f03ed996b3b3c4"> 220</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#ab7dadfd4d810be4863f03ed996b3b3c4">unionPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; target)</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="keywordtype">id</span> = <a class="code" href="classSVF_1_1WPASolver.html#a3bd463cd456a1d58242f118328f51ddb">sccRepNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1PTData.html#af7aa22f11558c12ff16612174e2221dd">unionPts</a>(<span class="keywordtype">id</span>, target);</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"><a class="line" href="classSVF_1_1Andersen.html#a8da98a9d33a6e9be329309f4af65e969"> 225</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#a8da98a9d33a6e9be329309f4af65e969">unionPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd)</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordtype">id</span> = <a class="code" href="classSVF_1_1WPASolver.html#a3bd463cd456a1d58242f118328f51ddb">sccRepNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; ptd = <a class="code" href="classSVF_1_1WPASolver.html#a3bd463cd456a1d58242f118328f51ddb">sccRepNode</a>(ptd);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1PTData.html#af7aa22f11558c12ff16612174e2221dd">unionPts</a>(<span class="keywordtype">id</span>,ptd);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;</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="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a8d6cea841b6ded0f80ef2b5784e9b752">dumpTopLevelPtsTo</a>();</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a2b13f14db90ad59a61dff097bcdf8fb7"> 235</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a2b13f14db90ad59a61dff097bcdf8fb7">setPWCOpt</a>(<span class="keywordtype">bool</span> flag)</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; pwcOpt = flag;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">if</span> (pwcOpt)</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; setSCCEdgeFlag(<a class="code" href="classSVF_1_1ConstraintNode.html#a6e59b815d784bc1a9437290ff0e1e28ca7f8c92a2f50277fee80899235ae477f9">ConstraintNode::Direct</a>);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; setSCCEdgeFlag(<a class="code" href="classSVF_1_1ConstraintNode.html#a6e59b815d784bc1a9437290ff0e1e28ca4b202c80793ae965686b9d275a5c586a">ConstraintNode::Copy</a>);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;</div><div class="line"><a name="l00244"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a44d62658bbd2efcef5ff479930b5dce9"> 244</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#a44d62658bbd2efcef5ff479930b5dce9">mergePWC</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">return</span> pwcOpt;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;</div><div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a69161671030b51c5a6cf139325aa098f"> 249</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a69161671030b51c5a6cf139325aa098f">setDiffOpt</a>(<span class="keywordtype">bool</span> flag)</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; diffOpt = flag;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; }</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;</div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a6804284abb4b63f44eefdaf044a301f7"> 254</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#a6804284abb4b63f44eefdaf044a301f7">enableDiff</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">return</span> diffOpt;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; }</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a2f88b6035ecb480f7d11afe6bc666541"> 261</a></span>&#160; CallSite2DummyValPN <a class="code" href="classSVF_1_1Andersen.html#a2f88b6035ecb480f7d11afe6bc666541">callsite2DummyValPN</a>; </div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordtype">void</span> heapAllocatorViaIndCall(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs,<a class="code" href="namespaceSVF.html#ac82022f3f81965c3ce9b26c299f537a7">NodePairSet</a> &amp;cpySrcNodes);</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"><a class="line" href="classSVF_1_1Andersen.html#ab90350dc4788d8e282404bd7944dd263"> 264</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#ab90350dc4788d8e282404bd7944dd263">pwcOpt</a>;</div><div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a187a23c3b522f2aca49d3c5408ab4469"> 265</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#a187a23c3b522f2aca49d3c5408ab4469">diffOpt</a>;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a7e26ac6fb40684694f7ff2aadfde8bc7"> 268</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a7e26ac6fb40684694f7ff2aadfde8bc7">computeDiffPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">if</span> (enableDiff())</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rep = <a class="code" href="classSVF_1_1WPASolver.html#a3bd463cd456a1d58242f118328f51ddb">sccRepNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab9c0bb439f98ae11dd178148109697ab">getDiffPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1DiffPTData.html#a6eab8e1201083ed8705379e100cfb3b7">computeDiffPts</a>(rep, <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab9c0bb439f98ae11dd178148109697ab">getDiffPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(rep));</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div><div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a106691684d8e7a69157d423393d83d66"> 276</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; <a class="code" href="classSVF_1_1Andersen.html#a106691684d8e7a69157d423393d83d66">getDiffPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; {</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rep = <a class="code" href="classSVF_1_1WPASolver.html#a3bd463cd456a1d58242f118328f51ddb">sccRepNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">if</span> (enableDiff())</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab9c0bb439f98ae11dd178148109697ab">getDiffPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1DiffPTData.html#a7c4159d873a836b6f6d9b2d2c044921d">getDiffPts</a>(rep);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1PTData.html#a9ae6037637d8b9acb323333f491f4a7d">getPts</a>(rep);</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="l00286"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a4baa6fc95d52afa370fc0fabffd42018"> 286</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a4baa6fc95d52afa370fc0fabffd42018">updatePropaPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcId)</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">if</span> (!enableDiff())</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcRep = <a class="code" href="classSVF_1_1WPASolver.html#a3bd463cd456a1d58242f118328f51ddb">sccRepNode</a>(srcId);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstRep = <a class="code" href="classSVF_1_1WPASolver.html#a3bd463cd456a1d58242f118328f51ddb">sccRepNode</a>(dstId);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab9c0bb439f98ae11dd178148109697ab">getDiffPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1DiffPTData.html#a0f422f826bb378ebb34199f0378e351d">updatePropaPtsMap</a>(srcRep, dstRep);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; }</div><div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a839ed248cf5ff8359217e2029f389d8a"> 294</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a839ed248cf5ff8359217e2029f389d8a">clearPropaPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src)</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">if</span> (enableDiff())</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rep = <a class="code" href="classSVF_1_1WPASolver.html#a3bd463cd456a1d58242f118328f51ddb">sccRepNode</a>(src);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab9c0bb439f98ae11dd178148109697ab">getDiffPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1DiffPTData.html#a7784c4a76aa41149975840af8b32c2a9">clearPropaPts</a>(rep);</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; }</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;</div><div class="line"><a name="l00303"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a9075cd05cb21e0f08a1109b7af6c7480"> 303</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a9075cd05cb21e0f08a1109b7af6c7480">initWorklist</a>() {}</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;</div><div class="line"><a name="l00305"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ab81b08574f80287803dd43b5ebe2adfa"> 305</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#ab81b08574f80287803dd43b5ebe2adfa">setSCCEdgeFlag</a>(<a class="code" href="classSVF_1_1ConstraintNode.html#a6e59b815d784bc1a9437290ff0e1e28c">ConstraintNode::SCCEdgeFlag</a> f)</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; {</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html#a0fd9fca5ed82cf83dbd825d23c63783a">ConstraintNode::sccEdgeFlag</a> = f;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; }</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1WPASolver.html#abd7fd785e70f66d394088101d78598ca">processNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordtype">void</span> processAllAddr();</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; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> processLoad(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* load);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> processStore(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* load);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> processCopy(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> processGep(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepCGEdge.html">GepCGEdge</a>* edge);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> handleCopyGep(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> handleLoadStore(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> processAddr(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* addr);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> processGepPts(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts, <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepCGEdge.html">GepCGEdge</a>* edge);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;</div><div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57"> 328</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57">addCopyEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst)</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; {</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a60bb27100e8c264be2add004069d1758">addCopyCGEdge</a>(src, dst))</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; updatePropaPts(src, dst);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</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="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; }</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenBase.html#ac05796a5672ddb5bd0e08924d79da065">updateCallGraph</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">CallSiteToFunPtrMap</a>&amp; callsites);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordtype">void</span> connectCaller2CalleeParams(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>, <a class="code" href="namespaceSVF.html#ac82022f3f81965c3ce9b26c299f537a7">NodePairSet</a>&amp; cpySrcNodes);</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> mergeNodeToRep(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> mergeSrcToTgt(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcId,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tgtId);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordtype">void</span> mergeSccNodes(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> repNodeId, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>&amp; subNodes);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordtype">void</span> mergeSccCycle();</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1WPASolver.html#a138b403af0370ad6fdf8cc6af0530392">collapsePWCNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1WPASolver.html#a79c2b3f10f3f813396d8caaa1f7bc62a">collapseFields</a>();</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordtype">bool</span> collapseNodePts(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordtype">bool</span> collapseField(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordtype">void</span> updateNodeRepAndSubs(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; <a class="code" href="classSVF_1_1WPASolver.html#aaa932894d00b69cfa741f9987a9cc6b8">SCCDetect</a>();</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;</div><div class="line"><a name="l00371"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a308ef1f3a1c9fd7ac1858d0c690aa37a"> 371</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a308ef1f3a1c9fd7ac1858d0c690aa37a">sanitizePts</a>()</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; {</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">ConstraintGraph::iterator</a> it = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it!=eit; ++it)</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; {</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(it-&gt;first);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> fldInsenObjs;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; {</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(o))</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; fldInsenObjs.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(o);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; }</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : fldInsenObjs)</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; {</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> &amp;allFields = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#afd200919cf8742bb62bb0bde279a558a">getAllFieldsObjVars</a>(o);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> f : allFields) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(it-&gt;first, f);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; }</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; }</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; }</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ad92dbecc91170b235180e59ba307acda"> 393</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1Andersen.html#ad92dbecc91170b235180e59ba307acda">PTAName</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;AndersenWPA&quot;</span>;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; }</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;</div><div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#af42fe6aeacfd31bbef7f5c80c8cf6173"> 399</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#af42fe6aeacfd31bbef7f5c80c8cf6173">matchType</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>*)</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; {</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; }</div><div class="line"><a name="l00404"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a85cc81a4f9399e9a23372fa2658325a6"> 404</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a85cc81a4f9399e9a23372fa2658325a6">addTypeForGepObjNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>*)</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; {</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; }</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> cluster(<span class="keywordtype">void</span>) <span class="keyword">const</span>;</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;};</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div><div class="line"><a name="l00419"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenWaveDiff.html"> 419</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1Andersen.html">Andersen</a></div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;{</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;</div><div class="line"><a name="l00424"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenWaveDiff.html#add4dcb6d74a8ce8747bcac5f740cd672"> 424</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a>* <a class="code" href="classSVF_1_1AndersenWaveDiff.html#add4dcb6d74a8ce8747bcac5f740cd672">diffWave</a>; <span class="comment">// static instance</span></div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00427"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenWaveDiff.html#a7478d23055a5db981d7a9515cffc99da"> 427</a></span>&#160; <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a7478d23055a5db981d7a9515cffc99da">AndersenWaveDiff</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PTATY</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">AndersenWaveDiff_WPA</a>, <span class="keywordtype">bool</span> alias_check = <span class="keyword">true</span>): <a class="code" href="classSVF_1_1Andersen.html">Andersen</a>(_pag, <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, alias_check) {}</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;</div><div class="line"><a name="l00430"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenWaveDiff.html#a48ff6fc4badc79ad3204ae9bd95cc540"> 430</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a>* <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a48ff6fc4badc79ad3204ae9bd95cc540">createAndersenWaveDiff</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag)</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; {</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">if</span>(diffWave==<span class="keyword">nullptr</span>)</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; {</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; diffWave = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a>(_pag, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">AndersenWaveDiff_WPA</a>, <span class="keyword">false</span>);</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; diffWave-&gt;<a class="code" href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">analyze</a>();</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">return</span> diffWave;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; }</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">return</span> diffWave;</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"><a class="line" href="classSVF_1_1AndersenWaveDiff.html#a5da6abb1a7f0ef3e3871ea6e5a623625"> 440</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a5da6abb1a7f0ef3e3871ea6e5a623625">releaseAndersenWaveDiff</a>()</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">if</span> (diffWave)</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keyword">delete</span> diffWave;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; diffWave = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1WPASolver.html#af1bb670efde7006e3e99b3735e4fc4cc">solveWorklist</a>();</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1WPASolver.html#abd7fd785e70f66d394088101d78598ca">processNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> postProcessNode(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> handleLoad(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* load);</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> handleStore(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* store);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> mergeNodeToRep(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId);</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;</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;<span class="comment"> * Lazy Cycle Detection Based Andersen Analysis</span></div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00461"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html"> 461</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1AndersenLCD.html">AndersenLCD</a> : <span class="keyword">virtual</span> <span class="keyword">public</span> <a class="code" href="classSVF_1_1Andersen.html">Andersen</a></div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;{</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00465"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#ae4e979d6e7fa83c8961d0caf0ca0f54e"> 465</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenLCD.html">AndersenLCD</a>* <a class="code" href="classSVF_1_1AndersenLCD.html#ae4e979d6e7fa83c8961d0caf0ca0f54e">lcdAndersen</a>;</div><div class="line"><a name="l00466"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#a501ff7f8648c735c4a896063128d9ccc"> 466</a></span>&#160; <a class="code" href="namespaceSVF.html#a0d2e17d5b07a50ed95e8f407cd6dd0be">EdgeSet</a> <a class="code" href="classSVF_1_1AndersenLCD.html#a501ff7f8648c735c4a896063128d9ccc">metEdges</a>;</div><div class="line"><a name="l00467"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#a63823aa384f1438917c3625befa30bad"> 467</a></span>&#160; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> <a class="code" href="classSVF_1_1AndersenLCD.html#a63823aa384f1438917c3625befa30bad">lcdCandidates</a>;</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="keyword">public</span>:</div><div class="line"><a name="l00470"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#aab4737557838799f52b64ceb2ec543a3"> 470</a></span>&#160; <a class="code" href="classSVF_1_1AndersenLCD.html#aab4737557838799f52b64ceb2ec543a3">AndersenLCD</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PTATY</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac7c033efd59e2b5fcded79fc3ebdb9d4">AndersenLCD_WPA</a>) :</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <a class="code" href="classSVF_1_1Andersen.html">Andersen</a>(_pag, <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>), metEdges({}), lcdCandidates( {})</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; {</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; }</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;</div><div class="line"><a name="l00476"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#aa59a98c152562ff4038bb4ac3b7a72d1"> 476</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenLCD.html">AndersenLCD</a>* <a class="code" href="classSVF_1_1AndersenLCD.html#aa59a98c152562ff4038bb4ac3b7a72d1">createAndersenLCD</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag)</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; {</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keywordflow">if</span> (lcdAndersen == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; {</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; lcdAndersen = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenLCD.html">AndersenLCD</a>(_pag);</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; lcdAndersen-&gt;<a class="code" href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">analyze</a>();</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keywordflow">return</span> lcdAndersen;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; }</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">return</span> lcdAndersen;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; }</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;</div><div class="line"><a name="l00487"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#a583b062b7c221bd50e5f37b7cb9b7a62"> 487</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenLCD.html#a583b062b7c221bd50e5f37b7cb9b7a62">releaseAndersenLCD</a>()</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; {</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">if</span> (lcdAndersen)</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keyword">delete</span> lcdAndersen;</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; lcdAndersen = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; }</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="comment">// &#39;lcdCandidates&#39; is used to collect nodes need to be visited by SCC detector</span></div><div class="line"><a name="l00497"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#ad3f4bd35f98c43a0642b91c6b0e7acb3"> 497</a></span>&#160;<span class="comment"></span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenLCD.html#ad3f4bd35f98c43a0642b91c6b0e7acb3">hasLCDCandidate</a> ()<span class="keyword"> const</span></div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="keywordflow">return</span> !lcdCandidates.empty();</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; };</div><div class="line"><a name="l00501"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#ab58bd928fbfcc56344dcaf82a9c360a2"> 501</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenLCD.html#ab58bd928fbfcc56344dcaf82a9c360a2">cleanLCDCandidate</a>()</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; {</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; lcdCandidates.clear();</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; };</div><div class="line"><a name="l00505"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#aa830cfc0e46114751337e8ea3586d0bb"> 505</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenLCD.html#aa830cfc0e46114751337e8ea3586d0bb">addLCDCandidate</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; {</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; lcdCandidates.insert(nodeId);</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; };</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="comment">// &#39;metEdges&#39; is used to collect edges met by AndersenLCD, to avoid redundant visit</span></div><div class="line"><a name="l00513"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#a4f374bbd066f9e8b1480184a1416b68b"> 513</a></span>&#160;<span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenLCD.html#a4f374bbd066f9e8b1480184a1416b68b">isMetEdge</a> (<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge)<span class="keyword"> const</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; EdgeSet::const_iterator it = metEdges.find(edge-&gt;<a class="code" href="classSVF_1_1ConstraintEdge.html#ab201b7df925c12e6944516f4b87d7823">getEdgeID</a>());</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">return</span> it != metEdges.end();</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_1AndersenLCD.html#a0c5adfc0876e9bea02fe8ded41baeb91"> 518</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenLCD.html#a0c5adfc0876e9bea02fe8ded41baeb91">addMetEdge</a>(<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge)</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; metEdges.insert(edge-&gt;<a class="code" href="classSVF_1_1ConstraintEdge.html#ab201b7df925c12e6944516f4b87d7823">getEdgeID</a>());</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; };</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; <span class="comment">//AndersenLCD worklist processer</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1WPASolver.html#af1bb670efde7006e3e99b3735e4fc4cc">solveWorklist</a>();</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="comment">// Solve constraints of each nodes</span></div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> handleCopyGep(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node);</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="comment">// Collapse nodes and fields based on &#39;lcdCandidates&#39;</span></div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordtype">void</span> mergeSCC();</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="comment">// AndersenLCD specified SCC detector, need to input a nodeStack &#39;lcdCandidate&#39;</span></div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; <a class="code" href="classSVF_1_1WPASolver.html#aaa932894d00b69cfa741f9987a9cc6b8">SCCDetect</a>();</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordtype">bool</span> mergeSrcToTgt(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;};</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;</div><div class="line"><a name="l00540"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html"> 540</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1AndersenHCD.html">AndersenHCD</a> : <span class="keyword">virtual</span> <span class="keyword">public</span> <a class="code" href="classSVF_1_1Andersen.html">Andersen</a></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;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00544"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html#a33cb18543abbcd434861c5da7e588356"> 544</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1SCCDetection.html">SCCDetection&lt;OfflineConsG*&gt;</a> <a class="code" href="classSVF_1_1AndersenHCD.html#a33cb18543abbcd434861c5da7e588356">OSCC</a>;</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;<span class="keyword">private</span>:</div><div class="line"><a name="l00547"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html#a2356a7f8215725d2ee035630b1487b05"> 547</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenHCD.html">AndersenHCD</a>* <a class="code" href="classSVF_1_1AndersenHCD.html#a2356a7f8215725d2ee035630b1487b05">hcdAndersen</a>;</div><div class="line"><a name="l00548"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html#ac1de536453e92d7628b12e54cc7b2df7"> 548</a></span>&#160; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> <a class="code" href="classSVF_1_1AndersenHCD.html#ac1de536453e92d7628b12e54cc7b2df7">mergedNodes</a>;</div><div class="line"><a name="l00549"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html#af5fe01816e65ece685a3c3537ebd0137"> 549</a></span>&#160; <a class="code" href="classSVF_1_1OfflineConsG.html">OfflineConsG</a>* <a class="code" href="classSVF_1_1AndersenHCD.html#af5fe01816e65ece685a3c3537ebd0137">oCG</a>;</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"> 551</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00552"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html#ac7629cede14407d42ed5b5ec7e607b0e"> 552</a></span>&#160; <a class="code" href="classSVF_1_1AndersenHCD.html#ac7629cede14407d42ed5b5ec7e607b0e">AndersenHCD</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PTATY</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a46f5e74d5f4b0a2d134e68d262079c3f">AndersenHCD_WPA</a>) :</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <a class="code" href="classSVF_1_1Andersen.html">Andersen</a>(_pag, <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>), oCG(nullptr)</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; {</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; }</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_1AndersenHCD.html#aa3553e6d7c7245d3d2cdc9d083889c28"> 558</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenHCD.html">AndersenHCD</a> *<a class="code" href="classSVF_1_1AndersenHCD.html#aa3553e6d7c7245d3d2cdc9d083889c28">createAndersenHCD</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag)</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> (hcdAndersen == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; {</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; hcdAndersen = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenHCD.html">AndersenHCD</a>(_pag);</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; hcdAndersen-&gt;<a class="code" href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">analyze</a>();</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">return</span> hcdAndersen;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; }</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="keywordflow">return</span> hcdAndersen;</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;</div><div class="line"><a name="l00569"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html#ad2cb6f353fef40a99ae9fba112663b84"> 569</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenHCD.html#ad2cb6f353fef40a99ae9fba112663b84">releaseAndersenHCD</a>()</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> (hcdAndersen)</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keyword">delete</span> hcdAndersen;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; hcdAndersen = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; }</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#a891816407a4c6346f56bc01a67b78aac">initialize</a>();</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160;</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="comment">// Get offline rep node from offline constraint graph</span></div><div class="line"><a name="l00581"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html#abeafc9d45d529577b99fe821e59fd9cb"> 581</a></span>&#160;<span class="comment"></span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenHCD.html#abeafc9d45d529577b99fe821e59fd9cb">hasOfflineRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)<span class="keyword"> const</span></div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keywordflow">return</span> oCG-&gt;<a class="code" href="classSVF_1_1OfflineConsG.html#a0a03ef009894059fa2591ea5f9ef87d9">hasOCGRep</a>(nodeId);</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"><a class="line" href="classSVF_1_1AndersenHCD.html#ac2e6a5acffff567e729b6aa9e9beeb55"> 585</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1AndersenHCD.html#ac2e6a5acffff567e729b6aa9e9beeb55">getOfflineRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</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; <span class="keywordflow">return</span> oCG-&gt;<a class="code" href="classSVF_1_1OfflineConsG.html#a3f390900ee8761055c6d59107bc0ad27">getOCGRep</a>(nodeId);</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"> 590</span>&#160;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="comment">// The set &#39;mergedNodes&#39; is used to record the merged node, therefore avoiding re-merge nodes</span></div><div class="line"><a name="l00593"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html#ab0414e29a745ed14e790c296042d1fe9"> 593</a></span>&#160;<span class="comment"></span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenHCD.html#ab0414e29a745ed14e790c296042d1fe9">isaMergedNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)<span class="keyword"> const</span></div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; NodeSet::const_iterator it = mergedNodes.find(node);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="keywordflow">return</span> it != mergedNodes.end();</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; };</div><div class="line"><a name="l00598"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHCD.html#a6d6d770848a42c6291db663ab138461d"> 598</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenHCD.html#a6d6d770848a42c6291db663ab138461d">setMergedNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; {</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="keywordflow">if</span> (!isaMergedNode(node))</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; mergedNodes.insert(node);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; };</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1WPASolver.html#af1bb670efde7006e3e99b3735e4fc4cc">solveWorklist</a>();</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> mergeSCC(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keywordtype">void</span> mergeNodeAndPts(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tgt);</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160;};</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160;</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;</div><div class="line"><a name="l00616"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHLCD.html"> 616</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1AndersenHLCD.html">AndersenHLCD</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1AndersenHCD.html">AndersenHCD</a>, <span class="keyword">public</span> <a class="code" href="classSVF_1_1AndersenLCD.html">AndersenLCD</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;</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00620"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHLCD.html#ad22c1990d8faad9c7cae6d779c7de94a"> 620</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenHLCD.html">AndersenHLCD</a>* <a class="code" href="classSVF_1_1AndersenHLCD.html#ad22c1990d8faad9c7cae6d779c7de94a">hlcdAndersen</a>;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00623"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHLCD.html#aa4c37c2d4119b473b29ef21d630d7f26"> 623</a></span>&#160; <a class="code" href="classSVF_1_1AndersenHLCD.html#aa4c37c2d4119b473b29ef21d630d7f26">AndersenHLCD</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PTATY</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a99d50c1712075e4c3278fc4fa4c9cd2f">AndersenHLCD_WPA</a>) :</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <a class="code" href="classSVF_1_1Andersen.html">Andersen</a>(_pag, <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>), <a class="code" href="classSVF_1_1AndersenHCD.html">AndersenHCD</a>(_pag, <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>), <a class="code" href="classSVF_1_1AndersenLCD.html">AndersenLCD</a>(_pag, <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; {</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; }</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;</div><div class="line"><a name="l00629"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHLCD.html#a835f347f1f947ac3bbf5e4c958e59f05"> 629</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenHLCD.html">AndersenHLCD</a> *<a class="code" href="classSVF_1_1AndersenHLCD.html#a835f347f1f947ac3bbf5e4c958e59f05">createAndersenHLCD</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag)</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; {</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keywordflow">if</span> (hlcdAndersen == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; {</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; hlcdAndersen = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenHLCD.html">AndersenHLCD</a>(_pag);</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; hlcdAndersen-&gt;<a class="code" href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">analyze</a>();</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">return</span> hlcdAndersen;</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; }</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="keywordflow">return</span> hlcdAndersen;</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; }</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;</div><div class="line"><a name="l00640"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHLCD.html#a23f7e4f0b51bd6474644f566998d367f"> 640</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenHLCD.html#a23f7e4f0b51bd6474644f566998d367f">releaseAndersenHLCD</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"> 642</span>&#160; <span class="keywordflow">if</span> (hlcdAndersen)</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keyword">delete</span> hlcdAndersen;</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; hlcdAndersen = <span class="keyword">nullptr</span>;</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"> 646</span>&#160;</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00648"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHLCD.html#a5926080868429040f5142843f01a2a5c"> 648</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenHLCD.html#a5926080868429040f5142843f01a2a5c">initialize</a>()</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; {</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <a class="code" href="classSVF_1_1AndersenHCD.html#aaac9cac7fc5696adb585abd9d67f8c14">AndersenHCD::initialize</a>();</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"><a class="line" href="classSVF_1_1AndersenHLCD.html#a0ead595bb9e36c89419adb22ef11a283"> 652</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenHLCD.html#a0ead595bb9e36c89419adb22ef11a283">solveWorklist</a>()</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; {</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <a class="code" href="classSVF_1_1AndersenHCD.html#ae3ac936d1ae3e46a9110b8c8ed9f279c">AndersenHCD::solveWorklist</a>();</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; }</div><div class="line"><a name="l00656"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHLCD.html#a9582cde6cbb510f3fb624109f8ea8f63"> 656</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenHLCD.html#a9582cde6cbb510f3fb624109f8ea8f63">handleCopyGep</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node)</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; {</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <a class="code" href="classSVF_1_1AndersenLCD.html#a139d80e25fe713194f719581915d36d5">AndersenLCD::handleCopyGep</a>(node);</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; }</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordtype">void</span> mergeSCC(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00661"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenHLCD.html#a59da289c87f9ab815a15e0a745bdc31f"> 661</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenHLCD.html#a59da289c87f9ab815a15e0a745bdc31f">mergeSrcToTgt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId)</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; {</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AndersenLCD.html#ac78efb1e4246c06c64dad1d368ed032d">AndersenLCD::mergeSrcToTgt</a>(nodeId, newRepId);</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; }</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160;</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;</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160;</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* ANDERSENPASS_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html">SVF::BVDataPTAImpl</a></div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00042">PointerAnalysisImpl.h:42</a></div></div>
70
70
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a8da8746b38c55561d3f6904e8fd0a9aa"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a8da8746b38c55561d3f6904e8fd0a9aa">SVF::AndersenBase::~AndersenBase</a></div><div class="ttdeci">~AndersenBase() override</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00063">Andersen.cpp:63</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
72
72
  <div class="ttc" id="classSVF_1_1AndersenBase_html_aae14de6fbca9280d8d0290326aa493f0"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#aae14de6fbca9280d8d0290326aa493f0">SVF::AndersenBase::timeOfProcessCopyGep</a></div><div class="ttdeci">static double timeOfProcessCopyGep</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00136">Andersen.h:136</a></div></div>
73
73
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ae94cea78b71fb75837ee2a17b5ed0e81"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">SVF::BVDataPTAImpl::getPTDataTy</a></div><div class="ttdeci">PTDataTy * getPTDataTy() const</div><div class="ttdoc">Get points-to data structure. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00162">PointerAnalysisImpl.h:162</a></div></div>
74
74
  <div class="ttc" id="classSVF_1_1Andersen_html_a187285a5bdf9422d9188b2b11b667639"><div class="ttname"><a href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">SVF::Andersen::getPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getPts(NodeID id)</div><div class="ttdoc">Operation of points-to set. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00216">Andersen.h:216</a></div></div>
75
75
  <div class="ttc" id="WPAStat_8h_html"><div class="ttname"><a href="WPAStat_8h.html">WPAStat.h</a></div></div>
76
- <div class="ttc" id="classSVF_1_1AndersenLCD_html_ad3f4bd35f98c43a0642b91c6b0e7acb3"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#ad3f4bd35f98c43a0642b91c6b0e7acb3">SVF::AndersenLCD::hasLCDCandidate</a></div><div class="ttdeci">bool hasLCDCandidate() const</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00505">Andersen.h:505</a></div></div>
76
+ <div class="ttc" id="classSVF_1_1AndersenLCD_html_ad3f4bd35f98c43a0642b91c6b0e7acb3"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#ad3f4bd35f98c43a0642b91c6b0e7acb3">SVF::AndersenLCD::hasLCDCandidate</a></div><div class="ttdeci">bool hasLCDCandidate() const</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00497">Andersen.h:497</a></div></div>
77
77
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a891816407a4c6346f56bc01a67b78aac"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a891816407a4c6346f56bc01a67b78aac">SVF::AndersenBase::initialize</a></div><div class="ttdeci">virtual void initialize() override</div><div class="ttdoc">Initialize analysis. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00072">Andersen.cpp:72</a></div></div>
78
- <div class="ttc" id="classSVF_1_1AndersenHCD_html_ac1de536453e92d7628b12e54cc7b2df7"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#ac1de536453e92d7628b12e54cc7b2df7">SVF::AndersenHCD::mergedNodes</a></div><div class="ttdeci">NodeSet mergedNodes</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00556">Andersen.h:556</a></div></div>
78
+ <div class="ttc" id="classSVF_1_1AndersenHCD_html_ac1de536453e92d7628b12e54cc7b2df7"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#ac1de536453e92d7628b12e54cc7b2df7">SVF::AndersenHCD::mergedNodes</a></div><div class="ttdeci">NodeSet mergedNodes</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00548">Andersen.h:548</a></div></div>
79
79
  <div class="ttc" id="classSVF_1_1Andersen_html_ad92dbecc91170b235180e59ba307acda"><div class="ttname"><a href="classSVF_1_1Andersen.html#ad92dbecc91170b235180e59ba307acda">SVF::Andersen::PTAName</a></div><div class="ttdeci">virtual const std::string PTAName() const</div><div class="ttdoc">Get PTA name. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00393">Andersen.h:393</a></div></div>
80
80
  <div class="ttc" id="classSVF_1_1Andersen_html_a106691684d8e7a69157d423393d83d66"><div class="ttname"><a href="classSVF_1_1Andersen.html#a106691684d8e7a69157d423393d83d66">SVF::Andersen::getDiffPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getDiffPts(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00276">Andersen.h:276</a></div></div>
81
81
  <div class="ttc" id="namespaceSVF_html_a212231734fa43d5c7414137deaac7df3"><div class="ttname"><a href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">SVF::NodeSet</a></div><div class="ttdeci">Set&lt; NodeID &gt; NodeSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00122">SVFBasicTypes.h:122</a></div></div>
@@ -84,41 +84,41 @@ $(function() {
84
84
  <div class="ttc" id="classSVF_1_1DiffPTData_html_a6eab8e1201083ed8705379e100cfb3b7"><div class="ttname"><a href="classSVF_1_1DiffPTData.html#a6eab8e1201083ed8705379e100cfb3b7">SVF::DiffPTData::computeDiffPts</a></div><div class="ttdeci">virtual bool computeDiffPts(Key &amp;var, const DataSet &amp;all)=0</div></div>
85
85
  <div class="ttc" id="classSVF_1_1AndersenBase_html_af37392229dab0a1f2f807a12186c3b39"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#af37392229dab0a1f2f807a12186c3b39">SVF::AndersenBase::normalizePointsTo</a></div><div class="ttdeci">virtual void normalizePointsTo() override</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00162">Andersen.cpp:162</a></div></div>
86
86
  <div class="ttc" id="classSVF_1_1OfflineConsG_html_a0a03ef009894059fa2591ea5f9ef87d9"><div class="ttname"><a href="classSVF_1_1OfflineConsG.html#a0a03ef009894059fa2591ea5f9ef87d9">SVF::OfflineConsG::hasOCGRep</a></div><div class="ttdeci">bool hasOCGRep(NodeID node) const</div><div class="ttdef"><b>Definition:</b> <a href="OfflineConsG_8h_source.html#l00065">OfflineConsG.h:65</a></div></div>
87
- <div class="ttc" id="classSVF_1_1AndersenHCD_html_af5fe01816e65ece685a3c3537ebd0137"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#af5fe01816e65ece685a3c3537ebd0137">SVF::AndersenHCD::oCG</a></div><div class="ttdeci">OfflineConsG * oCG</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00557">Andersen.h:557</a></div></div>
88
- <div class="ttc" id="classSVF_1_1AndersenHLCD_html_a0ead595bb9e36c89419adb22ef11a283"><div class="ttname"><a href="classSVF_1_1AndersenHLCD.html#a0ead595bb9e36c89419adb22ef11a283">SVF::AndersenHLCD::solveWorklist</a></div><div class="ttdeci">void solveWorklist()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00660">Andersen.h:660</a></div></div>
87
+ <div class="ttc" id="classSVF_1_1AndersenHCD_html_af5fe01816e65ece685a3c3537ebd0137"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#af5fe01816e65ece685a3c3537ebd0137">SVF::AndersenHCD::oCG</a></div><div class="ttdeci">OfflineConsG * oCG</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00549">Andersen.h:549</a></div></div>
88
+ <div class="ttc" id="classSVF_1_1AndersenHLCD_html_a0ead595bb9e36c89419adb22ef11a283"><div class="ttname"><a href="classSVF_1_1AndersenHLCD.html#a0ead595bb9e36c89419adb22ef11a283">SVF::AndersenHLCD::solveWorklist</a></div><div class="ttdeci">void solveWorklist()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00652">Andersen.h:652</a></div></div>
89
89
  <div class="ttc" id="classSVF_1_1Andersen_html_ab7dadfd4d810be4863f03ed996b3b3c4"><div class="ttname"><a href="classSVF_1_1Andersen.html#ab7dadfd4d810be4863f03ed996b3b3c4">SVF::Andersen::unionPts</a></div><div class="ttdeci">virtual bool unionPts(NodeID id, const PointsTo &amp;target)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00220">Andersen.h:220</a></div></div>
90
90
  <div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00019">MTAResultValidator.h:19</a></div></div>
91
91
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html">SVF::ConstraintGraph</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00044">ConsG.h:44</a></div></div>
92
92
  <div class="ttc" id="classSVF_1_1WPASolver_html_af1bb670efde7006e3e99b3735e4fc4cc"><div class="ttname"><a href="classSVF_1_1WPASolver.html#af1bb670efde7006e3e99b3735e4fc4cc">SVF::WPASolver::solveWorklist</a></div><div class="ttdeci">virtual void solveWorklist()</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00112">WPASolver.h:112</a></div></div>
93
93
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_ab83b827ea42d3a61aad20b1a1485d866"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ab83b827ea42d3a61aad20b1a1485d866">SVF::PointerAnalysis::dumpStat</a></div><div class="ttdeci">void dumpStat()</div><div class="ttdoc">Dump the statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00182">PointerAnalysis.cpp:182</a></div></div>
94
94
  <div class="ttc" id="namespaceSVF_html_a1811127aebdb9c926e39d155e20b3dc0"><div class="ttname"><a href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">SVF::NodeStack</a></div><div class="ttdeci">std::stack&lt; NodeID &gt; NodeStack</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00127">SVFBasicTypes.h:127</a></div></div>
95
- <div class="ttc" id="classSVF_1_1AndersenHCD_html_a6d6d770848a42c6291db663ab138461d"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#a6d6d770848a42c6291db663ab138461d">SVF::AndersenHCD::setMergedNode</a></div><div class="ttdeci">void setMergedNode(NodeID node)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00606">Andersen.h:606</a></div></div>
95
+ <div class="ttc" id="classSVF_1_1AndersenHCD_html_a6d6d770848a42c6291db663ab138461d"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#a6d6d770848a42c6291db663ab138461d">SVF::AndersenHCD::setMergedNode</a></div><div class="ttdeci">void setMergedNode(NodeID node)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00598">Andersen.h:598</a></div></div>
96
96
  <div class="ttc" id="classSVF_1_1NormalGepCGEdge_html"><div class="ttname"><a href="classSVF_1_1NormalGepCGEdge.html">SVF::NormalGepCGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00265">ConsGEdge.h:265</a></div></div>
97
97
  <div class="ttc" id="classSVF_1_1AndersenWaveDiff_html"><div class="ttname"><a href="classSVF_1_1AndersenWaveDiff.html">SVF::AndersenWaveDiff</a></div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00419">Andersen.h:419</a></div></div>
98
- <div class="ttc" id="classSVF_1_1AndersenHCD_html_ab0414e29a745ed14e790c296042d1fe9"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#ab0414e29a745ed14e790c296042d1fe9">SVF::AndersenHCD::isaMergedNode</a></div><div class="ttdeci">bool isaMergedNode(NodeID node) const</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00601">Andersen.h:601</a></div></div>
98
+ <div class="ttc" id="classSVF_1_1AndersenHCD_html_ab0414e29a745ed14e790c296042d1fe9"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#ab0414e29a745ed14e790c296042d1fe9">SVF::AndersenHCD::isaMergedNode</a></div><div class="ttdeci">bool isaMergedNode(NodeID node) const</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00593">Andersen.h:593</a></div></div>
99
99
  <div class="ttc" id="classSVF_1_1Andersen_html_a2f88b6035ecb480f7d11afe6bc666541"><div class="ttname"><a href="classSVF_1_1Andersen.html#a2f88b6035ecb480f7d11afe6bc666541">SVF::Andersen::callsite2DummyValPN</a></div><div class="ttdeci">CallSite2DummyValPN callsite2DummyValPN</div><div class="ttdoc">Map an instruction to a dummy obj which created at an indirect callsite, which invokes a heap allocat...</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00261">Andersen.h:261</a></div></div>
100
100
  <div class="ttc" id="classSVF_1_1DiffPTData_html_a0f422f826bb378ebb34199f0378e351d"><div class="ttname"><a href="classSVF_1_1DiffPTData.html#a0f422f826bb378ebb34199f0378e351d">SVF::DiffPTData::updatePropaPtsMap</a></div><div class="ttdeci">virtual void updatePropaPtsMap(Key &amp;src, Key &amp;dst)=0</div></div>
101
101
  <div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00126">BasicTypes.h:126</a></div></div>
102
102
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a69aae96fc1c99bf108075e5061f50f9e"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a69aae96fc1c99bf108075e5061f50f9e">SVF::AndersenBase::numOfProcessedLoad</a></div><div class="ttdeci">static u32_t numOfProcessedLoad</div><div class="ttdoc">Number of processed Gep edge. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00125">Andersen.h:125</a></div></div>
103
103
  <div class="ttc" id="classSVF_1_1WPASolver_html_a138b403af0370ad6fdf8cc6af0530392"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a138b403af0370ad6fdf8cc6af0530392">SVF::WPASolver::collapsePWCNode</a></div><div class="ttdeci">virtual void collapsePWCNode(NodeID)</div><div class="ttdoc">collapse positive weight cycles of a graph </div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00129">WPASolver.h:129</a></div></div>
104
- <div class="ttc" id="classSVF_1_1AndersenHCD_html_a33cb18543abbcd434861c5da7e588356"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#a33cb18543abbcd434861c5da7e588356">SVF::AndersenHCD::OSCC</a></div><div class="ttdeci">SCCDetection&lt; OfflineConsG * &gt; OSCC</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00552">Andersen.h:552</a></div></div>
104
+ <div class="ttc" id="classSVF_1_1AndersenHCD_html_a33cb18543abbcd434861c5da7e588356"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#a33cb18543abbcd434861c5da7e588356">SVF::AndersenHCD::OSCC</a></div><div class="ttdeci">SCCDetection&lt; OfflineConsG * &gt; OSCC</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00544">Andersen.h:544</a></div></div>
105
105
  <div class="ttc" id="classSVF_1_1AndersenHCD_html_aaac9cac7fc5696adb585abd9d67f8c14"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#aaac9cac7fc5696adb585abd9d67f8c14">SVF::AndersenHCD::initialize</a></div><div class="ttdeci">virtual void initialize()</div><div class="ttdef"><b>Definition:</b> <a href="AndersenHCD_8cpp_source.html#l00045">AndersenHCD.cpp:45</a></div></div>
106
106
  <div class="ttc" id="classSVF_1_1WPASolver_html_aa7c0636780a86f376e9222bce771e859"><div class="ttname"><a href="classSVF_1_1WPASolver.html#aa7c0636780a86f376e9222bce771e859">SVF::WPASolver::iterationForPrintStat</a></div><div class="ttdeci">u32_t iterationForPrintStat</div><div class="ttdoc">print out statistics for i-th iteration </div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00179">WPASolver.h:179</a></div></div>
107
- <div class="ttc" id="classSVF_1_1AndersenHCD_html_a2356a7f8215725d2ee035630b1487b05"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#a2356a7f8215725d2ee035630b1487b05">SVF::AndersenHCD::hcdAndersen</a></div><div class="ttdeci">static AndersenHCD * hcdAndersen</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00555">Andersen.h:555</a></div></div>
108
- <div class="ttc" id="classSVF_1_1AndersenHLCD_html_aa4c37c2d4119b473b29ef21d630d7f26"><div class="ttname"><a href="classSVF_1_1AndersenHLCD.html#aa4c37c2d4119b473b29ef21d630d7f26">SVF::AndersenHLCD::AndersenHLCD</a></div><div class="ttdeci">AndersenHLCD(SVFIR *_pag, PTATY type=AndersenHLCD_WPA)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00631">Andersen.h:631</a></div></div>
107
+ <div class="ttc" id="classSVF_1_1AndersenHCD_html_a2356a7f8215725d2ee035630b1487b05"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#a2356a7f8215725d2ee035630b1487b05">SVF::AndersenHCD::hcdAndersen</a></div><div class="ttdeci">static AndersenHCD * hcdAndersen</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00547">Andersen.h:547</a></div></div>
108
+ <div class="ttc" id="classSVF_1_1AndersenHLCD_html_aa4c37c2d4119b473b29ef21d630d7f26"><div class="ttname"><a href="classSVF_1_1AndersenHLCD.html#aa4c37c2d4119b473b29ef21d630d7f26">SVF::AndersenHLCD::AndersenHLCD</a></div><div class="ttdeci">AndersenHLCD(SVFIR *_pag, PTATY type=AndersenHLCD_WPA)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00623">Andersen.h:623</a></div></div>
109
109
  <div class="ttc" id="classSVF_1_1GepCGEdge_html"><div class="ttname"><a href="classSVF_1_1GepCGEdge.html">SVF::GepCGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00225">ConsGEdge.h:225</a></div></div>
110
- <div class="ttc" id="classSVF_1_1AndersenHLCD_html_ad22c1990d8faad9c7cae6d779c7de94a"><div class="ttname"><a href="classSVF_1_1AndersenHLCD.html#ad22c1990d8faad9c7cae6d779c7de94a">SVF::AndersenHLCD::hlcdAndersen</a></div><div class="ttdeci">static AndersenHLCD * hlcdAndersen</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00628">Andersen.h:628</a></div></div>
110
+ <div class="ttc" id="classSVF_1_1AndersenHLCD_html_ad22c1990d8faad9c7cae6d779c7de94a"><div class="ttname"><a href="classSVF_1_1AndersenHLCD.html#ad22c1990d8faad9c7cae6d779c7de94a">SVF::AndersenHLCD::hlcdAndersen</a></div><div class="ttdeci">static AndersenHLCD * hlcdAndersen</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00620">Andersen.h:620</a></div></div>
111
111
  <div class="ttc" id="classSVF_1_1WPASolver_html_aaa932894d00b69cfa741f9987a9cc6b8"><div class="ttname"><a href="classSVF_1_1WPASolver.html#aaa932894d00b69cfa741f9987a9cc6b8">SVF::WPASolver::SCCDetect</a></div><div class="ttdeci">virtual NodeStack &amp; SCCDetect()</div><div class="ttdoc">SCC detection. </div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00090">WPASolver.h:90</a></div></div>
112
112
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85ac7c033efd59e2b5fcded79fc3ebdb9d4"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac7c033efd59e2b5fcded79fc3ebdb9d4">SVF::PointerAnalysis::AndersenLCD_WPA</a></div><div class="ttdoc">Lazy cycle detection andersen-style WPA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00067">PointerAnalysis.h:67</a></div></div>
113
113
  <div class="ttc" id="classSVF_1_1AndersenBase_html_aaec5125db063f8c1e7431ac7fe7a70f2"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#aaec5125db063f8c1e7431ac7fe7a70f2">SVF::AndersenBase::getConstraintGraph</a></div><div class="ttdeci">ConstraintGraph * getConstraintGraph()</div><div class="ttdoc">Get constraint graph. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00102">Andersen.h:102</a></div></div>
114
114
  <div class="ttc" id="classSVF_1_1Andersen_html_a60214d7c6c9aac8e498644b048660ab9"><div class="ttname"><a href="classSVF_1_1Andersen.html#a60214d7c6c9aac8e498644b048660ab9">SVF::Andersen::classof</a></div><div class="ttdeci">static bool classof(const PointerAnalysis *pta)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00190">Andersen.h:190</a></div></div>
115
115
  <div class="ttc" id="classSVF_1_1PTData_html_a9ae6037637d8b9acb323333f491f4a7d"><div class="ttname"><a href="classSVF_1_1PTData.html#a9ae6037637d8b9acb323333f491f4a7d">SVF::PTData::getPts</a></div><div class="ttdeci">virtual const DataSet &amp; getPts(const Key &amp;var)=0</div><div class="ttdoc">Get points-to set of var. </div></div>
116
116
  <div class="ttc" id="classSVF_1_1WPASolver_html_a79c2b3f10f3f813396d8caaa1f7bc62a"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a79c2b3f10f3f813396d8caaa1f7bc62a">SVF::WPASolver::collapseFields</a></div><div class="ttdeci">virtual void collapseFields()</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00130">WPASolver.h:130</a></div></div>
117
- <div class="ttc" id="classSVF_1_1AndersenHLCD_html_a5926080868429040f5142843f01a2a5c"><div class="ttname"><a href="classSVF_1_1AndersenHLCD.html#a5926080868429040f5142843f01a2a5c">SVF::AndersenHLCD::initialize</a></div><div class="ttdeci">void initialize()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00656">Andersen.h:656</a></div></div>
117
+ <div class="ttc" id="classSVF_1_1AndersenHLCD_html_a5926080868429040f5142843f01a2a5c"><div class="ttname"><a href="classSVF_1_1AndersenHLCD.html#a5926080868429040f5142843f01a2a5c">SVF::AndersenHLCD::initialize</a></div><div class="ttdeci">void initialize()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00648">Andersen.h:648</a></div></div>
118
118
  <div class="ttc" id="cJSON_8cpp_html_a65e9886d74aaee76545e83dd09011727"><div class="ttname"><a href="cJSON_8cpp.html#a65e9886d74aaee76545e83dd09011727">false</a></div><div class="ttdeci">#define false</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l00070">cJSON.cpp:70</a></div></div>
119
- <div class="ttc" id="classSVF_1_1AndersenHCD_html_ad2cb6f353fef40a99ae9fba112663b84"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#ad2cb6f353fef40a99ae9fba112663b84">SVF::AndersenHCD::releaseAndersenHCD</a></div><div class="ttdeci">static void releaseAndersenHCD()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00577">Andersen.h:577</a></div></div>
120
- <div class="ttc" id="classSVF_1_1AndersenLCD_html_ae4e979d6e7fa83c8961d0caf0ca0f54e"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#ae4e979d6e7fa83c8961d0caf0ca0f54e">SVF::AndersenLCD::lcdAndersen</a></div><div class="ttdeci">static AndersenLCD * lcdAndersen</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00473">Andersen.h:473</a></div></div>
121
- <div class="ttc" id="classSVF_1_1AndersenHLCD_html_a59da289c87f9ab815a15e0a745bdc31f"><div class="ttname"><a href="classSVF_1_1AndersenHLCD.html#a59da289c87f9ab815a15e0a745bdc31f">SVF::AndersenHLCD::mergeSrcToTgt</a></div><div class="ttdeci">bool mergeSrcToTgt(NodeID nodeId, NodeID newRepId)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00669">Andersen.h:669</a></div></div>
119
+ <div class="ttc" id="classSVF_1_1AndersenHCD_html_ad2cb6f353fef40a99ae9fba112663b84"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#ad2cb6f353fef40a99ae9fba112663b84">SVF::AndersenHCD::releaseAndersenHCD</a></div><div class="ttdeci">static void releaseAndersenHCD()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00569">Andersen.h:569</a></div></div>
120
+ <div class="ttc" id="classSVF_1_1AndersenLCD_html_ae4e979d6e7fa83c8961d0caf0ca0f54e"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#ae4e979d6e7fa83c8961d0caf0ca0f54e">SVF::AndersenLCD::lcdAndersen</a></div><div class="ttdeci">static AndersenLCD * lcdAndersen</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00465">Andersen.h:465</a></div></div>
121
+ <div class="ttc" id="classSVF_1_1AndersenHLCD_html_a59da289c87f9ab815a15e0a745bdc31f"><div class="ttname"><a href="classSVF_1_1AndersenHLCD.html#a59da289c87f9ab815a15e0a745bdc31f">SVF::AndersenHLCD::mergeSrcToTgt</a></div><div class="ttdeci">bool mergeSrcToTgt(NodeID nodeId, NodeID newRepId)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00661">Andersen.h:661</a></div></div>
122
122
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_aed605b010e313f4b11e95b83fe50e3b3"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#aed605b010e313f4b11e95b83fe50e3b3">SVF::ConstraintGraph::sccSubNodes</a></div><div class="ttdeci">NodeBS &amp; sccSubNodes(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00241">ConsG.h:241</a></div></div>
123
123
  <div class="ttc" id="classSVF_1_1SVFModule_html"><div class="ttname"><a href="classSVF_1_1SVFModule.html">SVF::SVFModule</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00041">SVFModule.h:41</a></div></div>
124
124
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_a6e59b815d784bc1a9437290ff0e1e28ca7f8c92a2f50277fee80899235ae477f9"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a6e59b815d784bc1a9437290ff0e1e28ca7f8c92a2f50277fee80899235ae477f9">SVF::ConstraintNode::Direct</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00050">ConsGNode.h:50</a></div></div>
@@ -130,14 +130,14 @@ $(function() {
130
130
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a944966086ecb716184c8cdcc43db5751"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">SVF::AndersenBase::analyze</a></div><div class="ttdeci">virtual void analyze() override</div><div class="ttdoc">Andersen analysis. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00102">Andersen.cpp:102</a></div></div>
131
131
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_ac23f71c1307cda9cba44acc40059f0a3"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">SVF::PointerAnalysis::getAnalysisTy</a></div><div class="ttdeci">PTATY getAnalysisTy() const</div><div class="ttdoc">Type of pointer analysis. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00192">PointerAnalysis.h:192</a></div></div>
132
132
  <div class="ttc" id="SVFIR_8h_html"><div class="ttname"><a href="SVFIR_8h.html">SVFIR.h</a></div></div>
133
- <div class="ttc" id="classSVF_1_1AndersenHCD_html_aa3553e6d7c7245d3d2cdc9d083889c28"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#aa3553e6d7c7245d3d2cdc9d083889c28">SVF::AndersenHCD::createAndersenHCD</a></div><div class="ttdeci">static AndersenHCD * createAndersenHCD(SVFIR *_pag)</div><div class="ttdoc">Create an singleton instance directly instead of invoking llvm pass manager. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00566">Andersen.h:566</a></div></div>
133
+ <div class="ttc" id="classSVF_1_1AndersenHCD_html_aa3553e6d7c7245d3d2cdc9d083889c28"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#aa3553e6d7c7245d3d2cdc9d083889c28">SVF::AndersenHCD::createAndersenHCD</a></div><div class="ttdeci">static AndersenHCD * createAndersenHCD(SVFIR *_pag)</div><div class="ttdoc">Create an singleton instance directly instead of invoking llvm pass manager. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00558">Andersen.h:558</a></div></div>
134
134
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a4acad18a6eb585ba9e3d2276dd591067"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a4acad18a6eb585ba9e3d2276dd591067">SVF::AndersenBase::numOfProcessedAddr</a></div><div class="ttdeci">static u32_t numOfProcessedAddr</div><div class="ttdoc">Statistics. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00122">Andersen.h:122</a></div></div>
135
135
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a6c3d6b4c004d9e43690c3807502eed74"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a6c3d6b4c004d9e43690c3807502eed74">SVF::AndersenBase::redundantGepNodes</a></div><div class="ttdeci">NodeBS redundantGepNodes</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00118">Andersen.h:118</a></div></div>
136
136
  <div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
137
137
  <div class="ttc" id="classSVF_1_1Andersen_html_a308ef1f3a1c9fd7ac1858d0c690aa37a"><div class="ttname"><a href="classSVF_1_1Andersen.html#a308ef1f3a1c9fd7ac1858d0c690aa37a">SVF::Andersen::sanitizePts</a></div><div class="ttdeci">void sanitizePts()</div><div class="ttdoc">Sanitize pts for field insensitive objects. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00371">Andersen.h:371</a></div></div>
138
138
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a25b00d9ca71cbdd27530fc5d0dc84ee5"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a25b00d9ca71cbdd27530fc5d0dc84ee5">SVF::AndersenBase::numOfSfrs</a></div><div class="ttdeci">static u32_t numOfSfrs</div><div class="ttdoc">Number of processed Store edge. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00127">Andersen.h:127</a></div></div>
139
- <div class="ttc" id="classSVF_1_1AndersenLCD_html_aa59a98c152562ff4038bb4ac3b7a72d1"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#aa59a98c152562ff4038bb4ac3b7a72d1">SVF::AndersenLCD::createAndersenLCD</a></div><div class="ttdeci">static AndersenLCD * createAndersenLCD(SVFIR *_pag)</div><div class="ttdoc">Create an singleton instance directly instead of invoking llvm pass manager. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00484">Andersen.h:484</a></div></div>
140
- <div class="ttc" id="classSVF_1_1AndersenHCD_html_abeafc9d45d529577b99fe821e59fd9cb"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#abeafc9d45d529577b99fe821e59fd9cb">SVF::AndersenHCD::hasOfflineRep</a></div><div class="ttdeci">bool hasOfflineRep(NodeID nodeId) const</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00589">Andersen.h:589</a></div></div>
139
+ <div class="ttc" id="classSVF_1_1AndersenLCD_html_aa59a98c152562ff4038bb4ac3b7a72d1"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#aa59a98c152562ff4038bb4ac3b7a72d1">SVF::AndersenLCD::createAndersenLCD</a></div><div class="ttdeci">static AndersenLCD * createAndersenLCD(SVFIR *_pag)</div><div class="ttdoc">Create an singleton instance directly instead of invoking llvm pass manager. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00476">Andersen.h:476</a></div></div>
140
+ <div class="ttc" id="classSVF_1_1AndersenHCD_html_abeafc9d45d529577b99fe821e59fd9cb"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#abeafc9d45d529577b99fe821e59fd9cb">SVF::AndersenHCD::hasOfflineRep</a></div><div class="ttdeci">bool hasOfflineRep(NodeID nodeId) const</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00581">Andersen.h:581</a></div></div>
141
141
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a2b763519509ce21cf40893c01f8357b6"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a2b763519509ce21cf40893c01f8357b6">SVF::AndersenBase::numOfProcessedStore</a></div><div class="ttdeci">static u32_t numOfProcessedStore</div><div class="ttdoc">Number of processed Load edge. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00126">Andersen.h:126</a></div></div>
142
142
  <div class="ttc" id="classSVF_1_1AndersenBase_html_ac05796a5672ddb5bd0e08924d79da065"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#ac05796a5672ddb5bd0e08924d79da065">SVF::AndersenBase::updateCallGraph</a></div><div class="ttdeci">virtual bool updateCallGraph(const CallSiteToFunPtrMap &amp;) override</div><div class="ttdoc">Implement it in child class to update call graph. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00074">Andersen.h:74</a></div></div>
143
143
  <div class="ttc" id="classSVF_1_1Andersen_html_a95c0b2f501dff61993cd43a5cab89e17"><div class="ttname"><a href="classSVF_1_1Andersen.html#a95c0b2f501dff61993cd43a5cab89e17">SVF::Andersen::resetData</a></div><div class="ttdeci">void resetData()</div><div class="ttdoc">Reset data. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00176">Andersen.h:176</a></div></div>
@@ -146,7 +146,7 @@ $(function() {
146
146
  <div class="ttc" id="classSVF_1_1SCCDetection_html"><div class="ttname"><a href="classSVF_1_1SCCDetection.html">SVF::SCCDetection</a></div><div class="ttdef"><b>Definition:</b> <a href="SCC_8h_source.html#l00054">SCC.h:54</a></div></div>
147
147
  <div class="ttc" id="classSVF_1_1Andersen_html_a8da98a9d33a6e9be329309f4af65e969"><div class="ttname"><a href="classSVF_1_1Andersen.html#a8da98a9d33a6e9be329309f4af65e969">SVF::Andersen::unionPts</a></div><div class="ttdeci">virtual bool unionPts(NodeID id, NodeID ptd)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00225">Andersen.h:225</a></div></div>
148
148
  <div class="ttc" id="classSVF_1_1Andersen_html_a9075cd05cb21e0f08a1109b7af6c7480"><div class="ttname"><a href="classSVF_1_1Andersen.html#a9075cd05cb21e0f08a1109b7af6c7480">SVF::Andersen::initWorklist</a></div><div class="ttdeci">virtual void initWorklist()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00303">Andersen.h:303</a></div></div>
149
- <div class="ttc" id="classSVF_1_1AndersenLCD_html_a63823aa384f1438917c3625befa30bad"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#a63823aa384f1438917c3625befa30bad">SVF::AndersenLCD::lcdCandidates</a></div><div class="ttdeci">NodeSet lcdCandidates</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00475">Andersen.h:475</a></div></div>
149
+ <div class="ttc" id="classSVF_1_1AndersenLCD_html_a63823aa384f1438917c3625befa30bad"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#a63823aa384f1438917c3625befa30bad">SVF::AndersenLCD::lcdCandidates</a></div><div class="ttdeci">NodeSet lcdCandidates</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00467">Andersen.h:467</a></div></div>
150
150
  <div class="ttc" id="OfflineConsG_8h_html"><div class="ttname"><a href="OfflineConsG_8h.html">OfflineConsG.h</a></div></div>
151
151
  <div class="ttc" id="classSVF_1_1Andersen_html_aaec53980b25ed769fa9a985860f810b5"><div class="ttname"><a href="classSVF_1_1Andersen.html#aaec53980b25ed769fa9a985860f810b5">SVF::Andersen::classof</a></div><div class="ttdeci">static bool classof(const Andersen *)</div><div class="ttdoc">Methods for support type inquiry through isa, cast, and dyn_cast: </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00186">Andersen.h:186</a></div></div>
152
152
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a4bef15157423cef48dc7333a803cd27d"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">SVF::GenericGraph::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00369">GenericGraph.h:369</a></div></div>
@@ -158,9 +158,9 @@ $(function() {
158
158
  <div class="ttc" id="classSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph&lt; ConstraintNode, ConstraintEdge &gt;::iterator</a></div><div class="ttdeci">IDToNodeMapTy::iterator iterator</div><div class="ttdoc">Node Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00342">GenericGraph.h:342</a></div></div>
159
159
  <div class="ttc" id="classSVF_1_1Andersen_html_a15218a84e653baf2cd7f1dc95ccfb77d"><div class="ttname"><a href="classSVF_1_1Andersen.html#a15218a84e653baf2cd7f1dc95ccfb77d">SVF::Andersen::~Andersen</a></div><div class="ttdeci">virtual ~Andersen()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00164">Andersen.h:164</a></div></div>
160
160
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_af68485a2208553579f9c2e4b2cb20cff"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">SVF::BVDataPTAImpl::addPts</a></div><div class="ttdeci">virtual bool addPts(NodeID id, NodeID ptd)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00132">PointerAnalysisImpl.h:132</a></div></div>
161
- <div class="ttc" id="classSVF_1_1AndersenHCD_html"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html">SVF::AndersenHCD</a></div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00548">Andersen.h:548</a></div></div>
161
+ <div class="ttc" id="classSVF_1_1AndersenHCD_html"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html">SVF::AndersenHCD</a></div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00540">Andersen.h:540</a></div></div>
162
162
  <div class="ttc" id="classSVF_1_1Andersen_html_a187a23c3b522f2aca49d3c5408ab4469"><div class="ttname"><a href="classSVF_1_1Andersen.html#a187a23c3b522f2aca49d3c5408ab4469">SVF::Andersen::diffOpt</a></div><div class="ttdeci">bool diffOpt</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00265">Andersen.h:265</a></div></div>
163
- <div class="ttc" id="classSVF_1_1AndersenLCD_html"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html">SVF::AndersenLCD</a></div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00469">Andersen.h:469</a></div></div>
163
+ <div class="ttc" id="classSVF_1_1AndersenLCD_html"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html">SVF::AndersenLCD</a></div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00461">Andersen.h:461</a></div></div>
164
164
  <div class="ttc" id="classSVF_1_1Andersen_html_a4baa6fc95d52afa370fc0fabffd42018"><div class="ttname"><a href="classSVF_1_1Andersen.html#a4baa6fc95d52afa370fc0fabffd42018">SVF::Andersen::updatePropaPts</a></div><div class="ttdeci">void updatePropaPts(NodeID dstId, NodeID srcId)</div><div class="ttdoc">Handle propagated points-to set. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00286">Andersen.h:286</a></div></div>
165
165
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_aee289e298e421448caaa604b7eb34fcb"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">SVF::BVDataPTAImpl::getPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getPts(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00099">PointerAnalysisImpl.h:99</a></div></div>
166
166
  <div class="ttc" id="classSVF_1_1PTData_html_af7aa22f11558c12ff16612174e2221dd"><div class="ttname"><a href="classSVF_1_1PTData.html#af7aa22f11558c12ff16612174e2221dd">SVF::PTData::unionPts</a></div><div class="ttdeci">virtual bool unionPts(const Key &amp;dstVar, const Key &amp;srcVar)=0</div><div class="ttdoc">Performs pts(dstVar) = pts(dstVar) U pts(srcVar). </div></div>
@@ -174,25 +174,25 @@ $(function() {
174
174
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a9f453ec1b4236b8194ae590981217259"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a9f453ec1b4236b8194ae590981217259">SVF::AndersenBase::numOfFieldExpand</a></div><div class="ttdeci">static u32_t numOfFieldExpand</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00128">Andersen.h:128</a></div></div>
175
175
  <div class="ttc" id="classSVF_1_1Andersen_html_a2b13f14db90ad59a61dff097bcdf8fb7"><div class="ttname"><a href="classSVF_1_1Andersen.html#a2b13f14db90ad59a61dff097bcdf8fb7">SVF::Andersen::setPWCOpt</a></div><div class="ttdeci">void setPWCOpt(bool flag)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00235">Andersen.h:235</a></div></div>
176
176
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a6b7d0e57f741c446d0bf178939960143"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a6b7d0e57f741c446d0bf178939960143">SVF::AndersenBase::timeOfSCCDetection</a></div><div class="ttdeci">static double timeOfSCCDetection</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00131">Andersen.h:131</a></div></div>
177
- <div class="ttc" id="classSVF_1_1AndersenHLCD_html_a23f7e4f0b51bd6474644f566998d367f"><div class="ttname"><a href="classSVF_1_1AndersenHLCD.html#a23f7e4f0b51bd6474644f566998d367f">SVF::AndersenHLCD::releaseAndersenHLCD</a></div><div class="ttdeci">static void releaseAndersenHLCD()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00648">Andersen.h:648</a></div></div>
177
+ <div class="ttc" id="classSVF_1_1AndersenHLCD_html_a23f7e4f0b51bd6474644f566998d367f"><div class="ttname"><a href="classSVF_1_1AndersenHLCD.html#a23f7e4f0b51bd6474644f566998d367f">SVF::AndersenHLCD::releaseAndersenHLCD</a></div><div class="ttdeci">static void releaseAndersenHLCD()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00640">Andersen.h:640</a></div></div>
178
178
  <div class="ttc" id="namespaceSVF_html_a0d2e17d5b07a50ed95e8f407cd6dd0be"><div class="ttname"><a href="namespaceSVF.html#a0d2e17d5b07a50ed95e8f407cd6dd0be">SVF::EdgeSet</a></div><div class="ttdeci">NodeSet EdgeSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00130">SVFBasicTypes.h:130</a></div></div>
179
179
  <div class="ttc" id="classSVF_1_1AndersenLCD_html_ac78efb1e4246c06c64dad1d368ed032d"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#ac78efb1e4246c06c64dad1d368ed032d">SVF::AndersenLCD::mergeSrcToTgt</a></div><div class="ttdeci">bool mergeSrcToTgt(NodeID nodeId, NodeID newRepId)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenLCD_8cpp_source.html#l00131">AndersenLCD.cpp:131</a></div></div>
180
180
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_a60bb27100e8c264be2add004069d1758"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a60bb27100e8c264be2add004069d1758">SVF::ConstraintGraph::addCopyCGEdge</a></div><div class="ttdeci">CopyCGEdge * addCopyCGEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add Copy edge. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8cpp_source.html#l00186">ConsG.cpp:186</a></div></div>
181
181
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85a99d50c1712075e4c3278fc4fa4c9cd2f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a99d50c1712075e4c3278fc4fa4c9cd2f">SVF::PointerAnalysis::AndersenHLCD_WPA</a></div><div class="ttdoc">Hybird lazy cycle detection andersen-style WPA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00069">PointerAnalysis.h:69</a></div></div>
182
- <div class="ttc" id="classSVF_1_1AndersenLCD_html_ab58bd928fbfcc56344dcaf82a9c360a2"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#ab58bd928fbfcc56344dcaf82a9c360a2">SVF::AndersenLCD::cleanLCDCandidate</a></div><div class="ttdeci">void cleanLCDCandidate()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00509">Andersen.h:509</a></div></div>
182
+ <div class="ttc" id="classSVF_1_1AndersenLCD_html_ab58bd928fbfcc56344dcaf82a9c360a2"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#ab58bd928fbfcc56344dcaf82a9c360a2">SVF::AndersenLCD::cleanLCDCandidate</a></div><div class="ttdeci">void cleanLCDCandidate()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00501">Andersen.h:501</a></div></div>
183
183
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a2afb49f513c9534fd051117b59dc056b"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a2afb49f513c9534fd051117b59dc056b">SVF::AndersenBase::timeOfUpdateCallGraph</a></div><div class="ttdeci">static double timeOfUpdateCallGraph</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00138">Andersen.h:138</a></div></div>
184
184
  <div class="ttc" id="classSVF_1_1OfflineConsG_html_a3f390900ee8761055c6d59107bc0ad27"><div class="ttname"><a href="classSVF_1_1OfflineConsG.html#a3f390900ee8761055c6d59107bc0ad27">SVF::OfflineConsG::getOCGRep</a></div><div class="ttdeci">NodeID getOCGRep(NodeID node) const</div><div class="ttdef"><b>Definition:</b> <a href="OfflineConsG_8h_source.html#l00070">OfflineConsG.h:70</a></div></div>
185
- <div class="ttc" id="classSVF_1_1AndersenHLCD_html"><div class="ttname"><a href="classSVF_1_1AndersenHLCD.html">SVF::AndersenHLCD</a></div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00624">Andersen.h:624</a></div></div>
185
+ <div class="ttc" id="classSVF_1_1AndersenHLCD_html"><div class="ttname"><a href="classSVF_1_1AndersenHLCD.html">SVF::AndersenHLCD</a></div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00616">Andersen.h:616</a></div></div>
186
186
  <div class="ttc" id="classSVF_1_1AndersenBase_html_afa4d710b093a6c7a33cb1aef823781f0"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#afa4d710b093a6c7a33cb1aef823781f0">SVF::AndersenBase::classof</a></div><div class="ttdeci">static bool classof(const AndersenBase *)</div><div class="ttdoc">Methods for support type inquiry through isa, cast, and dyn_cast: </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00081">Andersen.h:81</a></div></div>
187
187
  <div class="ttc" id="classSVF_1_1WPASolver_html_a3bd463cd456a1d58242f118328f51ddb"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a3bd463cd456a1d58242f118328f51ddb">SVF::WPASolver::sccRepNode</a></div><div class="ttdeci">virtual NodeID sccRepNode(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00150">WPASolver.h:150</a></div></div>
188
188
  <div class="ttc" id="classSVF_1_1DiffPTData_html_a7c4159d873a836b6f6d9b2d2c044921d"><div class="ttname"><a href="classSVF_1_1DiffPTData.html#a7c4159d873a836b6f6d9b2d2c044921d">SVF::DiffPTData::getDiffPts</a></div><div class="ttdeci">virtual const DataSet &amp; getDiffPts(Key &amp;var)=0</div><div class="ttdoc">Get diff points to. </div></div>
189
189
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a28a1c3571cdee5e05004b29ace364e67"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a28a1c3571cdee5e05004b29ace364e67">SVF::AndersenBase::finalize</a></div><div class="ttdeci">virtual void finalize() override</div><div class="ttdoc">Finalize analysis. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00088">Andersen.cpp:88</a></div></div>
190
190
  <div class="ttc" id="classSVF_1_1ConstraintEdge_html_ab201b7df925c12e6944516f4b87d7823"><div class="ttname"><a href="classSVF_1_1ConstraintEdge.html#ab201b7df925c12e6944516f4b87d7823">SVF::ConstraintEdge::getEdgeID</a></div><div class="ttdeci">EdgeID getEdgeID() const</div><div class="ttdoc">Return edge ID. </div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00070">ConsGEdge.h:70</a></div></div>
191
191
  <div class="ttc" id="classSVF_1_1AndersenBase_html_af89bc974fda6bed754bb07b3b6ee8ffe"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#af89bc974fda6bed754bb07b3b6ee8ffe">SVF::AndersenBase::AndersenBase</a></div><div class="ttdeci">AndersenBase(SVFIR *_pag, PTATY type=Andersen_BASE, bool alias_check=true)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00055">Andersen.h:55</a></div></div>
192
- <div class="ttc" id="classSVF_1_1AndersenLCD_html_aa830cfc0e46114751337e8ea3586d0bb"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#aa830cfc0e46114751337e8ea3586d0bb">SVF::AndersenLCD::addLCDCandidate</a></div><div class="ttdeci">void addLCDCandidate(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00513">Andersen.h:513</a></div></div>
193
- <div class="ttc" id="classSVF_1_1AndersenLCD_html_a501ff7f8648c735c4a896063128d9ccc"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#a501ff7f8648c735c4a896063128d9ccc">SVF::AndersenLCD::metEdges</a></div><div class="ttdeci">EdgeSet metEdges</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00474">Andersen.h:474</a></div></div>
192
+ <div class="ttc" id="classSVF_1_1AndersenLCD_html_aa830cfc0e46114751337e8ea3586d0bb"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#aa830cfc0e46114751337e8ea3586d0bb">SVF::AndersenLCD::addLCDCandidate</a></div><div class="ttdeci">void addLCDCandidate(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00505">Andersen.h:505</a></div></div>
193
+ <div class="ttc" id="classSVF_1_1AndersenLCD_html_a501ff7f8648c735c4a896063128d9ccc"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#a501ff7f8648c735c4a896063128d9ccc">SVF::AndersenLCD::metEdges</a></div><div class="ttdeci">EdgeSet metEdges</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00466">Andersen.h:466</a></div></div>
194
194
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_a39b973543acdcdc5493832cc9d0f586f"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">SVF::ConstraintGraph::sccRepNode</a></div><div class="ttdeci">NodeID sccRepNode(NodeID id) const</div><div class="ttdoc">SCC rep/sub nodes methods. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00233">ConsG.h:233</a></div></div>
195
- <div class="ttc" id="classSVF_1_1AndersenLCD_html_a4f374bbd066f9e8b1480184a1416b68b"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#a4f374bbd066f9e8b1480184a1416b68b">SVF::AndersenLCD::isMetEdge</a></div><div class="ttdeci">bool isMetEdge(ConstraintEdge *edge) const</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00521">Andersen.h:521</a></div></div>
195
+ <div class="ttc" id="classSVF_1_1AndersenLCD_html_a4f374bbd066f9e8b1480184a1416b68b"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#a4f374bbd066f9e8b1480184a1416b68b">SVF::AndersenLCD::isMetEdge</a></div><div class="ttdeci">bool isMetEdge(ConstraintEdge *edge) const</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00513">Andersen.h:513</a></div></div>
196
196
  <div class="ttc" id="classSVF_1_1ConstraintNode_html"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html">SVF::ConstraintNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00040">ConsGNode.h:40</a></div></div>
197
197
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">SVF::PointerAnalysis::AndersenWaveDiff_WPA</a></div><div class="ttdoc">Diff wave propagation andersen-style WPA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00072">PointerAnalysis.h:72</a></div></div>
198
198
  <div class="ttc" id="classSVF_1_1AndersenHCD_html_ae3ac936d1ae3e46a9110b8c8ed9f279c"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#ae3ac936d1ae3e46a9110b8c8ed9f279c">SVF::AndersenHCD::solveWorklist</a></div><div class="ttdeci">virtual void solveWorklist()</div><div class="ttdef"><b>Definition:</b> <a href="AndersenHCD_8cpp_source.html#l00059">AndersenHCD.cpp:59</a></div></div>
@@ -200,9 +200,9 @@ $(function() {
200
200
  <div class="ttc" id="classSVF_1_1Andersen_html_a6804284abb4b63f44eefdaf044a301f7"><div class="ttname"><a href="classSVF_1_1Andersen.html#a6804284abb4b63f44eefdaf044a301f7">SVF::Andersen::enableDiff</a></div><div class="ttdeci">bool enableDiff() const</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00254">Andersen.h:254</a></div></div>
201
201
  <div class="ttc" id="classSVF_1_1Andersen_html_a680dc709c0263fc1a13aa5c81d95fc72"><div class="ttname"><a href="classSVF_1_1Andersen.html#a680dc709c0263fc1a13aa5c81d95fc72">SVF::Andersen::Andersen</a></div><div class="ttdeci">Andersen(SVFIR *_pag, PTATY type=Andersen_WPA, bool alias_check=true)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00158">Andersen.h:158</a></div></div>
202
202
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_a6e59b815d784bc1a9437290ff0e1e28c"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a6e59b815d784bc1a9437290ff0e1e28c">SVF::ConstraintNode::SCCEdgeFlag</a></div><div class="ttdeci">SCCEdgeFlag</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00048">ConsGNode.h:48</a></div></div>
203
- <div class="ttc" id="classSVF_1_1AndersenLCD_html_aab4737557838799f52b64ceb2ec543a3"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#aab4737557838799f52b64ceb2ec543a3">SVF::AndersenLCD::AndersenLCD</a></div><div class="ttdeci">AndersenLCD(SVFIR *_pag, PTATY type=AndersenLCD_WPA)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00478">Andersen.h:478</a></div></div>
203
+ <div class="ttc" id="classSVF_1_1AndersenLCD_html_aab4737557838799f52b64ceb2ec543a3"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#aab4737557838799f52b64ceb2ec543a3">SVF::AndersenLCD::AndersenLCD</a></div><div class="ttdeci">AndersenLCD(SVFIR *_pag, PTATY type=AndersenLCD_WPA)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00470">Andersen.h:470</a></div></div>
204
204
  <div class="ttc" id="WPASolver_8h_html"><div class="ttname"><a href="WPASolver_8h.html">WPASolver.h</a></div></div>
205
- <div class="ttc" id="classSVF_1_1AndersenHLCD_html_a9582cde6cbb510f3fb624109f8ea8f63"><div class="ttname"><a href="classSVF_1_1AndersenHLCD.html#a9582cde6cbb510f3fb624109f8ea8f63">SVF::AndersenHLCD::handleCopyGep</a></div><div class="ttdeci">void handleCopyGep(ConstraintNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00664">Andersen.h:664</a></div></div>
205
+ <div class="ttc" id="classSVF_1_1AndersenHLCD_html_a9582cde6cbb510f3fb624109f8ea8f63"><div class="ttname"><a href="classSVF_1_1AndersenHLCD.html#a9582cde6cbb510f3fb624109f8ea8f63">SVF::AndersenHLCD::handleCopyGep</a></div><div class="ttdeci">void handleCopyGep(ConstraintNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00656">Andersen.h:656</a></div></div>
206
206
  <div class="ttc" id="classSVF_1_1AndersenWaveDiff_html_a48ff6fc4badc79ad3204ae9bd95cc540"><div class="ttname"><a href="classSVF_1_1AndersenWaveDiff.html#a48ff6fc4badc79ad3204ae9bd95cc540">SVF::AndersenWaveDiff::createAndersenWaveDiff</a></div><div class="ttdeci">static AndersenWaveDiff * createAndersenWaveDiff(SVFIR *_pag)</div><div class="ttdoc">Create an singleton instance directly instead of invoking llvm pass manager. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00430">Andersen.h:430</a></div></div>
207
207
  <div class="ttc" id="classSVF_1_1AndersenWaveDiff_html_a7478d23055a5db981d7a9515cffc99da"><div class="ttname"><a href="classSVF_1_1AndersenWaveDiff.html#a7478d23055a5db981d7a9515cffc99da">SVF::AndersenWaveDiff::AndersenWaveDiff</a></div><div class="ttdeci">AndersenWaveDiff(SVFIR *_pag, PTATY type=AndersenWaveDiff_WPA, bool alias_check=true)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00427">Andersen.h:427</a></div></div>
208
208
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85ab68615784a520e39856be5237930e6a6"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab68615784a520e39856be5237930e6a6">SVF::PointerAnalysis::Andersen_WPA</a></div><div class="ttdoc">Andersen PTA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00066">PointerAnalysis.h:66</a></div></div>
@@ -211,7 +211,6 @@ $(function() {
211
211
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab9c0bb439f98ae11dd178148109697ab"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab9c0bb439f98ae11dd178148109697ab">SVF::BVDataPTAImpl::getDiffPTDataTy</a></div><div class="ttdeci">DiffPTDataTy * getDiffPTDataTy() const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00178">PointerAnalysisImpl.h:178</a></div></div>
212
212
  <div class="ttc" id="classSVF_1_1SparseBitVector_html"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html">SVF::SparseBitVector</a></div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00460">SparseBitVector.h:460</a></div></div>
213
213
  <div class="ttc" id="classSVF_1_1AndersenBase_html_abd73e930450b7c605f478672bdf9bdae"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#abd73e930450b7c605f478672bdf9bdae">SVF::AndersenBase::MaxPointsToSetSize</a></div><div class="ttdeci">static u32_t MaxPointsToSetSize</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00135">Andersen.h:135</a></div></div>
214
- <div class="ttc" id="classSVF_1_1AndersenWaveDiff_html_a57c7c12ebcf06f2912e93c802c6cdd02"><div class="ttname"><a href="classSVF_1_1AndersenWaveDiff.html#a57c7c12ebcf06f2912e93c802c6cdd02">SVF::AndersenWaveDiff::processCast</a></div><div class="ttdeci">virtual void processCast(const ConstraintEdge *)</div><div class="ttdoc">process &quot;bitcast&quot; CopyCGEdge </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00459">Andersen.h:459</a></div></div>
215
214
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85ac581e279a4bd69c059b0e5987f839a1f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac581e279a4bd69c059b0e5987f839a1f">SVF::PointerAnalysis::AndersenWaveDiffWithType_WPA</a></div><div class="ttdoc">Diff wave propagation with type info andersen-style WPA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00073">PointerAnalysis.h:73</a></div></div>
216
215
  <div class="ttc" id="classSVF_1_1Andersen_html_a8ba593bd16d4436310f2f25e75687c57"><div class="ttname"><a href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57">SVF::Andersen::addCopyEdge</a></div><div class="ttdeci">virtual bool addCopyEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add copy edge on constraint graph. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00328">Andersen.h:328</a></div></div>
217
216
  <div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8h_source.html#l00035">CFGNormalizer.h:35</a></div></div>
@@ -228,10 +227,10 @@ $(function() {
228
227
  <div class="ttc" id="classSVF_1_1Andersen_html_ab90350dc4788d8e282404bd7944dd263"><div class="ttname"><a href="classSVF_1_1Andersen.html#ab90350dc4788d8e282404bd7944dd263">SVF::Andersen::pwcOpt</a></div><div class="ttdeci">bool pwcOpt</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00264">Andersen.h:264</a></div></div>
229
228
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_afd200919cf8742bb62bb0bde279a558a"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#afd200919cf8742bb62bb0bde279a558a">SVF::ConstraintGraph::getAllFieldsObjVars</a></div><div class="ttdeci">NodeBS &amp; getAllFieldsObjVars(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00314">ConsG.h:314</a></div></div>
230
229
  <div class="ttc" id="classSVF_1_1Andersen_html_a0f65f1881111167bffe1cb2ad05c0a51"><div class="ttname"><a href="classSVF_1_1Andersen.html#a0f65f1881111167bffe1cb2ad05c0a51">SVF::Andersen::CallSite2DummyValPN</a></div><div class="ttdeci">OrderedMap&lt; CallSite, NodeID &gt; CallSite2DummyValPN</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00155">Andersen.h:155</a></div></div>
231
- <div class="ttc" id="classSVF_1_1AndersenHCD_html_ac2e6a5acffff567e729b6aa9e9beeb55"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#ac2e6a5acffff567e729b6aa9e9beeb55">SVF::AndersenHCD::getOfflineRep</a></div><div class="ttdeci">NodeID getOfflineRep(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00593">Andersen.h:593</a></div></div>
230
+ <div class="ttc" id="classSVF_1_1AndersenHCD_html_ac2e6a5acffff567e729b6aa9e9beeb55"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#ac2e6a5acffff567e729b6aa9e9beeb55">SVF::AndersenHCD::getOfflineRep</a></div><div class="ttdeci">NodeID getOfflineRep(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00585">Andersen.h:585</a></div></div>
232
231
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">SVF::PointerAnalysis::PTATY</a></div><div class="ttdeci">PTATY</div><div class="ttdoc">Pointer analysis type list. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00062">PointerAnalysis.h:62</a></div></div>
233
232
  <div class="ttc" id="classSVF_1_1AndersenBase_html_ae21e38a06a4397d11cdd17b0f8f282fd"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">SVF::AndersenBase::consCG</a></div><div class="ttdeci">ConstraintGraph * consCG</div><div class="ttdoc">Constraint Graph. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00143">Andersen.h:143</a></div></div>
234
- <div class="ttc" id="classSVF_1_1AndersenHCD_html_ac7629cede14407d42ed5b5ec7e607b0e"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#ac7629cede14407d42ed5b5ec7e607b0e">SVF::AndersenHCD::AndersenHCD</a></div><div class="ttdeci">AndersenHCD(SVFIR *_pag, PTATY type=AndersenHCD_WPA)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00560">Andersen.h:560</a></div></div>
233
+ <div class="ttc" id="classSVF_1_1AndersenHCD_html_ac7629cede14407d42ed5b5ec7e607b0e"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#ac7629cede14407d42ed5b5ec7e607b0e">SVF::AndersenHCD::AndersenHCD</a></div><div class="ttdeci">AndersenHCD(SVFIR *_pag, PTATY type=AndersenHCD_WPA)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00552">Andersen.h:552</a></div></div>
235
234
  <div class="ttc" id="classSVF_1_1AddrCGEdge_html"><div class="ttname"><a href="classSVF_1_1AddrCGEdge.html">SVF::AddrCGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00093">ConsGEdge.h:93</a></div></div>
236
235
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85a9a25374fb6d2218c6c59de0482548f49"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a9a25374fb6d2218c6c59de0482548f49">SVF::PointerAnalysis::Andersen_BASE</a></div><div class="ttdoc">Base Andersen PTA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00065">PointerAnalysis.h:65</a></div></div>
237
236
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0f71e4cd0948b294c7d33a690bde7dbe"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">SVF::PointerAnalysis::isFieldInsensitive</a></div><div class="ttdeci">bool isFieldInsensitive(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00358">PointerAnalysis.h:358</a></div></div>
@@ -247,14 +246,14 @@ $(function() {
247
246
  <div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
248
247
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a9fe738f1e11c80006d540f246a80bfdf"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a9fe738f1e11c80006d540f246a80bfdf">SVF::AndersenBase::timeOfProcessLoadStore</a></div><div class="ttdeci">static double timeOfProcessLoadStore</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00137">Andersen.h:137</a></div></div>
249
248
  <div class="ttc" id="classSVF_1_1AndersenLCD_html_a139d80e25fe713194f719581915d36d5"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#a139d80e25fe713194f719581915d36d5">SVF::AndersenLCD::handleCopyGep</a></div><div class="ttdeci">virtual void handleCopyGep(ConstraintNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenLCD_8cpp_source.html#l00057">AndersenLCD.cpp:57</a></div></div>
250
- <div class="ttc" id="classSVF_1_1AndersenLCD_html_a583b062b7c221bd50e5f37b7cb9b7a62"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#a583b062b7c221bd50e5f37b7cb9b7a62">SVF::AndersenLCD::releaseAndersenLCD</a></div><div class="ttdeci">static void releaseAndersenLCD()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00495">Andersen.h:495</a></div></div>
249
+ <div class="ttc" id="classSVF_1_1AndersenLCD_html_a583b062b7c221bd50e5f37b7cb9b7a62"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#a583b062b7c221bd50e5f37b7cb9b7a62">SVF::AndersenLCD::releaseAndersenLCD</a></div><div class="ttdeci">static void releaseAndersenLCD()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00487">Andersen.h:487</a></div></div>
251
250
  <div class="ttc" id="classSVF_1_1Andersen_html_a69161671030b51c5a6cf139325aa098f"><div class="ttname"><a href="classSVF_1_1Andersen.html#a69161671030b51c5a6cf139325aa098f">SVF::Andersen::setDiffOpt</a></div><div class="ttdeci">void setDiffOpt(bool flag)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00249">Andersen.h:249</a></div></div>
252
251
  <div class="ttc" id="classSVF_1_1Andersen_html_ab81b08574f80287803dd43b5ebe2adfa"><div class="ttname"><a href="classSVF_1_1Andersen.html#ab81b08574f80287803dd43b5ebe2adfa">SVF::Andersen::setSCCEdgeFlag</a></div><div class="ttdeci">virtual void setSCCEdgeFlag(ConstraintNode::SCCEdgeFlag f)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00305">Andersen.h:305</a></div></div>
253
252
  <div class="ttc" id="classSVF_1_1Andersen_html_acd2feff818906db49a1bb2d94c33db5f"><div class="ttname"><a href="classSVF_1_1Andersen.html#acd2feff818906db49a1bb2d94c33db5f">SVF::Andersen::sccSubNodes</a></div><div class="ttdeci">NodeBS &amp; sccSubNodes(NodeID repId)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00209">Andersen.h:209</a></div></div>
254
253
  <div class="ttc" id="classSVF_1_1Andersen_html_aad706e332847e6b0892350a05028ba30"><div class="ttname"><a href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">SVF::Andersen::sccRepNode</a></div><div class="ttdeci">NodeID sccRepNode(NodeID id) const</div><div class="ttdoc">SCC methods. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00205">Andersen.h:205</a></div></div>
255
- <div class="ttc" id="classSVF_1_1AndersenLCD_html_a0c5adfc0876e9bea02fe8ded41baeb91"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#a0c5adfc0876e9bea02fe8ded41baeb91">SVF::AndersenLCD::addMetEdge</a></div><div class="ttdeci">void addMetEdge(ConstraintEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00526">Andersen.h:526</a></div></div>
254
+ <div class="ttc" id="classSVF_1_1AndersenLCD_html_a0c5adfc0876e9bea02fe8ded41baeb91"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#a0c5adfc0876e9bea02fe8ded41baeb91">SVF::AndersenLCD::addMetEdge</a></div><div class="ttdeci">void addMetEdge(ConstraintEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00518">Andersen.h:518</a></div></div>
256
255
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_a0fd9fca5ed82cf83dbd825d23c63783a"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a0fd9fca5ed82cf83dbd825d23c63783a">SVF::ConstraintNode::sccEdgeFlag</a></div><div class="ttdeci">static SCCEdgeFlag sccEdgeFlag</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00076">ConsGNode.h:76</a></div></div>
257
- <div class="ttc" id="classSVF_1_1AndersenHLCD_html_a835f347f1f947ac3bbf5e4c958e59f05"><div class="ttname"><a href="classSVF_1_1AndersenHLCD.html#a835f347f1f947ac3bbf5e4c958e59f05">SVF::AndersenHLCD::createAndersenHLCD</a></div><div class="ttdeci">static AndersenHLCD * createAndersenHLCD(SVFIR *_pag)</div><div class="ttdoc">Create an singleton instance directly instead of invoking llvm pass manager. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00637">Andersen.h:637</a></div></div>
256
+ <div class="ttc" id="classSVF_1_1AndersenHLCD_html_a835f347f1f947ac3bbf5e4c958e59f05"><div class="ttname"><a href="classSVF_1_1AndersenHLCD.html#a835f347f1f947ac3bbf5e4c958e59f05">SVF::AndersenHLCD::createAndersenHLCD</a></div><div class="ttdeci">static AndersenHLCD * createAndersenHLCD(SVFIR *_pag)</div><div class="ttdoc">Create an singleton instance directly instead of invoking llvm pass manager. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00629">Andersen.h:629</a></div></div>
258
257
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html">SVF::PointerAnalysis</a></div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00057">PointerAnalysis.h:57</a></div></div>
259
258
  <div class="ttc" id="namespaceSVF_html_aedf0d6718ca176e0b9e17ab4b30729c6"><div class="ttname"><a href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">SVF::OrderedMap</a></div><div class="ttdeci">std::map&lt; Key, Value, Compare, Allocator &gt; OrderedMap</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00117">SVFBasicTypes.h:117</a></div></div>
260
259
  <div class="ttc" id="classSVF_1_1AndersenWaveDiff_html_a5da6abb1a7f0ef3e3871ea6e5a623625"><div class="ttname"><a href="classSVF_1_1AndersenWaveDiff.html#a5da6abb1a7f0ef3e3871ea6e5a623625">SVF::AndersenWaveDiff::releaseAndersenWaveDiff</a></div><div class="ttdeci">static void releaseAndersenWaveDiff()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00440">Andersen.h:440</a></div></div>