svf-tools 1.0.325 → 1.0.326

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 (51) hide show
  1. package/SVF-doxygen/html/html/Conditions_8cpp_source.html +22 -20
  2. package/SVF-doxygen/html/html/Conditions_8h_source.html +12 -9
  3. package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +1 -1
  4. package/SVF-doxygen/html/html/FileChecker_8cpp_source.html +1 -1
  5. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +24 -22
  7. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +3 -3
  8. package/SVF-doxygen/html/html/ProgSlice_8h_source.html +5 -5
  9. package/SVF-doxygen/html/html/classSVF_1_1BranchCondManager.html +22 -22
  10. package/SVF-doxygen/html/html/classSVF_1_1CondManager-members.html +10 -7
  11. package/SVF-doxygen/html/html/classSVF_1_1CondManager.html +144 -43
  12. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +1 -1
  13. package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +1 -1
  14. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +1 -1
  15. package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator-members.html +13 -12
  16. package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +102 -70
  17. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +11 -10
  18. package/SVF-doxygen/html/html/functions_c.html +3 -3
  19. package/SVF-doxygen/html/html/functions_func_i.html +8 -4
  20. package/SVF-doxygen/html/html/functions_func_s.html +8 -5
  21. package/SVF-doxygen/html/html/functions_i.html +12 -8
  22. package/SVF-doxygen/html/html/functions_l.html +3 -3
  23. package/SVF-doxygen/html/html/functions_n.html +7 -4
  24. package/SVF-doxygen/html/html/functions_o.html +11 -11
  25. package/SVF-doxygen/html/html/functions_p.html +15 -13
  26. package/SVF-doxygen/html/html/functions_r.html +1 -1
  27. package/SVF-doxygen/html/html/functions_s.html +16 -13
  28. package/SVF-doxygen/html/html/functions_t.html +1 -3
  29. package/SVF-doxygen/html/html/functions_vars_n.html +3 -0
  30. package/SVF-doxygen/html/html/functions_w.html +9 -5
  31. package/SVF-doxygen/html/html/search/all_10.js +7 -7
  32. package/SVF-doxygen/html/html/search/all_12.js +1 -1
  33. package/SVF-doxygen/html/html/search/all_13.js +4 -3
  34. package/SVF-doxygen/html/html/search/all_14.js +2 -2
  35. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  36. package/SVF-doxygen/html/html/search/all_3.js +1 -1
  37. package/SVF-doxygen/html/html/search/all_9.js +2 -1
  38. package/SVF-doxygen/html/html/search/all_c.js +2 -2
  39. package/SVF-doxygen/html/html/search/all_d.js +1 -1
  40. package/SVF-doxygen/html/html/search/all_e.js +6 -5
  41. package/SVF-doxygen/html/html/search/all_f.js +1 -1
  42. package/SVF-doxygen/html/html/search/functions_10.js +2 -1
  43. package/SVF-doxygen/html/html/search/functions_8.js +1 -0
  44. package/SVF-doxygen/html/html/search/functions_e.js +1 -1
  45. package/SVF-doxygen/html/html/search/variables_14.js +1 -1
  46. package/SVF-doxygen/html/html/search/variables_e.js +4 -3
  47. package/include/SABER/PathCondAllocator.h +4 -0
  48. package/include/Util/Conditions.h +10 -0
  49. package/lib/SABER/ProgSlice.cpp +4 -1
  50. package/lib/Util/Conditions.cpp +5 -1
  51. package/package.json +1 -1
@@ -66,24 +66,24 @@ $(function() {
66
66
  <div class="title">Conditions.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="Conditions_8cpp.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">//===- Conditions.cpp -- Context/path conditions in the form of BDDs----------//</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;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> * Conditions.cpp</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Created on: Oct 19, 2021</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> * Author: Yulei and Xiao</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Conditions_8h.html">Util/Conditions.h</a>&quot;</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#aed854ecc55a568597f7d7f1f78fb92f4">CondManager::trueCond</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#a0ba3cf86743de62bcd5fd38d8166bc90">CondManager::falseCond</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<a class="code" href="classSVF_1_1CondManager.html">CondManager</a>* <a class="code" href="classSVF_1_1CondManager.html#a1e48008a3fe3a562512e253133aa557f">CondManager::condMgr</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1CondManager.html#a7efaeff7229fcfdc6c05d53ee3e1d916">CondManager::totalCondNum</a> = 0;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#aa307bb05b92907ccf8859b4bac53b796"> 46</a></span>&#160;<a class="code" href="classSVF_1_1CondManager.html#aa307bb05b92907ccf8859b4bac53b796">CondManager::CondManager</a>() : sol(cxt)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;{</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">const</span> z3::expr &amp;trueExpr = <a class="code" href="classSVF_1_1CondManager.html#a087773d6ae6ed6af009a356dd7b61e11">cxt</a>.bool_val(<span class="keyword">true</span>);</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#aed854ecc55a568597f7d7f1f78fb92f4">trueCond</a> = <a class="code" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab">getOrAddBranchCond</a>(trueExpr, <a class="code" href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">branchCondManager</a>.<a class="code" href="classSVF_1_1BranchCondManager.html#ac6fb7493ceb44406a4bd6a62a60a6363">getTrueCond</a>());</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> z3::expr &amp;falseExpr = <a class="code" href="classSVF_1_1CondManager.html#a087773d6ae6ed6af009a356dd7b61e11">cxt</a>.bool_val(<span class="keyword">false</span>);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#a0ba3cf86743de62bcd5fd38d8166bc90">falseCond</a> = <a class="code" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab">getOrAddBranchCond</a>(falseExpr, <a class="code" href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">branchCondManager</a>.<a class="code" href="classSVF_1_1BranchCondManager.html#a013eb66493beb2b1d004605c68894a95">getFalseCond</a>());</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a5677513376a78707de664c1cc85805aa"> 57</a></span>&#160;<a class="code" href="classSVF_1_1CondManager.html#a5677513376a78707de664c1cc85805aa">CondManager::~CondManager</a>()</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;{</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; it : <a class="code" href="classSVF_1_1CondManager.html#a3621c17b2ff1beb7aa4e467ec357713b">allocatedConds</a>)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">delete</span> it.second;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;}</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#aeb4f9f4968f57602d12225757073f0f8"> 69</a></span>&#160;z3::expr <a class="code" href="classSVF_1_1CondManager.html#aeb4f9f4968f57602d12225757073f0f8">CondManager::simplify</a>(<span class="keyword">const</span> z3::expr&amp; expr)<span class="keyword"> const</span>{</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; z3::goal g(expr.ctx());</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; z3::tactic qe =</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; z3::tactic(expr.ctx(), <span class="stringliteral">&quot;aig&quot;</span>);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; g.add(expr);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; z3::apply_result r = qe(g);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; z3::expr res(expr.ctx().bool_val(<span class="keyword">false</span>));</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; r.size(); ++i) {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">if</span> (res.is_false()) {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; res = r[i].as_expr();</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; res = res || r[i].as_expr();</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</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> res;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;}</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</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;</div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#ae4ad2a90ac794163060290b6ac1f2949"> 91</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#ae4ad2a90ac794163060290b6ac1f2949">CondManager::createFreshBranchCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;{</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> condCountIdx = <a class="code" href="classSVF_1_1CondManager.html#a7efaeff7229fcfdc6c05d53ee3e1d916">totalCondNum</a>++;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">const</span> z3::expr &amp;expr = <a class="code" href="classSVF_1_1CondManager.html#a087773d6ae6ed6af009a356dd7b61e11">cxt</a>.bool_const((<span class="stringliteral">&quot;c&quot;</span> + std::to_string(condCountIdx)).c_str());</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; IDToCondExprMap::const_iterator it = <a class="code" href="classSVF_1_1CondManager.html#a3621c17b2ff1beb7aa4e467ec357713b">allocatedConds</a>.find(expr.id());</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">if</span> (it != <a class="code" href="classSVF_1_1CondManager.html#a3621c17b2ff1beb7aa4e467ec357713b">allocatedConds</a>.end())</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="structDdNode.html">BranchCond</a> *branchCond = <a class="code" href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">branchCondManager</a>.<a class="code" href="classSVF_1_1BranchCondManager.html#a6c807df0d5627d3afda2359b658bc97c">createCond</a>(condCountIdx);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keyword">auto</span> *cond = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BranchCondExpr.html">BranchCondExpr</a>(expr, branchCond);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keyword">auto</span> *negCond = <a class="code" href="classSVF_1_1CondManager.html#a5751792e45c8abd5ffd3610d94e9f0b7">NEG</a>(cond);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#a1fbf7dd446309e13671d838c91da26bf">setCondInst</a>(cond, inst);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#a1fbf7dd446309e13671d838c91da26bf">setCondInst</a>(negCond, inst);</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#afd01891f45e085e990c9dbba5cbf3914">branchCondToCondExpr</a>.emplace(branchCond, cond);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a3621c17b2ff1beb7aa4e467ec357713b">allocatedConds</a>.emplace(expr.id(), cond).first-&gt;second;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;}</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab"> 113</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab">CondManager::getOrAddBranchCond</a>(<span class="keyword">const</span> z3::expr&amp; e, <a class="code" href="structDdNode.html">BranchCond</a>* branchCond)</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;{</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1CondManager.html#afd01891f45e085e990c9dbba5cbf3914">branchCondToCondExpr</a>.find(branchCond);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span>(it != <a class="code" href="classSVF_1_1CondManager.html#afd01891f45e085e990c9dbba5cbf3914">branchCondToCondExpr</a>.end())</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">auto</span> *cond = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BranchCondExpr.html">BranchCondExpr</a>(e, branchCond);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#afd01891f45e085e990c9dbba5cbf3914">branchCondToCondExpr</a>.emplace(branchCond, cond);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a3621c17b2ff1beb7aa4e467ec357713b">allocatedConds</a>.emplace(e.id(), cond).first-&gt;second;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;}</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#af167e75fab5f61b18bff296075c107d1"> 128</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1CondManager.html#af167e75fab5f61b18bff296075c107d1">CondManager::getCondNumber</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"> 130</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">sol</a>.get_model().size();</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;}</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a4b88160366a7c7b2bf7e2ab632ed04c7"> 134</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#a4b88160366a7c7b2bf7e2ab632ed04c7">CondManager::AND</a>(<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* lhs, <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* rhs){</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>() || rhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">return</span> rhs;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="structDdNode.html">BranchCond</a> *branchCond = <a class="code" href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">branchCondManager</a>.<a class="code" href="classSVF_1_1BranchCondManager.html#a739f4206abf4f367dc796e9fd35d4d04">AND</a>(SVFUtil::dyn_cast&lt;BranchCondExpr&gt;(lhs)-&gt;getBranchCond(),</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; SVFUtil::dyn_cast&lt;BranchCondExpr&gt;(rhs)-&gt;getBranchCond());</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keyword">const</span> z3::expr &amp;expr = lhs-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>() &amp;&amp; rhs-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>();</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab">getOrAddBranchCond</a>(expr, branchCond);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;}</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a83824b36d6cd073a171df9919aa0c704"> 149</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#a83824b36d6cd073a171df9919aa0c704">CondManager::OR</a>(<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* lhs, <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* rhs){</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>() || rhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>();</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">return</span> rhs;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="structDdNode.html">BranchCond</a> *branchCond = <a class="code" href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">branchCondManager</a>.<a class="code" href="classSVF_1_1BranchCondManager.html#a7f3fa5e90c08950099ff6f05e96ecb9c">OR</a>(SVFUtil::dyn_cast&lt;BranchCondExpr&gt;(lhs)-&gt;getBranchCond(),</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; SVFUtil::dyn_cast&lt;BranchCondExpr&gt;(rhs)-&gt;getBranchCond());</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keyword">const</span> z3::expr &amp;expr = lhs-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>() || rhs-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>();</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab">getOrAddBranchCond</a>(expr, branchCond);</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="l00163"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a5751792e45c8abd5ffd3610d94e9f0b7"> 163</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#a5751792e45c8abd5ffd3610d94e9f0b7">CondManager::NEG</a>(<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* lhs){</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>();</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>();</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="structDdNode.html">BranchCond</a> *branchCond = <a class="code" href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">branchCondManager</a>.<a class="code" href="classSVF_1_1BranchCondManager.html#ad7832b33b3b73fcaca5c8278ed4d3e7f">NEG</a>(SVFUtil::dyn_cast&lt;BranchCondExpr&gt;(lhs)-&gt;getBranchCond());</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keyword">const</span> z3::expr &amp;expr = !lhs-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>();</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab">getOrAddBranchCond</a>(expr, branchCond);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;}</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div><div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#ab9772aa1a35e963ccc9ce1007ebc1310"> 179</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondManager.html#ab9772aa1a35e963ccc9ce1007ebc1310">CondManager::printModel</a>()</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;{</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; std::cout &lt;&lt; <a class="code" href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">sol</a>.check() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; z3::model m = <a class="code" href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">sol</a>.get_model();</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; m.size(); i++)</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; z3::func_decl v = m[<span class="keyword">static_cast&lt;</span><a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a><span class="keyword">&gt;</span>(i)];</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; std::cout &lt;&lt; v.name() &lt;&lt; <span class="stringliteral">&quot; = &quot;</span> &lt;&lt; m.get_const_interp(v) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</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;}</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;</div><div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a8a9d3d96c2c8cfef8b9d9c27c28871f6"> 193</a></span>&#160;std::string <a class="code" href="classSVF_1_1CondManager.html#a8a9d3d96c2c8cfef8b9d9c27c28871f6">CondManager::getMemUsage</a>()</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;{</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="comment">//std::ostringstream os;</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="comment">//memory::display_max_usage(os);</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="comment">//return os.str();</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;}</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#acd773bd9dbf5161e488c827b0b71481d"> 204</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondManager.html#acd773bd9dbf5161e488c827b0b71481d">CondManager::extractSubConds</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* cond, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;support)<span class="keyword"> const</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">if</span> (cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().num_args() == 0)</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">if</span> (!cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().is_true() &amp;&amp; !cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().is_false())</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; support.set(cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().id());</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().num_args(); ++i) {</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keyword">const</span> z3::expr &amp;expr = cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().arg(i);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#acd773bd9dbf5161e488c827b0b71481d">extractSubConds</a>(<a class="code" href="classSVF_1_1CondManager.html#ac246b92ebdf6a9635ed79892b81b9ae8">getCond</a>(expr.id()), support);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;}</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;</div><div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a725d9c0a3aad4ebea3f06edf433f04ea"> 218</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondManager.html#a725d9c0a3aad4ebea3f06edf433f04ea">CondManager::isSatisfiable</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* cond){</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">sol</a>.reset();</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">sol</a>.add(cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>());</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; z3::check_result <a class="code" href="cuddInt_8c.html#a8b2e13c78efca330f06b6ddcd7464b41">result</a> = <a class="code" href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">sol</a>.check();</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">if</span> (result == z3::sat || result == z3::unknown)</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;}</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a6151817a6f671fa1e7814e74f7ce2e51"> 231</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondManager.html#a6151817a6f671fa1e7814e74f7ce2e51">CondManager::isAllPathReachable</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* e){</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#adef2474c65a7f9d96b27ee670136a240">isEquivalentBranchCond</a>(e, <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>());</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;}</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div><div class="line"><a name="l00238"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a385339096b4322654b5b2c7a37e852fe"> 238</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondManager.html#a385339096b4322654b5b2c7a37e852fe">CondManager::printDbg</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *e)</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;{</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; std::cout &lt;&lt; e-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;}</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;</div><div class="line"><a name="l00246"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a907afafc19d8faa7a200bf4f1e07bb4f"> 246</a></span>&#160;std::string <a class="code" href="classSVF_1_1CondManager.html#a907afafc19d8faa7a200bf4f1e07bb4f">CondManager::dumpStr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *e)<span class="keyword"> const</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; std::ostringstream out;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; out &lt;&lt; e-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>();</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">return</span> out.str();</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;}</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<a class="code" href="structDdNode.html">BranchCondManager::BranchCond</a>* <a class="code" href="classSVF_1_1BranchCondManager.html#a739f4206abf4f367dc796e9fd35d4d04">BranchCondManager::AND</a>(<a class="code" href="structDdNode.html">BranchCond</a>* lhs, <a class="code" href="structDdNode.html">BranchCond</a>* rhs)</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; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>() || rhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>();</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">return</span> rhs;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <a class="code" href="structDdNode.html">BranchCond</a>* tmp = <a class="code" href="cudd_8h.html#adfbb2fd5b9c884df0d684a86dc26a97d">Cudd_bddAndLimit</a>(m_bdd_mgr, lhs, rhs, <a class="code" href="classSVF_1_1Options.html#a344ca0e4b8d9159836e558aed44be1b4">Options::MaxBddSize</a>);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">if</span>(tmp==<span class="keyword">nullptr</span>)</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; {</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">SVFUtil::writeWrnMsg</a>(<span class="stringliteral">&quot;exceeds max bdd size \n&quot;</span>);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; }</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; {</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <a class="code" href="cudd_8h.html#a3d0d9959640235fc073699c776914fca">Cudd_Ref</a>(tmp);</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">return</span> tmp;</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; }</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;}</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#a7f3fa5e90c08950099ff6f05e96ecb9c"> 284</a></span>&#160;<a class="code" href="structDdNode.html">BranchCondManager::BranchCond</a>* <a class="code" href="classSVF_1_1BranchCondManager.html#a7f3fa5e90c08950099ff6f05e96ecb9c">BranchCondManager::OR</a>(<a class="code" href="structDdNode.html">BranchCond</a>* lhs, <a class="code" href="structDdNode.html">BranchCond</a>* rhs)</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;{</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>() || rhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>();</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">return</span> rhs;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; {</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <a class="code" href="structDdNode.html">BranchCond</a>* tmp = <a class="code" href="cudd_8h.html#a6cbc77f8b658ac3c88a2549a84c58b38">Cudd_bddOrLimit</a>(m_bdd_mgr, lhs, rhs, <a class="code" href="classSVF_1_1Options.html#a344ca0e4b8d9159836e558aed44be1b4">Options::MaxBddSize</a>);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">if</span>(tmp==<span class="keyword">nullptr</span>)</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; {</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">SVFUtil::writeWrnMsg</a>(<span class="stringliteral">&quot;exceeds max bdd size \n&quot;</span>);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>();</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; }</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <a class="code" href="cudd_8h.html#a3d0d9959640235fc073699c776914fca">Cudd_Ref</a>(tmp);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">return</span> tmp;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;}</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div><div class="line"><a name="l00309"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#ad7832b33b3b73fcaca5c8278ed4d3e7f"> 309</a></span>&#160;<a class="code" href="structDdNode.html">BranchCondManager::BranchCond</a>* <a class="code" href="classSVF_1_1BranchCondManager.html#ad7832b33b3b73fcaca5c8278ed4d3e7f">BranchCondManager::NEG</a>(<a class="code" href="structDdNode.html">BranchCond</a>* lhs)</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;{</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>();</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>();</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">return</span> <a class="code" href="cudd_8h.html#a352ef8d39e760eaabae6d58d9a5ddbfc">Cudd_Not</a>(lhs);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;}</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;</div><div class="line"><a name="l00324"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#a513a9865b87af136edf1abb1932716dd"> 324</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BranchCondManager.html#a513a9865b87af136edf1abb1932716dd">BranchCondManager::ddClearFlag</a>(<a class="code" href="structDdNode.html">BranchCond</a> * f)<span class="keyword"> const</span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="cudd_8h.html#a35322518c24f65f44eda9623083cb62c">Cudd_IsComplement</a>(f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a>))</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="comment">/* Clear visited flag. */</span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a> = <a class="code" href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a>(f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a>);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cuddInt_8h.html#aa5cad999b2a4a3dbbfe5c1da1d8bc028">cuddIsConstant</a>(f))</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <a class="code" href="cuddInt_8c.html#ab69f928c3cca42f5b1330803de1d9199">ddClearFlag</a>(<a class="code" href="cuddInt_8h.html#a09834c697b92ac296b1e50c863f88262">cuddT</a>(f));</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <a class="code" href="cuddInt_8c.html#ab69f928c3cca42f5b1330803de1d9199">ddClearFlag</a>(<a class="code" href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a>(<a class="code" href="cuddInt_8h.html#aaef03f10591d8e28bb5fecd2aa7c93ff">cuddE</a>(f)));</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;}</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;</div><div class="line"><a name="l00337"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#a94f84201f91b7175907e72af2633f6f2"> 337</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BranchCondManager.html#a94f84201f91b7175907e72af2633f6f2">BranchCondManager::BddSupportStep</a>(<a class="code" href="structDdNode.html">BranchCond</a> * f, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;support)<span class="keyword"> const</span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cuddInt_8h.html#aa5cad999b2a4a3dbbfe5c1da1d8bc028">cuddIsConstant</a>(f) || <a class="code" href="cudd_8h.html#a35322518c24f65f44eda9623083cb62c">Cudd_IsComplement</a>(f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a>))</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; support.set(f-&gt;<a class="code" href="structDdNode.html#abbd39b25b9abe4b4d53cd267a4103bda">index</a>);</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; BddSupportStep(<a class="code" href="cuddInt_8h.html#a09834c697b92ac296b1e50c863f88262">cuddT</a>(f), support);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; BddSupportStep(<a class="code" href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a>(<a class="code" href="cuddInt_8h.html#aaef03f10591d8e28bb5fecd2aa7c93ff">cuddE</a>(f)), support);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="comment">/* Mark as visited. */</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a> = <a class="code" href="cudd_8h.html#ac4575f4314998362765264f64eccfe0c">Cudd_Complement</a>(f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a>);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;}</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#aa241ee8c9d8ef17029dba67b737d8beb"> 350</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BranchCondManager.html#aa241ee8c9d8ef17029dba67b737d8beb">BranchCondManager::extractSubConds</a>(<a class="code" href="structDdNode.html">BranchCond</a> * f, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;support)<span class="keyword"> const</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; BddSupportStep( <a class="code" href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a>(f), support);</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <a class="code" href="cuddInt_8c.html#ab69f928c3cca42f5b1330803de1d9199">ddClearFlag</a>(<a class="code" href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a>(f));</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;}</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;</div><div class="line"><a name="l00359"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#a2f745f39ea76d3cce7581cd4e260561d"> 359</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BranchCondManager.html#a2f745f39ea76d3cce7581cd4e260561d">BranchCondManager::dump</a>(<a class="code" href="structDdNode.html">BranchCond</a>* lhs, <a class="code" href="namespaceSVF.html#a424cc053c29ad7303699c529d1a2cc71">raw_ostream</a> &amp; O)</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;{</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; O &lt;&lt; <span class="stringliteral">&quot;T&quot;</span>;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> support;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#acd773bd9dbf5161e488c827b0b71481d">extractSubConds</a>(lhs, support);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator iter = support.begin(); iter != support.end();</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; ++iter)</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; {</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keywordtype">unsigned</span> rid = *iter;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; O &lt;&lt; rid &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</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; }</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;</div><div class="line"><a name="l00379"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#a930ece842bcdab283fb27e2a053bc8de"> 379</a></span>&#160;std::string <a class="code" href="classSVF_1_1BranchCondManager.html#a930ece842bcdab283fb27e2a053bc8de">BranchCondManager::dumpStr</a>(<a class="code" href="structDdNode.html">BranchCond</a>* lhs)<span class="keyword"> const</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; std::string str;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; str += <span class="stringliteral">&quot;T&quot;</span>;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">else</span></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; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> support;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#acd773bd9dbf5161e488c827b0b71481d">extractSubConds</a>(lhs, support);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator iter = support.begin(); iter != support.end();</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; ++iter)</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; {</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordtype">unsigned</span> rid = *iter;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordtype">char</span> int2str[16];</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; sprintf(int2str, <span class="stringliteral">&quot;%d&quot;</span>, rid);</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; str += int2str;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; str += <span class="stringliteral">&quot; &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="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordflow">return</span> str;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;}</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;</div><div class="ttc" id="classSVF_1_1BranchCondManager_html_a6c807df0d5627d3afda2359b658bc97c"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a6c807df0d5627d3afda2359b658bc97c">SVF::BranchCondManager::createCond</a></div><div class="ttdeci">BranchCond * createCond(u32_t i)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00130">Conditions.h:130</a></div></div>
70
- <div class="ttc" id="classSVF_1_1CondManager_html_a0ba3cf86743de62bcd5fd38d8166bc90"><div class="ttname"><a href="classSVF_1_1CondManager.html#a0ba3cf86743de62bcd5fd38d8166bc90">SVF::CondManager::falseCond</a></div><div class="ttdeci">static CondExpr * falseCond</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00296">Conditions.h:296</a></div></div>
69
+ <a href="Conditions_8cpp.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">//===- Conditions.cpp -- Context/path conditions in the form of BDDs----------//</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;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> * Conditions.cpp</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Created on: Oct 19, 2021</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> * Author: Yulei and Xiao</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Conditions_8h.html">Util/Conditions.h</a>&quot;</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#aed854ecc55a568597f7d7f1f78fb92f4">CondManager::trueCond</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#a0ba3cf86743de62bcd5fd38d8166bc90">CondManager::falseCond</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<a class="code" href="classSVF_1_1CondManager.html">CondManager</a>* <a class="code" href="classSVF_1_1CondManager.html#a1e48008a3fe3a562512e253133aa557f">CondManager::condMgr</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1CondManager.html#a7efaeff7229fcfdc6c05d53ee3e1d916">CondManager::totalCondNum</a> = 0;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#aa307bb05b92907ccf8859b4bac53b796"> 46</a></span>&#160;<a class="code" href="classSVF_1_1CondManager.html#aa307bb05b92907ccf8859b4bac53b796">CondManager::CondManager</a>() : sol(cxt)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;{</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">const</span> z3::expr &amp;trueExpr = <a class="code" href="classSVF_1_1CondManager.html#a087773d6ae6ed6af009a356dd7b61e11">cxt</a>.bool_val(<span class="keyword">true</span>);</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#aed854ecc55a568597f7d7f1f78fb92f4">trueCond</a> = <a class="code" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab">getOrAddBranchCond</a>(trueExpr, <a class="code" href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">branchCondManager</a>.<a class="code" href="classSVF_1_1BranchCondManager.html#ac6fb7493ceb44406a4bd6a62a60a6363">getTrueCond</a>());</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> z3::expr &amp;falseExpr = <a class="code" href="classSVF_1_1CondManager.html#a087773d6ae6ed6af009a356dd7b61e11">cxt</a>.bool_val(<span class="keyword">false</span>);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#a0ba3cf86743de62bcd5fd38d8166bc90">falseCond</a> = <a class="code" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab">getOrAddBranchCond</a>(falseExpr, <a class="code" href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">branchCondManager</a>.<a class="code" href="classSVF_1_1BranchCondManager.html#a013eb66493beb2b1d004605c68894a95">getFalseCond</a>());</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a5677513376a78707de664c1cc85805aa"> 57</a></span>&#160;<a class="code" href="classSVF_1_1CondManager.html#a5677513376a78707de664c1cc85805aa">CondManager::~CondManager</a>()</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;{</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; it : <a class="code" href="classSVF_1_1CondManager.html#a3621c17b2ff1beb7aa4e467ec357713b">allocatedConds</a>)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">delete</span> it.second;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;}</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#aeb4f9f4968f57602d12225757073f0f8"> 69</a></span>&#160;z3::expr <a class="code" href="classSVF_1_1CondManager.html#aeb4f9f4968f57602d12225757073f0f8">CondManager::simplify</a>(<span class="keyword">const</span> z3::expr&amp; expr)<span class="keyword"> const</span>{</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; z3::goal g(expr.ctx());</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; z3::tactic qe =</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; z3::tactic(expr.ctx(), <span class="stringliteral">&quot;aig&quot;</span>);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; g.add(expr);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; z3::apply_result r = qe(g);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; z3::expr res(expr.ctx().bool_val(<span class="keyword">false</span>));</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; r.size(); ++i) {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">if</span> (res.is_false()) {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; res = r[i].as_expr();</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; res = res || r[i].as_expr();</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</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> res;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;}</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</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;</div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#ae4ad2a90ac794163060290b6ac1f2949"> 91</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#ae4ad2a90ac794163060290b6ac1f2949">CondManager::createFreshBranchCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;{</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> condCountIdx = <a class="code" href="classSVF_1_1CondManager.html#a7efaeff7229fcfdc6c05d53ee3e1d916">totalCondNum</a>++;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">const</span> z3::expr &amp;expr = <a class="code" href="classSVF_1_1CondManager.html#a087773d6ae6ed6af009a356dd7b61e11">cxt</a>.bool_const((<span class="stringliteral">&quot;c&quot;</span> + std::to_string(condCountIdx)).c_str());</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; IDToCondExprMap::const_iterator it = <a class="code" href="classSVF_1_1CondManager.html#a3621c17b2ff1beb7aa4e467ec357713b">allocatedConds</a>.find(expr.id());</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">if</span> (it != <a class="code" href="classSVF_1_1CondManager.html#a3621c17b2ff1beb7aa4e467ec357713b">allocatedConds</a>.end())</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="structDdNode.html">BranchCond</a> *branchCond = <a class="code" href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">branchCondManager</a>.<a class="code" href="classSVF_1_1BranchCondManager.html#a6c807df0d5627d3afda2359b658bc97c">createCond</a>(condCountIdx);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keyword">auto</span> *cond = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BranchCondExpr.html">BranchCondExpr</a>(expr, branchCond);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keyword">auto</span> *negCond = <a class="code" href="classSVF_1_1CondManager.html#a5751792e45c8abd5ffd3610d94e9f0b7">NEG</a>(cond);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#a1fbf7dd446309e13671d838c91da26bf">setCondInst</a>(cond, inst);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#a049541fec44cac3401a0dc68ff2f0ac1">setNegCondInst</a>(negCond, inst);</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#afd01891f45e085e990c9dbba5cbf3914">branchCondToCondExpr</a>.emplace(branchCond, cond);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a3621c17b2ff1beb7aa4e467ec357713b">allocatedConds</a>.emplace(expr.id(), cond).first-&gt;second;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;}</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab"> 113</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab">CondManager::getOrAddBranchCond</a>(<span class="keyword">const</span> z3::expr&amp; e, <a class="code" href="structDdNode.html">BranchCond</a>* branchCond)</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;{</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1CondManager.html#afd01891f45e085e990c9dbba5cbf3914">branchCondToCondExpr</a>.find(branchCond);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span>(it != <a class="code" href="classSVF_1_1CondManager.html#afd01891f45e085e990c9dbba5cbf3914">branchCondToCondExpr</a>.end())</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">auto</span> *cond = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BranchCondExpr.html">BranchCondExpr</a>(e, branchCond);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#afd01891f45e085e990c9dbba5cbf3914">branchCondToCondExpr</a>.emplace(branchCond, cond);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a3621c17b2ff1beb7aa4e467ec357713b">allocatedConds</a>.emplace(e.id(), cond).first-&gt;second;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;}</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#af167e75fab5f61b18bff296075c107d1"> 128</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1CondManager.html#af167e75fab5f61b18bff296075c107d1">CondManager::getCondNumber</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"> 130</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">sol</a>.get_model().size();</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;}</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a4b88160366a7c7b2bf7e2ab632ed04c7"> 134</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#a4b88160366a7c7b2bf7e2ab632ed04c7">CondManager::AND</a>(<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* lhs, <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* rhs){</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>() || rhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">return</span> rhs;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="structDdNode.html">BranchCond</a> *branchCond = <a class="code" href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">branchCondManager</a>.<a class="code" href="classSVF_1_1BranchCondManager.html#a739f4206abf4f367dc796e9fd35d4d04">AND</a>(SVFUtil::dyn_cast&lt;BranchCondExpr&gt;(lhs)-&gt;getBranchCond(),</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; SVFUtil::dyn_cast&lt;BranchCondExpr&gt;(rhs)-&gt;getBranchCond());</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keyword">const</span> z3::expr &amp;expr = lhs-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>() &amp;&amp; rhs-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>();</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab">getOrAddBranchCond</a>(expr, branchCond);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;}</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a83824b36d6cd073a171df9919aa0c704"> 149</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#a83824b36d6cd073a171df9919aa0c704">CondManager::OR</a>(<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* lhs, <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* rhs){</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>() || rhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>();</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">return</span> rhs;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="structDdNode.html">BranchCond</a> *branchCond = <a class="code" href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">branchCondManager</a>.<a class="code" href="classSVF_1_1BranchCondManager.html#a7f3fa5e90c08950099ff6f05e96ecb9c">OR</a>(SVFUtil::dyn_cast&lt;BranchCondExpr&gt;(lhs)-&gt;getBranchCond(),</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; SVFUtil::dyn_cast&lt;BranchCondExpr&gt;(rhs)-&gt;getBranchCond());</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keyword">const</span> z3::expr &amp;expr = lhs-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>() || rhs-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>();</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab">getOrAddBranchCond</a>(expr, branchCond);</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="l00163"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a5751792e45c8abd5ffd3610d94e9f0b7"> 163</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#a5751792e45c8abd5ffd3610d94e9f0b7">CondManager::NEG</a>(<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* lhs){</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>();</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>();</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="structDdNode.html">BranchCond</a> *branchCond = <a class="code" href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">branchCondManager</a>.<a class="code" href="classSVF_1_1BranchCondManager.html#ad7832b33b3b73fcaca5c8278ed4d3e7f">NEG</a>(SVFUtil::dyn_cast&lt;BranchCondExpr&gt;(lhs)-&gt;getBranchCond());</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keyword">const</span> z3::expr &amp;expr = !lhs-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>();</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab">getOrAddBranchCond</a>(expr, branchCond);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;}</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div><div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#ab9772aa1a35e963ccc9ce1007ebc1310"> 179</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondManager.html#ab9772aa1a35e963ccc9ce1007ebc1310">CondManager::printModel</a>()</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;{</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; std::cout &lt;&lt; <a class="code" href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">sol</a>.check() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; z3::model m = <a class="code" href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">sol</a>.get_model();</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; m.size(); i++)</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; z3::func_decl v = m[<span class="keyword">static_cast&lt;</span><a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a><span class="keyword">&gt;</span>(i)];</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; std::cout &lt;&lt; v.name() &lt;&lt; <span class="stringliteral">&quot; = &quot;</span> &lt;&lt; m.get_const_interp(v) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</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;}</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;</div><div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a8a9d3d96c2c8cfef8b9d9c27c28871f6"> 193</a></span>&#160;std::string <a class="code" href="classSVF_1_1CondManager.html#a8a9d3d96c2c8cfef8b9d9c27c28871f6">CondManager::getMemUsage</a>()</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;{</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="comment">//std::ostringstream os;</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="comment">//memory::display_max_usage(os);</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="comment">//return os.str();</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;}</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#acd773bd9dbf5161e488c827b0b71481d"> 204</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondManager.html#acd773bd9dbf5161e488c827b0b71481d">CondManager::extractSubConds</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* cond, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;support)<span class="keyword"> const</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">if</span> (cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().num_args() == 1 &amp;&amp; <a class="code" href="classSVF_1_1CondManager.html#ad1de136dbd62c3b9a7447222bd0890fa">isNegCond</a>(cond)) {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; support.set(cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().id());</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; }</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">if</span> (cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().num_args() == 0)</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">if</span> (!cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().is_true() &amp;&amp; !cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().is_false())</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; support.set(cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().id());</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().num_args(); ++i) {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keyword">const</span> z3::expr &amp;expr = cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().arg(i);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#acd773bd9dbf5161e488c827b0b71481d">extractSubConds</a>(<a class="code" href="classSVF_1_1CondManager.html#ac246b92ebdf6a9635ed79892b81b9ae8">getCond</a>(expr.id()), support);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;}</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a725d9c0a3aad4ebea3f06edf433f04ea"> 222</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondManager.html#a725d9c0a3aad4ebea3f06edf433f04ea">CondManager::isSatisfiable</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* cond){</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">sol</a>.reset();</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">sol</a>.add(cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>());</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; z3::check_result <a class="code" href="cuddInt_8c.html#a8b2e13c78efca330f06b6ddcd7464b41">result</a> = <a class="code" href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">sol</a>.check();</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span> (result == z3::sat || result == z3::unknown)</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</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="l00235"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a6151817a6f671fa1e7814e74f7ce2e51"> 235</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondManager.html#a6151817a6f671fa1e7814e74f7ce2e51">CondManager::isAllPathReachable</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* e){</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#adef2474c65a7f9d96b27ee670136a240">isEquivalentBranchCond</a>(e, <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>());</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;}</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a385339096b4322654b5b2c7a37e852fe"> 242</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondManager.html#a385339096b4322654b5b2c7a37e852fe">CondManager::printDbg</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *e)</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"> 244</span>&#160; std::cout &lt;&lt; e-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;}</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a907afafc19d8faa7a200bf4f1e07bb4f"> 250</a></span>&#160;std::string <a class="code" href="classSVF_1_1CondManager.html#a907afafc19d8faa7a200bf4f1e07bb4f">CondManager::dumpStr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *e)<span class="keyword"> const</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; std::ostringstream out;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; out &lt;&lt; e-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>();</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">return</span> out.str();</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;}</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</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;<a class="code" href="structDdNode.html">BranchCondManager::BranchCond</a>* <a class="code" href="classSVF_1_1BranchCondManager.html#a739f4206abf4f367dc796e9fd35d4d04">BranchCondManager::AND</a>(<a class="code" href="structDdNode.html">BranchCond</a>* lhs, <a class="code" href="structDdNode.html">BranchCond</a>* rhs)</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;{</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>() || rhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>();</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">return</span> rhs;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">else</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; <a class="code" href="structDdNode.html">BranchCond</a>* tmp = <a class="code" href="cudd_8h.html#adfbb2fd5b9c884df0d684a86dc26a97d">Cudd_bddAndLimit</a>(m_bdd_mgr, lhs, rhs, <a class="code" href="classSVF_1_1Options.html#a344ca0e4b8d9159836e558aed44be1b4">Options::MaxBddSize</a>);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">if</span>(tmp==<span class="keyword">nullptr</span>)</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">SVFUtil::writeWrnMsg</a>(<span class="stringliteral">&quot;exceeds max bdd size \n&quot;</span>);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; {</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <a class="code" href="cudd_8h.html#a3d0d9959640235fc073699c776914fca">Cudd_Ref</a>(tmp);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">return</span> tmp;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; }</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; }</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="l00288"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#a7f3fa5e90c08950099ff6f05e96ecb9c"> 288</a></span>&#160;<a class="code" href="structDdNode.html">BranchCondManager::BranchCond</a>* <a class="code" href="classSVF_1_1BranchCondManager.html#a7f3fa5e90c08950099ff6f05e96ecb9c">BranchCondManager::OR</a>(<a class="code" href="structDdNode.html">BranchCond</a>* lhs, <a class="code" href="structDdNode.html">BranchCond</a>* rhs)</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;{</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>() || rhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>();</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">return</span> rhs;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">else</span></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="structDdNode.html">BranchCond</a>* tmp = <a class="code" href="cudd_8h.html#a6cbc77f8b658ac3c88a2549a84c58b38">Cudd_bddOrLimit</a>(m_bdd_mgr, lhs, rhs, <a class="code" href="classSVF_1_1Options.html#a344ca0e4b8d9159836e558aed44be1b4">Options::MaxBddSize</a>);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">if</span>(tmp==<span class="keyword">nullptr</span>)</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">SVFUtil::writeWrnMsg</a>(<span class="stringliteral">&quot;exceeds max bdd size \n&quot;</span>);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</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"> 305</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; {</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <a class="code" href="cudd_8h.html#a3d0d9959640235fc073699c776914fca">Cudd_Ref</a>(tmp);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">return</span> tmp;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; }</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;}</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;</div><div class="line"><a name="l00313"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#ad7832b33b3b73fcaca5c8278ed4d3e7f"> 313</a></span>&#160;<a class="code" href="structDdNode.html">BranchCondManager::BranchCond</a>* <a class="code" href="classSVF_1_1BranchCondManager.html#ad7832b33b3b73fcaca5c8278ed4d3e7f">BranchCondManager::NEG</a>(<a class="code" href="structDdNode.html">BranchCond</a>* lhs)</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="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>();</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>();</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">return</span> <a class="code" href="cudd_8h.html#a352ef8d39e760eaabae6d58d9a5ddbfc">Cudd_Not</a>(lhs);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;}</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;</div><div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#a513a9865b87af136edf1abb1932716dd"> 328</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BranchCondManager.html#a513a9865b87af136edf1abb1932716dd">BranchCondManager::ddClearFlag</a>(<a class="code" href="structDdNode.html">BranchCond</a> * f)<span class="keyword"> const</span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="cudd_8h.html#a35322518c24f65f44eda9623083cb62c">Cudd_IsComplement</a>(f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a>))</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="comment">/* Clear visited flag. */</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a> = <a class="code" href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a>(f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a>);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cuddInt_8h.html#aa5cad999b2a4a3dbbfe5c1da1d8bc028">cuddIsConstant</a>(f))</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <a class="code" href="cuddInt_8c.html#ab69f928c3cca42f5b1330803de1d9199">ddClearFlag</a>(<a class="code" href="cuddInt_8h.html#a09834c697b92ac296b1e50c863f88262">cuddT</a>(f));</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <a class="code" href="cuddInt_8c.html#ab69f928c3cca42f5b1330803de1d9199">ddClearFlag</a>(<a class="code" href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a>(<a class="code" href="cuddInt_8h.html#aaef03f10591d8e28bb5fecd2aa7c93ff">cuddE</a>(f)));</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;}</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;</div><div class="line"><a name="l00341"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#a94f84201f91b7175907e72af2633f6f2"> 341</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BranchCondManager.html#a94f84201f91b7175907e72af2633f6f2">BranchCondManager::BddSupportStep</a>(<a class="code" href="structDdNode.html">BranchCond</a> * f, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;support)<span class="keyword"> const</span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cuddInt_8h.html#aa5cad999b2a4a3dbbfe5c1da1d8bc028">cuddIsConstant</a>(f) || <a class="code" href="cudd_8h.html#a35322518c24f65f44eda9623083cb62c">Cudd_IsComplement</a>(f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a>))</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; support.set(f-&gt;<a class="code" href="structDdNode.html#abbd39b25b9abe4b4d53cd267a4103bda">index</a>);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; BddSupportStep(<a class="code" href="cuddInt_8h.html#a09834c697b92ac296b1e50c863f88262">cuddT</a>(f), support);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; BddSupportStep(<a class="code" href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a>(<a class="code" href="cuddInt_8h.html#aaef03f10591d8e28bb5fecd2aa7c93ff">cuddE</a>(f)), support);</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="comment">/* Mark as visited. */</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a> = <a class="code" href="cudd_8h.html#ac4575f4314998362765264f64eccfe0c">Cudd_Complement</a>(f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a>);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;}</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#aa241ee8c9d8ef17029dba67b737d8beb"> 354</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BranchCondManager.html#aa241ee8c9d8ef17029dba67b737d8beb">BranchCondManager::extractSubConds</a>(<a class="code" href="structDdNode.html">BranchCond</a> * f, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;support)<span class="keyword"> const</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; BddSupportStep( <a class="code" href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a>(f), support);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <a class="code" href="cuddInt_8c.html#ab69f928c3cca42f5b1330803de1d9199">ddClearFlag</a>(<a class="code" href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a>(f));</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;}</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#a2f745f39ea76d3cce7581cd4e260561d"> 363</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BranchCondManager.html#a2f745f39ea76d3cce7581cd4e260561d">BranchCondManager::dump</a>(<a class="code" href="structDdNode.html">BranchCond</a>* lhs, <a class="code" href="namespaceSVF.html#a424cc053c29ad7303699c529d1a2cc71">raw_ostream</a> &amp; O)</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;{</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; O &lt;&lt; <span class="stringliteral">&quot;T&quot;</span>;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">else</span></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; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> support;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#acd773bd9dbf5161e488c827b0b71481d">extractSubConds</a>(lhs, support);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator iter = support.begin(); iter != support.end();</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; ++iter)</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; {</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordtype">unsigned</span> rid = *iter;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; O &lt;&lt; rid &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;}</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;</div><div class="line"><a name="l00383"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#a930ece842bcdab283fb27e2a053bc8de"> 383</a></span>&#160;std::string <a class="code" href="classSVF_1_1BranchCondManager.html#a930ece842bcdab283fb27e2a053bc8de">BranchCondManager::dumpStr</a>(<a class="code" href="structDdNode.html">BranchCond</a>* lhs)<span class="keyword"> const</span></div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; std::string str;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; str += <span class="stringliteral">&quot;T&quot;</span>;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; {</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> support;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#acd773bd9dbf5161e488c827b0b71481d">extractSubConds</a>(lhs, support);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator iter = support.begin(); iter != support.end();</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; ++iter)</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; {</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordtype">unsigned</span> rid = *iter;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordtype">char</span> int2str[16];</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; sprintf(int2str, <span class="stringliteral">&quot;%d&quot;</span>, rid);</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; str += int2str;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; str += <span class="stringliteral">&quot; &quot;</span>;</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; }</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">return</span> str;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;}</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;</div><div class="ttc" id="classSVF_1_1BranchCondManager_html_a6c807df0d5627d3afda2359b658bc97c"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a6c807df0d5627d3afda2359b658bc97c">SVF::BranchCondManager::createCond</a></div><div class="ttdeci">BranchCond * createCond(u32_t i)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00130">Conditions.h:130</a></div></div>
70
+ <div class="ttc" id="classSVF_1_1CondManager_html_a0ba3cf86743de62bcd5fd38d8166bc90"><div class="ttname"><a href="classSVF_1_1CondManager.html#a0ba3cf86743de62bcd5fd38d8166bc90">SVF::CondManager::falseCond</a></div><div class="ttdeci">static CondExpr * falseCond</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00305">Conditions.h:305</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1CondManager_html_acd773bd9dbf5161e488c827b0b71481d"><div class="ttname"><a href="classSVF_1_1CondManager.html#acd773bd9dbf5161e488c827b0b71481d">SVF::CondManager::extractSubConds</a></div><div class="ttdeci">void extractSubConds(const CondExpr *cond, NodeBS &amp;support) const</div><div class="ttdoc">Extract sub conditions of this expression. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00204">Conditions.cpp:204</a></div></div>
72
72
  <div class="ttc" id="classSVF_1_1BranchCondManager_html_ac6fb7493ceb44406a4bd6a62a60a6363"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#ac6fb7493ceb44406a4bd6a62a60a6363">SVF::BranchCondManager::getTrueCond</a></div><div class="ttdeci">BranchCond * getTrueCond() const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00134">Conditions.h:134</a></div></div>
73
- <div class="ttc" id="classSVF_1_1CondManager_html_a771bda4bb55dd8c95a03f1a74a215126"><div class="ttname"><a href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">SVF::CondManager::sol</a></div><div class="ttdeci">z3::solver sol</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00294">Conditions.h:294</a></div></div>
73
+ <div class="ttc" id="classSVF_1_1CondManager_html_a771bda4bb55dd8c95a03f1a74a215126"><div class="ttname"><a href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">SVF::CondManager::sol</a></div><div class="ttdeci">z3::solver sol</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00303">Conditions.h:303</a></div></div>
74
74
  <div class="ttc" id="Conditions_8h_html"><div class="ttname"><a href="Conditions_8h.html">Conditions.h</a></div></div>
75
75
  <div class="ttc" id="structDdNode_html"><div class="ttname"><a href="structDdNode.html">DdNode</a></div><div class="ttdef"><b>Definition:</b> <a href="cudd_8h_source.html#l00264">cudd.h:264</a></div></div>
76
76
  <div class="ttc" id="namespaceSVF_html_a424cc053c29ad7303699c529d1a2cc71"><div class="ttname"><a href="namespaceSVF.html#a424cc053c29ad7303699c529d1a2cc71">SVF::raw_ostream</a></div><div class="ttdeci">llvm::raw_ostream raw_ostream</div><div class="ttdoc">LLVM outputs. </div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
77
77
  <div class="ttc" id="cudd_8h_html_a352ef8d39e760eaabae6d58d9a5ddbfc"><div class="ttname"><a href="cudd_8h.html#a352ef8d39e760eaabae6d58d9a5ddbfc">Cudd_Not</a></div><div class="ttdeci">#define Cudd_Not(node)</div><div class="ttdef"><b>Definition:</b> <a href="cudd_8h_source.html#l00343">cudd.h:343</a></div></div>
78
- <div class="ttc" id="classSVF_1_1CondManager_html_a385339096b4322654b5b2c7a37e852fe"><div class="ttname"><a href="classSVF_1_1CondManager.html#a385339096b4322654b5b2c7a37e852fe">SVF::CondManager::printDbg</a></div><div class="ttdeci">void printDbg(const CondExpr *e)</div><div class="ttdoc">Print out one particular expression. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00238">Conditions.cpp:238</a></div></div>
78
+ <div class="ttc" id="classSVF_1_1CondManager_html_a385339096b4322654b5b2c7a37e852fe"><div class="ttname"><a href="classSVF_1_1CondManager.html#a385339096b4322654b5b2c7a37e852fe">SVF::CondManager::printDbg</a></div><div class="ttdeci">void printDbg(const CondExpr *e)</div><div class="ttdoc">Print out one particular expression. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00242">Conditions.cpp:242</a></div></div>
79
79
  <div class="ttc" id="classSVF_1_1CondManager_html_ac74f182ef249a7c892ba9c630f889ddc"><div class="ttname"><a href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">SVF::CondManager::getTrueCond</a></div><div class="ttdeci">CondExpr * getTrueCond() const</div><div class="ttdoc">Return the unique true condition. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00226">Conditions.h:226</a></div></div>
80
80
  <div class="ttc" id="classSVF_1_1CondManager_html_ae4ad2a90ac794163060290b6ac1f2949"><div class="ttname"><a href="classSVF_1_1CondManager.html#ae4ad2a90ac794163060290b6ac1f2949">SVF::CondManager::createFreshBranchCond</a></div><div class="ttdeci">CondExpr * createFreshBranchCond(const Instruction *inst)</div><div class="ttdoc">Create a fresh condition to encode each program branch. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00091">Conditions.cpp:91</a></div></div>
81
- <div class="ttc" id="classSVF_1_1CondManager_html_a087773d6ae6ed6af009a356dd7b61e11"><div class="ttname"><a href="classSVF_1_1CondManager.html#a087773d6ae6ed6af009a356dd7b61e11">SVF::CondManager::cxt</a></div><div class="ttdeci">z3::context cxt</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00293">Conditions.h:293</a></div></div>
81
+ <div class="ttc" id="classSVF_1_1CondManager_html_a087773d6ae6ed6af009a356dd7b61e11"><div class="ttname"><a href="classSVF_1_1CondManager.html#a087773d6ae6ed6af009a356dd7b61e11">SVF::CondManager::cxt</a></div><div class="ttdeci">z3::context cxt</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00302">Conditions.h:302</a></div></div>
82
82
  <div class="ttc" id="classSVF_1_1CondManager_html_adef2474c65a7f9d96b27ee670136a240"><div class="ttname"><a href="classSVF_1_1CondManager.html#adef2474c65a7f9d96b27ee670136a240">SVF::CondManager::isEquivalentBranchCond</a></div><div class="ttdeci">bool isEquivalentBranchCond(const CondExpr *lhs, const CondExpr *rhs) const</div><div class="ttdoc">Whether lhs and rhs are equivalent branch conditions. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00264">Conditions.h:264</a></div></div>
83
83
  <div class="ttc" id="cudd_8h_html_afbbecf4f6f78f92518f4d0a477d870b6"><div class="ttname"><a href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a></div><div class="ttdeci">#define Cudd_Regular(node)</div><div class="ttdef"><b>Definition:</b> <a href="cudd_8h_source.html#l00373">cudd.h:373</a></div></div>
84
84
  <div class="ttc" id="namespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00077">SVFBasicTypes.h:77</a></div></div>
85
85
  <div class="ttc" id="SVFUtil_8h_html"><div class="ttname"><a href="SVFUtil_8h.html">SVFUtil.h</a></div></div>
86
- <div class="ttc" id="classSVF_1_1CondManager_html_ac735eb27ed4328f97ced87494683f7f1"><div class="ttname"><a href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">SVF::CondManager::branchCondManager</a></div><div class="ttdeci">BranchCondManager branchCondManager</div><div class="ttdoc">branch condition manager </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00300">Conditions.h:300</a></div></div>
86
+ <div class="ttc" id="classSVF_1_1CondManager_html_ac735eb27ed4328f97ced87494683f7f1"><div class="ttname"><a href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">SVF::CondManager::branchCondManager</a></div><div class="ttdeci">BranchCondManager branchCondManager</div><div class="ttdoc">branch condition manager </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00309">Conditions.h:309</a></div></div>
87
87
  <div class="ttc" id="classSVF_1_1CondManager_html_aa307bb05b92907ccf8859b4bac53b796"><div class="ttname"><a href="classSVF_1_1CondManager.html#aa307bb05b92907ccf8859b4bac53b796">SVF::CondManager::CondManager</a></div><div class="ttdeci">CondManager()</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00046">Conditions.cpp:46</a></div></div>
88
88
  <div class="ttc" id="classSVF_1_1CondManager_html_a4b88160366a7c7b2bf7e2ab632ed04c7"><div class="ttname"><a href="classSVF_1_1CondManager.html#a4b88160366a7c7b2bf7e2ab632ed04c7">SVF::CondManager::AND</a></div><div class="ttdeci">CondExpr * AND(CondExpr *lhs, CondExpr *rhs)</div><div class="ttdoc">Operations on conditions. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00134">Conditions.cpp:134</a></div></div>
89
89
  <div class="ttc" id="cudd_8h_html_adfbb2fd5b9c884df0d684a86dc26a97d"><div class="ttname"><a href="cudd_8h.html#adfbb2fd5b9c884df0d684a86dc26a97d">Cudd_bddAndLimit</a></div><div class="ttdeci">DdNode * Cudd_bddAndLimit(DdManager *dd, DdNode *f, DdNode *g, unsigned int limit)</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8c_source.html#l03146">cuddInt.c:3146</a></div></div>
@@ -91,30 +91,32 @@ $(function() {
91
91
  <div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
92
92
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a077caa1b10ab84d101d79fc7ea50db2d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">SVF::SVFUtil::writeWrnMsg</a></div><div class="ttdeci">void writeWrnMsg(std::string msg)</div><div class="ttdoc">Writes a message run through wrnMsg. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00069">SVFUtil.cpp:69</a></div></div>
93
93
  <div class="ttc" id="classSVF_1_1CondExpr_html"><div class="ttname"><a href="classSVF_1_1CondExpr.html">SVF::CondExpr</a></div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00042">Conditions.h:42</a></div></div>
94
- <div class="ttc" id="classSVF_1_1BranchCondManager_html_aa241ee8c9d8ef17029dba67b737d8beb"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#aa241ee8c9d8ef17029dba67b737d8beb">SVF::BranchCondManager::extractSubConds</a></div><div class="ttdeci">void extractSubConds(BranchCond *f, NodeBS &amp;support) const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00350">Conditions.cpp:350</a></div></div>
95
- <div class="ttc" id="classSVF_1_1BranchCondManager_html_ad7832b33b3b73fcaca5c8278ed4d3e7f"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#ad7832b33b3b73fcaca5c8278ed4d3e7f">SVF::BranchCondManager::NEG</a></div><div class="ttdeci">BranchCond * NEG(BranchCond *lhs)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00309">Conditions.cpp:309</a></div></div>
94
+ <div class="ttc" id="classSVF_1_1BranchCondManager_html_aa241ee8c9d8ef17029dba67b737d8beb"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#aa241ee8c9d8ef17029dba67b737d8beb">SVF::BranchCondManager::extractSubConds</a></div><div class="ttdeci">void extractSubConds(BranchCond *f, NodeBS &amp;support) const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00354">Conditions.cpp:354</a></div></div>
95
+ <div class="ttc" id="classSVF_1_1BranchCondManager_html_ad7832b33b3b73fcaca5c8278ed4d3e7f"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#ad7832b33b3b73fcaca5c8278ed4d3e7f">SVF::BranchCondManager::NEG</a></div><div class="ttdeci">BranchCond * NEG(BranchCond *lhs)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00313">Conditions.cpp:313</a></div></div>
96
96
  <div class="ttc" id="cuddInt_8c_html_ab69f928c3cca42f5b1330803de1d9199"><div class="ttname"><a href="cuddInt_8c.html#ab69f928c3cca42f5b1330803de1d9199">ddClearFlag</a></div><div class="ttdeci">static void ddClearFlag(DdNode *f)</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8c_source.html#l23821">cuddInt.c:23821</a></div></div>
97
97
  <div class="ttc" id="classSVF_1_1CondManager_html_ab9772aa1a35e963ccc9ce1007ebc1310"><div class="ttname"><a href="classSVF_1_1CondManager.html#ab9772aa1a35e963ccc9ce1007ebc1310">SVF::CondManager::printModel</a></div><div class="ttdeci">void printModel()</div><div class="ttdoc">Dump out all expressions. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00179">Conditions.cpp:179</a></div></div>
98
98
  <div class="ttc" id="cudd_8h_html_a35322518c24f65f44eda9623083cb62c"><div class="ttname"><a href="cudd_8h.html#a35322518c24f65f44eda9623083cb62c">Cudd_IsComplement</a></div><div class="ttdeci">#define Cudd_IsComplement(node)</div><div class="ttdef"><b>Definition:</b> <a href="cudd_8h_source.html#l00401">cudd.h:401</a></div></div>
99
99
  <div class="ttc" id="classSVF_1_1CondManager_html_a5751792e45c8abd5ffd3610d94e9f0b7"><div class="ttname"><a href="classSVF_1_1CondManager.html#a5751792e45c8abd5ffd3610d94e9f0b7">SVF::CondManager::NEG</a></div><div class="ttdeci">CondExpr * NEG(CondExpr *lhs)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00163">Conditions.cpp:163</a></div></div>
100
- <div class="ttc" id="classSVF_1_1CondManager_html_afd01891f45e085e990c9dbba5cbf3914"><div class="ttname"><a href="classSVF_1_1CondManager.html#afd01891f45e085e990c9dbba5cbf3914">SVF::CondManager::branchCondToCondExpr</a></div><div class="ttdeci">BranchCondToCondExprMap branchCondToCondExpr</div><div class="ttdoc">map branch condition to its Condition wrapper </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00298">Conditions.h:298</a></div></div>
100
+ <div class="ttc" id="classSVF_1_1CondManager_html_afd01891f45e085e990c9dbba5cbf3914"><div class="ttname"><a href="classSVF_1_1CondManager.html#afd01891f45e085e990c9dbba5cbf3914">SVF::CondManager::branchCondToCondExpr</a></div><div class="ttdeci">BranchCondToCondExprMap branchCondToCondExpr</div><div class="ttdoc">map branch condition to its Condition wrapper </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00307">Conditions.h:307</a></div></div>
101
101
  <div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00079">BasicTypes.h:79</a></div></div>
102
102
  <div class="ttc" id="classSVF_1_1Options_html_a344ca0e4b8d9159836e558aed44be1b4"><div class="ttname"><a href="classSVF_1_1Options.html#a344ca0e4b8d9159836e558aed44be1b4">SVF::Options::MaxBddSize</a></div><div class="ttdeci">static const llvm::cl::opt&lt; unsigned &gt; MaxBddSize</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00217">Options.h:217</a></div></div>
103
103
  <div class="ttc" id="structDdNode_html_a9422352d3b46de31b325d1cf18b9f25f"><div class="ttname"><a href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">DdNode::next</a></div><div class="ttdeci">DdNode * next</div><div class="ttdef"><b>Definition:</b> <a href="cudd_8h_source.html#l00267">cudd.h:267</a></div></div>
104
- <div class="ttc" id="classSVF_1_1BranchCondManager_html_a7f3fa5e90c08950099ff6f05e96ecb9c"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a7f3fa5e90c08950099ff6f05e96ecb9c">SVF::BranchCondManager::OR</a></div><div class="ttdeci">BranchCond * OR(BranchCond *lhs, BranchCond *rhs)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00284">Conditions.cpp:284</a></div></div>
104
+ <div class="ttc" id="classSVF_1_1BranchCondManager_html_a7f3fa5e90c08950099ff6f05e96ecb9c"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a7f3fa5e90c08950099ff6f05e96ecb9c">SVF::BranchCondManager::OR</a></div><div class="ttdeci">BranchCond * OR(BranchCond *lhs, BranchCond *rhs)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00288">Conditions.cpp:288</a></div></div>
105
105
  <div class="ttc" id="classSVF_1_1CondManager_html_a1e48008a3fe3a562512e253133aa557f"><div class="ttname"><a href="classSVF_1_1CondManager.html#a1e48008a3fe3a562512e253133aa557f">SVF::CondManager::condMgr</a></div><div class="ttdeci">static CondManager * condMgr</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00184">Conditions.h:184</a></div></div>
106
106
  <div class="ttc" id="classSVF_1_1CondManager_html_a1fbf7dd446309e13671d838c91da26bf"><div class="ttname"><a href="classSVF_1_1CondManager.html#a1fbf7dd446309e13671d838c91da26bf">SVF::CondManager::setCondInst</a></div><div class="ttdeci">void setCondInst(const CondExpr *cond, const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00286">Conditions.h:286</a></div></div>
107
107
  <div class="ttc" id="cuddInt_8h_html_aa5cad999b2a4a3dbbfe5c1da1d8bc028"><div class="ttname"><a href="cuddInt_8h.html#aa5cad999b2a4a3dbbfe5c1da1d8bc028">cuddIsConstant</a></div><div class="ttdeci">#define cuddIsConstant(node)</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8h_source.html#l00593">cuddInt.h:593</a></div></div>
108
+ <div class="ttc" id="classSVF_1_1CondManager_html_ad1de136dbd62c3b9a7447222bd0890fa"><div class="ttname"><a href="classSVF_1_1CondManager.html#ad1de136dbd62c3b9a7447222bd0890fa">SVF::CondManager::isNegCond</a></div><div class="ttdeci">bool isNegCond(const CondExpr *cond) const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00296">Conditions.h:296</a></div></div>
108
109
  <div class="ttc" id="cudd_8h_html_ac4575f4314998362765264f64eccfe0c"><div class="ttname"><a href="cudd_8h.html#ac4575f4314998362765264f64eccfe0c">Cudd_Complement</a></div><div class="ttdeci">#define Cudd_Complement(node)</div><div class="ttdef"><b>Definition:</b> <a href="cudd_8h_source.html#l00387">cudd.h:387</a></div></div>
109
- <div class="ttc" id="classSVF_1_1CondManager_html_a725d9c0a3aad4ebea3f06edf433f04ea"><div class="ttname"><a href="classSVF_1_1CondManager.html#a725d9c0a3aad4ebea3f06edf433f04ea">SVF::CondManager::isSatisfiable</a></div><div class="ttdeci">bool isSatisfiable(const CondExpr *cond)</div><div class="ttdoc">Whether the condition is satisfiable. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00218">Conditions.cpp:218</a></div></div>
110
+ <div class="ttc" id="classSVF_1_1CondManager_html_a725d9c0a3aad4ebea3f06edf433f04ea"><div class="ttname"><a href="classSVF_1_1CondManager.html#a725d9c0a3aad4ebea3f06edf433f04ea">SVF::CondManager::isSatisfiable</a></div><div class="ttdeci">bool isSatisfiable(const CondExpr *cond)</div><div class="ttdoc">Whether the condition is satisfiable. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00222">Conditions.cpp:222</a></div></div>
110
111
  <div class="ttc" id="cuddInt_8h_html_a09834c697b92ac296b1e50c863f88262"><div class="ttname"><a href="cuddInt_8h.html#a09834c697b92ac296b1e50c863f88262">cuddT</a></div><div class="ttdeci">#define cuddT(node)</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8h_source.html#l00609">cuddInt.h:609</a></div></div>
111
- <div class="ttc" id="classSVF_1_1BranchCondManager_html_a739f4206abf4f367dc796e9fd35d4d04"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a739f4206abf4f367dc796e9fd35d4d04">SVF::BranchCondManager::AND</a></div><div class="ttdeci">BranchCond * AND(BranchCond *lhs, BranchCond *rhs)</div><div class="ttdoc">Operations on conditions. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00256">Conditions.cpp:256</a></div></div>
112
+ <div class="ttc" id="classSVF_1_1BranchCondManager_html_a739f4206abf4f367dc796e9fd35d4d04"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a739f4206abf4f367dc796e9fd35d4d04">SVF::BranchCondManager::AND</a></div><div class="ttdeci">BranchCond * AND(BranchCond *lhs, BranchCond *rhs)</div><div class="ttdoc">Operations on conditions. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00260">Conditions.cpp:260</a></div></div>
112
113
  <div class="ttc" id="classSVF_1_1CondManager_html_a8a9d3d96c2c8cfef8b9d9c27c28871f6"><div class="ttname"><a href="classSVF_1_1CondManager.html#a8a9d3d96c2c8cfef8b9d9c27c28871f6">SVF::CondManager::getMemUsage</a></div><div class="ttdeci">std::string getMemUsage()</div><div class="ttdoc">Return memory usage for this condition manager. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00193">Conditions.cpp:193</a></div></div>
113
- <div class="ttc" id="classSVF_1_1CondManager_html_a3621c17b2ff1beb7aa4e467ec357713b"><div class="ttname"><a href="classSVF_1_1CondManager.html#a3621c17b2ff1beb7aa4e467ec357713b">SVF::CondManager::allocatedConds</a></div><div class="ttdeci">IDToCondExprMap allocatedConds</div><div class="ttdoc">map condition id (z3 ast id) to its Condition wrapper </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00297">Conditions.h:297</a></div></div>
114
+ <div class="ttc" id="classSVF_1_1CondManager_html_a3621c17b2ff1beb7aa4e467ec357713b"><div class="ttname"><a href="classSVF_1_1CondManager.html#a3621c17b2ff1beb7aa4e467ec357713b">SVF::CondManager::allocatedConds</a></div><div class="ttdeci">IDToCondExprMap allocatedConds</div><div class="ttdoc">map condition id (z3 ast id) to its Condition wrapper </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00306">Conditions.h:306</a></div></div>
114
115
  <div class="ttc" id="classSVF_1_1CondManager_html_ac246b92ebdf6a9635ed79892b81b9ae8"><div class="ttname"><a href="classSVF_1_1CondManager.html#ac246b92ebdf6a9635ed79892b81b9ae8">SVF::CondManager::getCond</a></div><div class="ttdeci">CondExpr * getCond(u32_t id) const</div><div class="ttdoc">Get condition using condition id (z3 ast id) </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00272">Conditions.h:272</a></div></div>
115
- <div class="ttc" id="classSVF_1_1BranchCondManager_html_a2f745f39ea76d3cce7581cd4e260561d"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a2f745f39ea76d3cce7581cd4e260561d">SVF::BranchCondManager::dump</a></div><div class="ttdeci">void dump(BranchCond *lhs, raw_ostream &amp;O)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00359">Conditions.cpp:359</a></div></div>
116
+ <div class="ttc" id="classSVF_1_1CondManager_html_a049541fec44cac3401a0dc68ff2f0ac1"><div class="ttname"><a href="classSVF_1_1CondManager.html#a049541fec44cac3401a0dc68ff2f0ac1">SVF::CondManager::setNegCondInst</a></div><div class="ttdeci">void setNegCondInst(const CondExpr *cond, const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00291">Conditions.h:291</a></div></div>
117
+ <div class="ttc" id="classSVF_1_1BranchCondManager_html_a2f745f39ea76d3cce7581cd4e260561d"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a2f745f39ea76d3cce7581cd4e260561d">SVF::BranchCondManager::dump</a></div><div class="ttdeci">void dump(BranchCond *lhs, raw_ostream &amp;O)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00363">Conditions.cpp:363</a></div></div>
116
118
  <div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
117
- <div class="ttc" id="classSVF_1_1BranchCondManager_html_a94f84201f91b7175907e72af2633f6f2"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a94f84201f91b7175907e72af2633f6f2">SVF::BranchCondManager::BddSupportStep</a></div><div class="ttdeci">void BddSupportStep(BranchCond *f, NodeBS &amp;support) const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00337">Conditions.cpp:337</a></div></div>
119
+ <div class="ttc" id="classSVF_1_1BranchCondManager_html_a94f84201f91b7175907e72af2633f6f2"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a94f84201f91b7175907e72af2633f6f2">SVF::BranchCondManager::BddSupportStep</a></div><div class="ttdeci">void BddSupportStep(BranchCond *f, NodeBS &amp;support) const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00341">Conditions.cpp:341</a></div></div>
118
120
  <div class="ttc" id="classSVF_1_1CondManager_html_af167e75fab5f61b18bff296075c107d1"><div class="ttname"><a href="classSVF_1_1CondManager.html#af167e75fab5f61b18bff296075c107d1">SVF::CondManager::getCondNumber</a></div><div class="ttdeci">u32_t getCondNumber()</div><div class="ttdoc">Return the number of condition expressions. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00128">Conditions.cpp:128</a></div></div>
119
121
  <div class="ttc" id="classSVF_1_1BranchCondManager_html_a013eb66493beb2b1d004605c68894a95"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a013eb66493beb2b1d004605c68894a95">SVF::BranchCondManager::getFalseCond</a></div><div class="ttdeci">BranchCond * getFalseCond() const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00138">Conditions.h:138</a></div></div>
120
122
  <div class="ttc" id="classSVF_1_1CondExpr_html_ac83903c62554c6f91812d79d23ec4e23"><div class="ttname"><a href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">SVF::CondExpr::getExpr</a></div><div class="ttdeci">const z3::expr &amp; getExpr() const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00055">Conditions.h:55</a></div></div>
@@ -127,15 +129,15 @@ $(function() {
127
129
  <div class="ttc" id="classSVF_1_1CondManager_html_aeb4f9f4968f57602d12225757073f0f8"><div class="ttname"><a href="classSVF_1_1CondManager.html#aeb4f9f4968f57602d12225757073f0f8">SVF::CondManager::simplify</a></div><div class="ttdeci">z3::expr simplify(const z3::expr &amp;expr) const</div><div class="ttdoc">Preprocess the condition, e.g., Compressing using And-Inverter-Graph. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00069">Conditions.cpp:69</a></div></div>
128
130
  <div class="ttc" id="classSVF_1_1CondManager_html_a39e9d42cb3661d1c686b5163c70eeade"><div class="ttname"><a href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">SVF::CondManager::getFalseCond</a></div><div class="ttdeci">CondExpr * getFalseCond() const</div><div class="ttdoc">Return the unique false condition. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00231">Conditions.h:231</a></div></div>
129
131
  <div class="ttc" id="classSVF_1_1CondManager_html_a83824b36d6cd073a171df9919aa0c704"><div class="ttname"><a href="classSVF_1_1CondManager.html#a83824b36d6cd073a171df9919aa0c704">SVF::CondManager::OR</a></div><div class="ttdeci">CondExpr * OR(CondExpr *lhs, CondExpr *rhs)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00149">Conditions.cpp:149</a></div></div>
130
- <div class="ttc" id="classSVF_1_1BranchCondManager_html_a930ece842bcdab283fb27e2a053bc8de"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a930ece842bcdab283fb27e2a053bc8de">SVF::BranchCondManager::dumpStr</a></div><div class="ttdeci">std::string dumpStr(BranchCond *lhs) const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00379">Conditions.cpp:379</a></div></div>
132
+ <div class="ttc" id="classSVF_1_1BranchCondManager_html_a930ece842bcdab283fb27e2a053bc8de"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a930ece842bcdab283fb27e2a053bc8de">SVF::BranchCondManager::dumpStr</a></div><div class="ttdeci">std::string dumpStr(BranchCond *lhs) const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00383">Conditions.cpp:383</a></div></div>
131
133
  <div class="ttc" id="cudd_8h_html_a3d0d9959640235fc073699c776914fca"><div class="ttname"><a href="cudd_8h.html#a3d0d9959640235fc073699c776914fca">Cudd_Ref</a></div><div class="ttdeci">void Cudd_Ref(DdNode *n)</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8c_source.html#l14002">cuddInt.c:14002</a></div></div>
132
- <div class="ttc" id="classSVF_1_1CondManager_html_a907afafc19d8faa7a200bf4f1e07bb4f"><div class="ttname"><a href="classSVF_1_1CondManager.html#a907afafc19d8faa7a200bf4f1e07bb4f">SVF::CondManager::dumpStr</a></div><div class="ttdeci">std::string dumpStr(const CondExpr *e) const</div><div class="ttdoc">Return string format of this expression. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00246">Conditions.cpp:246</a></div></div>
133
- <div class="ttc" id="classSVF_1_1CondManager_html_aed854ecc55a568597f7d7f1f78fb92f4"><div class="ttname"><a href="classSVF_1_1CondManager.html#aed854ecc55a568597f7d7f1f78fb92f4">SVF::CondManager::trueCond</a></div><div class="ttdeci">static CondExpr * trueCond</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00295">Conditions.h:295</a></div></div>
134
+ <div class="ttc" id="classSVF_1_1CondManager_html_a907afafc19d8faa7a200bf4f1e07bb4f"><div class="ttname"><a href="classSVF_1_1CondManager.html#a907afafc19d8faa7a200bf4f1e07bb4f">SVF::CondManager::dumpStr</a></div><div class="ttdeci">std::string dumpStr(const CondExpr *e) const</div><div class="ttdoc">Return string format of this expression. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00250">Conditions.cpp:250</a></div></div>
135
+ <div class="ttc" id="classSVF_1_1CondManager_html_aed854ecc55a568597f7d7f1f78fb92f4"><div class="ttname"><a href="classSVF_1_1CondManager.html#aed854ecc55a568597f7d7f1f78fb92f4">SVF::CondManager::trueCond</a></div><div class="ttdeci">static CondExpr * trueCond</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00304">Conditions.h:304</a></div></div>
134
136
  <div class="ttc" id="classSVF_1_1CondManager_html_a5677513376a78707de664c1cc85805aa"><div class="ttname"><a href="classSVF_1_1CondManager.html#a5677513376a78707de664c1cc85805aa">SVF::CondManager::~CondManager</a></div><div class="ttdeci">~CondManager()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00057">Conditions.cpp:57</a></div></div>
135
- <div class="ttc" id="classSVF_1_1BranchCondManager_html_a513a9865b87af136edf1abb1932716dd"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a513a9865b87af136edf1abb1932716dd">SVF::BranchCondManager::ddClearFlag</a></div><div class="ttdeci">void ddClearFlag(BranchCond *f) const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00324">Conditions.cpp:324</a></div></div>
137
+ <div class="ttc" id="classSVF_1_1BranchCondManager_html_a513a9865b87af136edf1abb1932716dd"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a513a9865b87af136edf1abb1932716dd">SVF::BranchCondManager::ddClearFlag</a></div><div class="ttdeci">void ddClearFlag(BranchCond *f) const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00328">Conditions.cpp:328</a></div></div>
136
138
  <div class="ttc" id="classSVF_1_1BranchCondExpr_html"><div class="ttname"><a href="classSVF_1_1BranchCondExpr.html">SVF::BranchCondExpr</a></div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00079">Conditions.h:79</a></div></div>
137
139
  <div class="ttc" id="classSVF_1_1CondManager_html_a0ca23ef4850f9be8abf303eafd104dab"><div class="ttname"><a href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab">SVF::CondManager::getOrAddBranchCond</a></div><div class="ttdeci">CondExpr * getOrAddBranchCond(const z3::expr &amp;e, BranchCond *branchCond)</div><div class="ttdoc">Get or add a single branch condition, e.g., when doing condition conjunction. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00113">Conditions.cpp:113</a></div></div>
138
- <div class="ttc" id="classSVF_1_1CondManager_html_a6151817a6f671fa1e7814e74f7ce2e51"><div class="ttname"><a href="classSVF_1_1CondManager.html#a6151817a6f671fa1e7814e74f7ce2e51">SVF::CondManager::isAllPathReachable</a></div><div class="ttdeci">bool isAllPathReachable(const CondExpr *e)</div><div class="ttdoc">Whether All Paths are reachable. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00231">Conditions.cpp:231</a></div></div>
140
+ <div class="ttc" id="classSVF_1_1CondManager_html_a6151817a6f671fa1e7814e74f7ce2e51"><div class="ttname"><a href="classSVF_1_1CondManager.html#a6151817a6f671fa1e7814e74f7ce2e51">SVF::CondManager::isAllPathReachable</a></div><div class="ttdeci">bool isAllPathReachable(const CondExpr *e)</div><div class="ttdoc">Whether All Paths are reachable. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00235">Conditions.cpp:235</a></div></div>
139
141
  <div class="ttc" id="classSVF_1_1CondManager_html"><div class="ttname"><a href="classSVF_1_1CondManager.html">SVF::CondManager</a></div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00181">Conditions.h:181</a></div></div>
140
142
  </div><!-- fragment --></div><!-- contents -->
141
143
  <!-- start footer part -->