svf-tools 1.0.507 → 1.0.508
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.
- package/SVF-doxygen/html/html/ExeState_8cpp_source.html +14 -15
- package/SVF-doxygen/html/html/ExeState_8h_source.html +16 -16
- package/SVF-doxygen/html/html/ProgSlice_8h_source.html +4 -4
- package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +28 -30
- package/SVF-doxygen/html/html/SaberCondAllocator_8h_source.html +33 -33
- package/SVF-doxygen/html/html/Z3Expr_8cpp_source.html +13 -12
- package/SVF-doxygen/html/html/Z3Expr_8h_source.html +48 -47
- package/SVF-doxygen/html/html/classSVF_1_1ExeState.html +33 -33
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SaberCondAllocator.html +91 -91
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Z3Expr-members.html +13 -12
- package/SVF-doxygen/html/html/classSVF_1_1Z3Expr.html +148 -115
- package/SVF-doxygen/html/html/functions_c.html +1 -1
- package/SVF-doxygen/html/html/functions_func_r.html +6 -3
- package/SVF-doxygen/html/html/functions_o.html +3 -3
- package/SVF-doxygen/html/html/functions_p.html +10 -6
- package/SVF-doxygen/html/html/functions_r.html +10 -11
- package/SVF-doxygen/html/html/functions_s.html +8 -10
- package/SVF-doxygen/html/html/functions_t.html +10 -8
- package/SVF-doxygen/html/html/functions_v.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_c.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_s.html +1 -1
- package/SVF-doxygen/html/html/search/all_10.js +4 -4
- package/SVF-doxygen/html/html/search/all_11.js +4 -3
- package/SVF-doxygen/html/html/search/all_12.js +6 -6
- package/SVF-doxygen/html/html/search/all_13.js +4 -4
- package/SVF-doxygen/html/html/search/all_14.js +1 -1
- package/SVF-doxygen/html/html/search/all_15.js +2 -2
- package/SVF-doxygen/html/html/search/all_16.js +1 -1
- package/SVF-doxygen/html/html/search/all_3.js +1 -1
- package/SVF-doxygen/html/html/search/all_9.js +1 -1
- package/SVF-doxygen/html/html/search/all_b.js +1 -1
- package/SVF-doxygen/html/html/search/all_c.js +1 -1
- package/SVF-doxygen/html/html/search/all_e.js +1 -1
- package/SVF-doxygen/html/html/search/all_f.js +1 -1
- package/SVF-doxygen/html/html/search/functions_10.js +1 -0
- package/SVF-doxygen/html/html/search/functions_f.js +1 -1
- package/SVF-doxygen/html/html/search/variables_12.js +1 -1
- package/SVF-doxygen/html/html/search/variables_13.js +2 -2
- package/SVF-doxygen/html/html/search/variables_14.js +1 -1
- package/SVF-doxygen/html/html/search/variables_3.js +1 -1
- package/SVF-doxygen/html/html/search/variables_9.js +1 -1
- package/SVF-doxygen/html/html/search/variables_c.js +1 -1
- package/SVF-doxygen/html/html/search/variables_e.js +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1ExeState_01_4.html +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1Z3Expr_01_4.html +3 -3
- package/include/Util/Z3Expr.h +4 -1
- package/lib/SABER/SaberCondAllocator.cpp +0 -2
- package/lib/Util/ExeState.cpp +0 -1
- package/lib/Util/Z3Expr.cpp +15 -1
- package/package.json +1 -1
|
@@ -452,8 +452,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
452
452
|
|
|
453
453
|
<p>Constructor. </p>
|
|
454
454
|
|
|
455
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
456
|
-
<div class="fragment"><div class="line"><a name="
|
|
455
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00050">50</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
456
|
+
<div class="fragment"><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> }</div></div><!-- fragment -->
|
|
457
457
|
</div>
|
|
458
458
|
</div>
|
|
459
459
|
<a id="a009db4214557cbe2ff53b81f0519fbcd"></a>
|
|
@@ -505,14 +505,14 @@ Static Private Attributes</h2></td></tr>
|
|
|
505
505
|
<p>Perform path allocation. </p>
|
|
506
506
|
<p>Allocate path condition for each branch </p>
|
|
507
507
|
|
|
508
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
509
|
-
<div class="fragment"><div class="line"><a name="
|
|
508
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00058">58</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
509
|
+
<div class="fragment"><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"path condition allocation starts\n"</span>));</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &func: *M)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVFUtil::isExtCall</a>(func))</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="comment">// Allocate conditions for a program.</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">for</span> (Function::const_iterator bit = func->getLLVMFun()->begin(), ebit = func->getLLVMFun()->end();</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  bit != ebit; ++bit)</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> &bb = *bit;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#adcb9b49512179e016765b50277fc058f">collectBBCallingProgExit</a>(bb);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6e1f93e7f0a5f9f78aa199982b698f9f">allocateForBB</a>(bb);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  }</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  }</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ae6b763ff293381ed5da9b07c2e8ae496">Options::PrintPathCond</a>)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a389fd522c1de5b4feed34f29b9709d03">printPathCond</a>();</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"path condition allocation ends\n"</span>));</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> }</div><div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00071">BasicTypes.h:71</a></div></div>
|
|
510
510
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a609eea630a8f88fe9eaba15ce7e48738"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVF::SVFUtil::pasMsg</a></div><div class="ttdeci">std::string pasMsg(std::string msg)</div><div class="ttdoc">Print each pass/phase message by converting a string into blue string output. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00099">SVFUtil.cpp:99</a></div></div>
|
|
511
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a389fd522c1de5b4feed34f29b9709d03"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a389fd522c1de5b4feed34f29b9709d03">SVF::SaberCondAllocator::printPathCond</a></div><div class="ttdeci">void printPathCond()</div><div class="ttdoc">Print out the path condition information. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
512
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_adcb9b49512179e016765b50277fc058f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#adcb9b49512179e016765b50277fc058f">SVF::SaberCondAllocator::collectBBCallingProgExit</a></div><div class="ttdeci">void collectBBCallingProgExit(const BasicBlock &bb)</div><div class="ttdoc">Collect basic block contains program exit function call. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
511
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a389fd522c1de5b4feed34f29b9709d03"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a389fd522c1de5b4feed34f29b9709d03">SVF::SaberCondAllocator::printPathCond</a></div><div class="ttdeci">void printPathCond()</div><div class="ttdoc">Print out the path condition information. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00564">SaberCondAllocator.cpp:564</a></div></div>
|
|
512
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_adcb9b49512179e016765b50277fc058f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#adcb9b49512179e016765b50277fc058f">SVF::SaberCondAllocator::collectBBCallingProgExit</a></div><div class="ttdeci">void collectBBCallingProgExit(const BasicBlock &bb)</div><div class="ttdoc">Collect basic block contains program exit function call. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00415">SaberCondAllocator.cpp:415</a></div></div>
|
|
513
513
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
|
|
514
514
|
<div class="ttc" id="SVFBasicTypes_8h_html_a2c64190a065f342897573a3ef4973adb"><div class="ttname"><a href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a></div><div class="ttdeci">#define DGENERAL</div><div class="ttdoc">General debug flag is for each phase of a pass, it is often in a colorful output format. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00160">SVFBasicTypes.h:160</a></div></div>
|
|
515
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a6e1f93e7f0a5f9f78aa199982b698f9f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a6e1f93e7f0a5f9f78aa199982b698f9f">SVF::SaberCondAllocator::allocateForBB</a></div><div class="ttdeci">virtual void allocateForBB(const BasicBlock &bb)</div><div class="ttdoc">Allocate path condition for every basic block. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
515
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a6e1f93e7f0a5f9f78aa199982b698f9f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a6e1f93e7f0a5f9f78aa199982b698f9f">SVF::SaberCondAllocator::allocateForBB</a></div><div class="ttdeci">virtual void allocateForBB(const BasicBlock &bb)</div><div class="ttdoc">Allocate path condition for every basic block. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00086">SaberCondAllocator.cpp:86</a></div></div>
|
|
516
516
|
<div class="ttc" id="SVFBasicTypes_8h_html_a173ce1b9b505fdadf5613b663749d3b0"><div class="ttname"><a href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a></div><div class="ttdeci">#define DBOUT(TYPE, X)</div><div class="ttdoc">LLVM debug macros, define type of your DEBUG model of each pass. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00155">SVFBasicTypes.h:155</a></div></div>
|
|
517
517
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a22ef185e767ff76c098e75126c885400"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVF::SVFUtil::isExtCall</a></div><div class="ttdeci">bool isExtCall(const SVFFunction *fun)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00358">SVFUtil.h:358</a></div></div>
|
|
518
518
|
<div class="ttc" id="classSVF_1_1Options_html_ae6b763ff293381ed5da9b07c2e8ae496"><div class="ttname"><a href="classSVF_1_1Options.html#ae6b763ff293381ed5da9b07c2e8ae496">SVF::Options::PrintPathCond</a></div><div class="ttdeci">static const llvm::cl::opt< bool > PrintPathCond</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00224">Options.h:224</a></div></div>
|
|
@@ -547,8 +547,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
547
547
|
<p>Allocate conditions for a basic block and propagate its condition to its successors. </p>
|
|
548
548
|
<p>TODO: handle BranchInst and SwitchInst individually here!! </p>
|
|
549
549
|
|
|
550
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
551
|
-
<div class="fragment"><div class="line"><a name="
|
|
550
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00086">86</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
551
|
+
<div class="fragment"><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> {</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> succ_number = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6d9205380948e1bd00708581a64301e1">getBBSuccessorNum</a>(&bb);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="comment">// if successor number greater than 1, allocate new decision variable for successors</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">if</span> (succ_number > 1)</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="comment">//allocate log2(num_succ) decision variables</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordtype">double</span> num = log(succ_number) / log(2);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> bit_num = (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>) ceil(num);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> succ_index = 0;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  std::vector<Condition> condVec;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < bit_num; i++)</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  condVec.push_back(<a class="code" href="classSVF_1_1SaberCondAllocator.html#a5a39b2efcec1c77e7f06dda7b64c9765">newCond</a>(bb.getTerminator()));</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="comment">// iterate each successor</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">succ_const_iterator</a> succ_it = succ_begin(&bb);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  succ_it != succ_end(&bb);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  succ_it++, succ_index++)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ = *succ_it;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> path_cond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="comment">// for each successor decide its bit representation</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="comment">// decide whether each bit of succ_index is 1 or 0, if (three successor) succ_index is 000 then use C1^C2^C3</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="comment">// if 001 use C1^C2^negC3</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j < bit_num; j++)</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="comment">//test each bit of this successor's index (binary representation)</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> tool = 0x01 << j;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">if</span> (tool & succ_index)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  path_cond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">condAnd</a>(path_cond, (<a class="code" href="classSVF_1_1SaberCondAllocator.html#a620d53b9af8dd30523c478f4e9655817">condNeg</a>(condVec.at(j))));</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  path_cond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">condAnd</a>(path_cond, condVec.at(j));</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#af3d224fdc92de272363f411b8f8c2a09">setBranchCond</a>(&bb, succ, path_cond);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  }</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> }</div><div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00071">BasicTypes.h:71</a></div></div>
|
|
552
552
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab4eba98cf7306c89e40975c766d5bf65"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">SVF::SaberCondAllocator::Condition</a></div><div class="ttdeci">Z3Expr Condition</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00052">SaberCondAllocator.h:52</a></div></div>
|
|
553
553
|
<div class="ttc" id="namespaceSVF_html_a3436a988bf80c021cd8022fb445b66d5"><div class="ttname"><a href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">SVF::succ_const_iterator</a></div><div class="ttdeci">llvm::succ_const_iterator succ_const_iterator</div><div class="ttdoc">LLVM Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00118">BasicTypes.h:118</a></div></div>
|
|
554
554
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
|
|
@@ -556,8 +556,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
556
556
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a79682a4e4da23d0eaf0066a91c2f7bd4"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">SVF::SaberCondAllocator::condAnd</a></div><div class="ttdeci">Condition condAnd(const Condition &lhs, const Condition &rhs)</div><div class="ttdoc">Condition operations. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00083">SaberCondAllocator.h:83</a></div></div>
|
|
557
557
|
<div class="ttc" id="namespaceSVF_1_1LLVMUtil_html_a6d9205380948e1bd00708581a64301e1"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a6d9205380948e1bd00708581a64301e1">SVF::LLVMUtil::getBBSuccessorNum</a></div><div class="ttdeci">u32_t getBBSuccessorNum(const BasicBlock *BB)</div><div class="ttdoc">Get num of BB&#39;s successors. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00389">LLVMUtil.cpp:389</a></div></div>
|
|
558
558
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab9d7f1f5c5f22b190ec34255dead41b3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">SVF::SaberCondAllocator::getTrueCond</a></div><div class="ttdeci">Condition getTrueCond() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00095">SaberCondAllocator.h:95</a></div></div>
|
|
559
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a5a39b2efcec1c77e7f06dda7b64c9765"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a5a39b2efcec1c77e7f06dda7b64c9765">SVF::SaberCondAllocator::newCond</a></div><div class="ttdeci">Condition newCond(const Instruction *inst)</div><div class="ttdoc">Allocate a new condition. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
560
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_af3d224fdc92de272363f411b8f8c2a09"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#af3d224fdc92de272363f411b8f8c2a09">SVF::SaberCondAllocator::setBranchCond</a></div><div class="ttdeci">void setBranchCond(const BasicBlock *bb, const BasicBlock *succ, const Condition &cond)</div><div class="ttdoc">Get/Set a branch condition, and its terminator instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
559
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a5a39b2efcec1c77e7f06dda7b64c9765"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a5a39b2efcec1c77e7f06dda7b64c9765">SVF::SaberCondAllocator::newCond</a></div><div class="ttdeci">Condition newCond(const Instruction *inst)</div><div class="ttdoc">Allocate a new condition. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00591">SaberCondAllocator.cpp:591</a></div></div>
|
|
560
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_af3d224fdc92de272363f411b8f8c2a09"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#af3d224fdc92de272363f411b8f8c2a09">SVF::SaberCondAllocator::setBranchCond</a></div><div class="ttdeci">void setBranchCond(const BasicBlock *bb, const BasicBlock *succ, const Condition &cond)</div><div class="ttdoc">Get/Set a branch condition, and its terminator instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00168">SaberCondAllocator.cpp:168</a></div></div>
|
|
561
561
|
</div><!-- fragment -->
|
|
562
562
|
</div>
|
|
563
563
|
</div>
|
|
@@ -616,8 +616,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
616
616
|
<p>Collect basic block contains program exit function call. </p>
|
|
617
617
|
<p>Whether this basic block contains program exit function call </p>
|
|
618
618
|
|
|
619
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
620
|
-
<div class="fragment"><div class="line"><a name="
|
|
619
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00415">415</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
620
|
+
<div class="fragment"><div class="line"><a name="l00416"></a><span class="lineno"> 416</span> {</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span> </div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keywordflow">for</span> (BasicBlock::const_iterator it = bb.begin(), eit = bb.end(); it != eit; it++)</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  {</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst = &*it;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a2e08ce822223842fa6a73fd659b1a526">SVFUtil::isCallSite</a>(inst))</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a6528edf9a1750df4a84d1a60d4d0bbe4">SVFUtil::isProgExitCall</a>(inst))</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad1620cc7482aeb464b53cfce64e17cc3">funToExitBBsMap</a>[bb.getParent()].insert(&bb);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  }</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span> }</div><div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a2e08ce822223842fa6a73fd659b1a526"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a2e08ce822223842fa6a73fd659b1a526">SVF::SVFUtil::isCallSite</a></div><div class="ttdeci">bool isCallSite(const Instruction *inst)</div><div class="ttdoc">Whether an instruction is a call or invoke instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00196">SVFUtil.h:196</a></div></div>
|
|
621
621
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ad1620cc7482aeb464b53cfce64e17cc3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ad1620cc7482aeb464b53cfce64e17cc3">SVF::SaberCondAllocator::funToExitBBsMap</a></div><div class="ttdeci">FunToExitBBsMap funToExitBBsMap</div><div class="ttdoc">map a function to all its basic blocks calling program exit </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00290">SaberCondAllocator.h:290</a></div></div>
|
|
622
622
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a6528edf9a1750df4a84d1a60d4d0bbe4"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a6528edf9a1750df4a84d1a60d4d0bbe4">SVF::SVFUtil::isProgExitCall</a></div><div class="ttdeci">bool isProgExitCall(const CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00717">SVFUtil.h:717</a></div></div>
|
|
623
623
|
<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="Util_2BasicTypes_8h_source.html#l00073">BasicTypes.h:73</a></div></div>
|
|
@@ -665,12 +665,12 @@ Static Private Attributes</h2></td></tr>
|
|
|
665
665
|
</div><div class="memdoc">
|
|
666
666
|
<p>Compute calling inter-procedural guards between two SVFGNodes (from caller to callee) src –c1–> callBB –true–> funEntryBB –c2–> dst the InterCallVFGGuard is c1 ^ c2 </p>
|
|
667
667
|
|
|
668
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
669
|
-
<div class="fragment"><div class="line"><a name="
|
|
668
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00476">476</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
669
|
+
<div class="fragment"><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> {</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *funEntryBB = &dstBB->getParent()->getEntryBlock();</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span> </div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> c1 = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">ComputeIntraVFGGuard</a>(srcBB, callBB);</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ae7aea2293ca15894af66a98649d25f5b">setCFCond</a>(funEntryBB, <a class="code" href="classSVF_1_1SaberCondAllocator.html#a2e4c3f5149a5085a5c8bb7547eae8161">condOr</a>(<a class="code" href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">getCFCond</a>(funEntryBB), <a class="code" href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">getCFCond</a>(callBB)));</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> c2 = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">ComputeIntraVFGGuard</a>(funEntryBB, dstBB);</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">condAnd</a>(c1, c2);</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a49a7146006e286c6ffb5668687a5a92f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">SVF::SaberCondAllocator::getCFCond</a></div><div class="ttdeci">Condition getCFCond(const BasicBlock *bb) const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00218">SaberCondAllocator.h:218</a></div></div>
|
|
670
670
|
<div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00071">BasicTypes.h:71</a></div></div>
|
|
671
671
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab4eba98cf7306c89e40975c766d5bf65"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">SVF::SaberCondAllocator::Condition</a></div><div class="ttdeci">Z3Expr Condition</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00052">SaberCondAllocator.h:52</a></div></div>
|
|
672
672
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ae7aea2293ca15894af66a98649d25f5b"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ae7aea2293ca15894af66a98649d25f5b">SVF::SaberCondAllocator::setCFCond</a></div><div class="ttdeci">bool setCFCond(const BasicBlock *bb, const Condition &cond)</div><div class="ttdoc">Get/Set control-flow conditions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00208">SaberCondAllocator.h:208</a></div></div>
|
|
673
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a94ef09be5ef07f4d5222059b99619bc2"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">SVF::SaberCondAllocator::ComputeIntraVFGGuard</a></div><div class="ttdeci">virtual Condition ComputeIntraVFGGuard(const BasicBlock *src, const BasicBlock *dst)</div><div class="ttdoc">Guard Computation for a value-flow (between two basic blocks) </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
673
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a94ef09be5ef07f4d5222059b99619bc2"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">SVF::SaberCondAllocator::ComputeIntraVFGGuard</a></div><div class="ttdeci">virtual Condition ComputeIntraVFGGuard(const BasicBlock *src, const BasicBlock *dst)</div><div class="ttdoc">Guard Computation for a value-flow (between two basic blocks) </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00506">SaberCondAllocator.cpp:506</a></div></div>
|
|
674
674
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a2e4c3f5149a5085a5c8bb7547eae8161"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a2e4c3f5149a5085a5c8bb7547eae8161">SVF::SaberCondAllocator::condOr</a></div><div class="ttdeci">Condition condOr(const Condition &lhs, const Condition &rhs)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00087">SaberCondAllocator.h:87</a></div></div>
|
|
675
675
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a79682a4e4da23d0eaf0066a91c2f7bd4"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">SVF::SaberCondAllocator::condAnd</a></div><div class="ttdeci">Condition condAnd(const Condition &lhs, const Condition &rhs)</div><div class="ttdoc">Condition operations. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00083">SaberCondAllocator.h:83</a></div></div>
|
|
676
676
|
</div><!-- fragment -->
|
|
@@ -717,12 +717,12 @@ Static Private Attributes</h2></td></tr>
|
|
|
717
717
|
</div><div class="memdoc">
|
|
718
718
|
<p>Compute return inter-procedural guards between two SVFGNodes (from callee to caller) src –c1–> funExitBB –true–> retBB –c2–> dst the InterRetVFGGuard is c1 ^ c2 </p>
|
|
719
719
|
|
|
720
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
721
|
-
<div class="fragment"><div class="line"><a name="
|
|
720
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00493">493</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
721
|
+
<div class="fragment"><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> {</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *funExitBB = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#aa0e78f2e1c9c04aee478a7ecbf354800">getFunExitBB</a>(srcBB->getParent());</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span> </div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> c1 = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">ComputeIntraVFGGuard</a>(srcBB, funExitBB);</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ae7aea2293ca15894af66a98649d25f5b">setCFCond</a>(retBB, <a class="code" href="classSVF_1_1SaberCondAllocator.html#a2e4c3f5149a5085a5c8bb7547eae8161">condOr</a>(<a class="code" href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">getCFCond</a>(retBB), <a class="code" href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">getCFCond</a>(funExitBB)));</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> c2 = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">ComputeIntraVFGGuard</a>(retBB, dstBB);</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">condAnd</a>(c1, c2);</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a49a7146006e286c6ffb5668687a5a92f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">SVF::SaberCondAllocator::getCFCond</a></div><div class="ttdeci">Condition getCFCond(const BasicBlock *bb) const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00218">SaberCondAllocator.h:218</a></div></div>
|
|
722
722
|
<div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00071">BasicTypes.h:71</a></div></div>
|
|
723
723
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab4eba98cf7306c89e40975c766d5bf65"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">SVF::SaberCondAllocator::Condition</a></div><div class="ttdeci">Z3Expr Condition</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00052">SaberCondAllocator.h:52</a></div></div>
|
|
724
724
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ae7aea2293ca15894af66a98649d25f5b"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ae7aea2293ca15894af66a98649d25f5b">SVF::SaberCondAllocator::setCFCond</a></div><div class="ttdeci">bool setCFCond(const BasicBlock *bb, const Condition &cond)</div><div class="ttdoc">Get/Set control-flow conditions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00208">SaberCondAllocator.h:208</a></div></div>
|
|
725
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a94ef09be5ef07f4d5222059b99619bc2"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">SVF::SaberCondAllocator::ComputeIntraVFGGuard</a></div><div class="ttdeci">virtual Condition ComputeIntraVFGGuard(const BasicBlock *src, const BasicBlock *dst)</div><div class="ttdoc">Guard Computation for a value-flow (between two basic blocks) </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
725
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a94ef09be5ef07f4d5222059b99619bc2"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">SVF::SaberCondAllocator::ComputeIntraVFGGuard</a></div><div class="ttdeci">virtual Condition ComputeIntraVFGGuard(const BasicBlock *src, const BasicBlock *dst)</div><div class="ttdoc">Guard Computation for a value-flow (between two basic blocks) </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00506">SaberCondAllocator.cpp:506</a></div></div>
|
|
726
726
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a2e4c3f5149a5085a5c8bb7547eae8161"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a2e4c3f5149a5085a5c8bb7547eae8161">SVF::SaberCondAllocator::condOr</a></div><div class="ttdeci">Condition condOr(const Condition &lhs, const Condition &rhs)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00087">SaberCondAllocator.h:87</a></div></div>
|
|
727
727
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a79682a4e4da23d0eaf0066a91c2f7bd4"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">SVF::SaberCondAllocator::condAnd</a></div><div class="ttdeci">Condition condAnd(const Condition &lhs, const Condition &rhs)</div><div class="ttdoc">Condition operations. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00083">SaberCondAllocator.h:83</a></div></div>
|
|
728
728
|
<div class="ttc" id="namespaceSVF_1_1LLVMUtil_html_aa0e78f2e1c9c04aee478a7ecbf354800"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#aa0e78f2e1c9c04aee478a7ecbf354800">SVF::LLVMUtil::getFunExitBB</a></div><div class="ttdeci">const BasicBlock * getFunExitBB(const Function *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00167">LLVMUtil.h:167</a></div></div>
|
|
@@ -768,8 +768,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
768
768
|
<p>if the dstBB is the eligible loop exit of the current basic block we can early terminate the computation</p>
|
|
769
769
|
<p>calculate the branch condition if succ post dominate bb, then we get brCond quicker by using postDT note that we assume loop exit always post dominate loop bodys which means loops are approximated only once. </p>
|
|
770
770
|
|
|
771
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
772
|
-
<div class="fragment"><div class="line"><a name="
|
|
771
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00506">506</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
772
|
+
<div class="fragment"><div class="line"><a name="l00507"></a><span class="lineno"> 507</span> {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span> </div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  assert(srcBB->getParent() == dstBB->getParent() && <span class="stringliteral">"two basic blocks are not in the same function??"</span>);</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <a class="code" href="namespaceSVF.html#ab34383ee87cd45eb485fa29db482ffef">PostDominatorTree</a> *postDT = <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad19b88bca27044d0d9a6999c88afde97">getPostDT</a>(srcBB->getParent());</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="keywordflow">if</span> (postDT->dominates(dstBB, srcBB))</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span> </div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a52ec71159bc70b450895990dfebdedac">CFWorkList</a> worklist;</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  worklist.push(srcBB);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ae7aea2293ca15894af66a98649d25f5b">setCFCond</a>(srcBB, <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>());</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span> </div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <span class="keywordflow">while</span> (!worklist.empty())</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  {</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *bb = worklist.pop();</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> cond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">getCFCond</a>(bb);</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> loopExitCond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4c3945abc15c6caeb9d026f47e78a340">evaluateLoopExitBranch</a>(bb, dstBB);</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keywordflow">if</span> (!eq(loopExitCond, <a class="code" href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">Condition::nullExpr</a>()))</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">condAnd</a>(cond, loopExitCond);</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span> </div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span> </div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">succ_const_iterator</a> succ_it = succ_begin(bb);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  succ_it != succ_end(bb); succ_it++)</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  {</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ = *succ_it;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> brCond;</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keywordflow">if</span> (postDT->dominates(succ, bb))</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  brCond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  brCond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a8926da3e50d32bd1fcf0a011417d445c">getEvalBrCond</a>(bb, succ);</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span> </div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">" bb ("</span> << bb->getName().str() <<</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="stringliteral">") --> "</span> << <span class="stringliteral">"succ_bb ("</span> << succ->getName().str() << <span class="stringliteral">") condition: "</span> << brCond << <span class="stringliteral">"\n"</span>);</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> succPathCond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">condAnd</a>(cond, brCond);</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SaberCondAllocator.html#ae7aea2293ca15894af66a98649d25f5b">setCFCond</a>(succ, <a class="code" href="classSVF_1_1SaberCondAllocator.html#a2e4c3f5149a5085a5c8bb7547eae8161">condOr</a>(<a class="code" href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">getCFCond</a>(succ), succPathCond)))</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  worklist.push(succ);</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  }</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  }</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span> </div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">" src_bb ("</span> << srcBB->getName().str() <<</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  <span class="stringliteral">") --> "</span> << <span class="stringliteral">"dst_bb ("</span> << dstBB->getName().str() << <span class="stringliteral">") condition: "</span> << <a class="code" href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">getCFCond</a>(dstBB)</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  << <span class="stringliteral">"\n"</span>);</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> </div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">getCFCond</a>(dstBB);</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a8926da3e50d32bd1fcf0a011417d445c"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a8926da3e50d32bd1fcf0a011417d445c">SVF::SaberCondAllocator::getEvalBrCond</a></div><div class="ttdeci">Condition getEvalBrCond(const BasicBlock *bb, const BasicBlock *succ)</div><div class="ttdoc">Get a condition, evaluate the value for conditions if necessary (e.g., testNull like express) ...</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00157">SaberCondAllocator.cpp:157</a></div></div>
|
|
773
773
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a49a7146006e286c6ffb5668687a5a92f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">SVF::SaberCondAllocator::getCFCond</a></div><div class="ttdeci">Condition getCFCond(const BasicBlock *bb) const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00218">SaberCondAllocator.h:218</a></div></div>
|
|
774
774
|
<div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00071">BasicTypes.h:71</a></div></div>
|
|
775
775
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab4eba98cf7306c89e40975c766d5bf65"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">SVF::SaberCondAllocator::Condition</a></div><div class="ttdeci">Z3Expr Condition</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00052">SaberCondAllocator.h:52</a></div></div>
|
|
@@ -780,9 +780,9 @@ Static Private Attributes</h2></td></tr>
|
|
|
780
780
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a2e4c3f5149a5085a5c8bb7547eae8161"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a2e4c3f5149a5085a5c8bb7547eae8161">SVF::SaberCondAllocator::condOr</a></div><div class="ttdeci">Condition condOr(const Condition &lhs, const Condition &rhs)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00087">SaberCondAllocator.h:87</a></div></div>
|
|
781
781
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a79682a4e4da23d0eaf0066a91c2f7bd4"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">SVF::SaberCondAllocator::condAnd</a></div><div class="ttdeci">Condition condAnd(const Condition &lhs, const Condition &rhs)</div><div class="ttdoc">Condition operations. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00083">SaberCondAllocator.h:83</a></div></div>
|
|
782
782
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a52ec71159bc70b450895990dfebdedac"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a52ec71159bc70b450895990dfebdedac">SVF::SaberCondAllocator::CFWorkList</a></div><div class="ttdeci">FIFOWorkList< const BasicBlock * > CFWorkList</div><div class="ttdoc">worklist for control-flow guard computation </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00059">SaberCondAllocator.h:59</a></div></div>
|
|
783
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a4c3945abc15c6caeb9d026f47e78a340"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a4c3945abc15c6caeb9d026f47e78a340">SVF::SaberCondAllocator::evaluateLoopExitBranch</a></div><div class="ttdeci">Condition evaluateLoopExitBranch(const BasicBlock *bb, const BasicBlock *succ)</div><div class="ttdoc">Evaluate loop exit branch. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
783
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a4c3945abc15c6caeb9d026f47e78a340"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a4c3945abc15c6caeb9d026f47e78a340">SVF::SaberCondAllocator::evaluateLoopExitBranch</a></div><div class="ttdeci">Condition evaluateLoopExitBranch(const BasicBlock *bb, const BasicBlock *succ)</div><div class="ttdoc">Evaluate loop exit branch. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00259">SaberCondAllocator.cpp:259</a></div></div>
|
|
784
784
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
|
|
785
|
-
<div class="ttc" id="classSVF_1_1Z3Expr_html_a9aa800372d57db519d484cc32ea1c5dc"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">SVF::Z3Expr::nullExpr</a></div><div class="ttdeci">static z3::expr nullExpr()</div><div class="ttdoc">null expression </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#
|
|
785
|
+
<div class="ttc" id="classSVF_1_1Z3Expr_html_a9aa800372d57db519d484cc32ea1c5dc"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">SVF::Z3Expr::nullExpr</a></div><div class="ttdeci">static z3::expr nullExpr()</div><div class="ttdoc">null expression </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00098">Z3Expr.h:98</a></div></div>
|
|
786
786
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ad19b88bca27044d0d9a6999c88afde97"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ad19b88bca27044d0d9a6999c88afde97">SVF::SaberCondAllocator::getPostDT</a></div><div class="ttdeci">PostDominatorTree * getPostDT(const Function *fun)</div><div class="ttdoc">Get Postdominators. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00149">SaberCondAllocator.h:149</a></div></div>
|
|
787
787
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab9d7f1f5c5f22b190ec34255dead41b3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">SVF::SaberCondAllocator::getTrueCond</a></div><div class="ttdeci">Condition getTrueCond() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00095">SaberCondAllocator.h:95</a></div></div>
|
|
788
788
|
<div class="ttc" id="SVFBasicTypes_8h_html_a173ce1b9b505fdadf5613b663749d3b0"><div class="ttname"><a href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a></div><div class="ttdeci">#define DBOUT(TYPE, X)</div><div class="ttdoc">LLVM debug macros, define type of your DEBUG model of each pass. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00155">SVFBasicTypes.h:155</a></div></div>
|
|
@@ -826,7 +826,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
826
826
|
<p>Condition operations. </p>
|
|
827
827
|
|
|
828
828
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00083">83</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
829
|
-
<div class="fragment"><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  {</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#a4f56bd6d3a31df94e19af9ce6e685fea">Condition::AND</a>(lhs,rhs);</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  }</div><div class="ttc" id="classSVF_1_1Z3Expr_html_a4f56bd6d3a31df94e19af9ce6e685fea"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a4f56bd6d3a31df94e19af9ce6e685fea">SVF::Z3Expr::AND</a></div><div class="ttdeci">static Z3Expr AND(const Z3Expr &lhs, const Z3Expr &rhs)</div><div class="ttdoc">compute AND, used for branch condition </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8cpp_source.html#
|
|
829
|
+
<div class="fragment"><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  {</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#a4f56bd6d3a31df94e19af9ce6e685fea">Condition::AND</a>(lhs,rhs);</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  }</div><div class="ttc" id="classSVF_1_1Z3Expr_html_a4f56bd6d3a31df94e19af9ce6e685fea"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a4f56bd6d3a31df94e19af9ce6e685fea">SVF::Z3Expr::AND</a></div><div class="ttdeci">static Z3Expr AND(const Z3Expr &lhs, const Z3Expr &rhs)</div><div class="ttdoc">compute AND, used for branch condition </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8cpp_source.html#l00092">Z3Expr.cpp:92</a></div></div>
|
|
830
830
|
</div><!-- fragment -->
|
|
831
831
|
</div>
|
|
832
832
|
</div>
|
|
@@ -855,7 +855,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
855
855
|
</div><div class="memdoc">
|
|
856
856
|
|
|
857
857
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00091">91</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
858
|
-
<div class="fragment"><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#a9a545e516e6dee37310ad02481a84356">Condition::NEG</a>(cond);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  }</div><div class="ttc" id="classSVF_1_1Z3Expr_html_a9a545e516e6dee37310ad02481a84356"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a9a545e516e6dee37310ad02481a84356">SVF::Z3Expr::NEG</a></div><div class="ttdeci">static Z3Expr NEG(const Z3Expr &z3Expr)</div><div class="ttdoc">compute NEG </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#
|
|
858
|
+
<div class="fragment"><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#a9a545e516e6dee37310ad02481a84356">Condition::NEG</a>(cond);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  }</div><div class="ttc" id="classSVF_1_1Z3Expr_html_a9a545e516e6dee37310ad02481a84356"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a9a545e516e6dee37310ad02481a84356">SVF::Z3Expr::NEG</a></div><div class="ttdeci">static Z3Expr NEG(const Z3Expr &z3Expr)</div><div class="ttdoc">compute NEG </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00294">Z3Expr.h:294</a></div></div>
|
|
859
859
|
</div><!-- fragment -->
|
|
860
860
|
</div>
|
|
861
861
|
</div>
|
|
@@ -894,7 +894,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
894
894
|
</div><div class="memdoc">
|
|
895
895
|
|
|
896
896
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00087">87</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
897
|
-
<div class="fragment"><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  {</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#ac063ed06c3495b790c02fe57c781b34e">Condition::OR</a>(lhs,rhs);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div><div class="ttc" id="classSVF_1_1Z3Expr_html_ac063ed06c3495b790c02fe57c781b34e"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#ac063ed06c3495b790c02fe57c781b34e">SVF::Z3Expr::OR</a></div><div class="ttdeci">static Z3Expr OR(const Z3Expr &lhs, const Z3Expr &rhs)</div><div class="ttdoc">compute OR, used for branch condition </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8cpp_source.html#
|
|
897
|
+
<div class="fragment"><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  {</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#ac063ed06c3495b790c02fe57c781b34e">Condition::OR</a>(lhs,rhs);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div><div class="ttc" id="classSVF_1_1Z3Expr_html_ac063ed06c3495b790c02fe57c781b34e"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#ac063ed06c3495b790c02fe57c781b34e">SVF::Z3Expr::OR</a></div><div class="ttdeci">static Z3Expr OR(const Z3Expr &lhs, const Z3Expr &rhs)</div><div class="ttdoc">compute OR, used for branch condition </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8cpp_source.html#l00130">Z3Expr.cpp:130</a></div></div>
|
|
898
898
|
</div><!-- fragment -->
|
|
899
899
|
</div>
|
|
900
900
|
</div>
|
|
@@ -952,7 +952,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
952
952
|
</div><div class="memdoc">
|
|
953
953
|
|
|
954
954
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00111">111</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
955
|
-
<div class="fragment"><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#a56ba65487cc91248259e29d3ebb5bdb0">Condition::dumpStr</a>(cond);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  }</div><div class="ttc" id="classSVF_1_1Z3Expr_html_a56ba65487cc91248259e29d3ebb5bdb0"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a56ba65487cc91248259e29d3ebb5bdb0">SVF::Z3Expr::dumpStr</a></div><div class="ttdeci">static std::string dumpStr(const Z3Expr &z3Expr)</div><div class="ttdoc">output Z3 expression as a string </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8cpp_source.html#
|
|
955
|
+
<div class="fragment"><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#a56ba65487cc91248259e29d3ebb5bdb0">Condition::dumpStr</a>(cond);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  }</div><div class="ttc" id="classSVF_1_1Z3Expr_html_a56ba65487cc91248259e29d3ebb5bdb0"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a56ba65487cc91248259e29d3ebb5bdb0">SVF::Z3Expr::dumpStr</a></div><div class="ttdeci">static std::string dumpStr(const Z3Expr &z3Expr)</div><div class="ttdoc">output Z3 expression as a string </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8cpp_source.html#l00168">Z3Expr.cpp:168</a></div></div>
|
|
956
956
|
</div><!-- fragment -->
|
|
957
957
|
</div>
|
|
958
958
|
</div>
|
|
@@ -994,18 +994,18 @@ Static Private Attributes</h2></td></tr>
|
|
|
994
994
|
<p>Evaluate the branch condtion</p>
|
|
995
995
|
<p>(1) Evaluate a branch when it reaches a program exit (2) Evaluate a branch when it is loop exit branch (3) Evaluate a branch when it is a test null like condition </p>
|
|
996
996
|
|
|
997
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
998
|
-
<div class="fragment"><div class="line"><a name="
|
|
999
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_aac1988c13622c0755d491f0bc2b834df"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#aac1988c13622c0755d491f0bc2b834df">SVF::SaberCondAllocator::evaluateProgExit</a></div><div class="ttdeci">Condition evaluateProgExit(const BranchStmt *branchStmt, const BasicBlock *succ)</div><div class="ttdoc">Return condition when there is a branch calls program exit. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
997
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00299">299</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
998
|
+
<div class="fragment"><div class="line"><a name="l00300"></a><span class="lineno"> 300</span> {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6d9205380948e1bd00708581a64301e1">getBBSuccessorNum</a>(bb) == 1)</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  assert(bb->getTerminator()->getSuccessor(0) == succ && <span class="stringliteral">"not the unique successor?"</span>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *icfgNode = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6bd67514e0ea9a2704ae83a38c9f2592">getICFG</a>()->getICFGNode(bb->getTerminator()))</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  {</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &svfStmt: icfgNode->getSVFStmts())</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  {</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1BranchStmt.html">BranchStmt</a> *branchStmt = SVFUtil::dyn_cast<BranchStmt>(svfStmt))</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordflow">if</span> (branchStmt->getNumSuccessors() == 2)</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  {</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ1 = branchStmt->getSuccessor(0)->getBB();</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ2 = branchStmt->getSuccessor(1)->getBB();</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  assert((succ1 == succ || succ2 == succ) && <span class="stringliteral">"not a successor??"</span>);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> evalLoopExit = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4c3945abc15c6caeb9d026f47e78a340">evaluateLoopExitBranch</a>(bb, succ);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">if</span> (!eq(evalLoopExit, <a class="code" href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">Condition::nullExpr</a>()))</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">return</span> evalLoopExit;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> evalProgExit = <a class="code" href="classSVF_1_1SaberCondAllocator.html#aac1988c13622c0755d491f0bc2b834df">evaluateProgExit</a>(branchStmt, succ);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordflow">if</span> (!eq(evalProgExit, <a class="code" href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">Condition::nullExpr</a>()))</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="keywordflow">return</span> evalProgExit;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> evalTestNullLike = <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad049eeed763a5f18267b9288f728b070">evaluateTestNullLikeExpr</a>(branchStmt, succ);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keywordflow">if</span> (!eq(evalTestNullLike, <a class="code" href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">Condition::nullExpr</a>()))</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="keywordflow">return</span> evalTestNullLike;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  }</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  }</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  }</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a2b1c2e7764631d40a5b8d0ce2cc73442">getBranchCond</a>(bb, succ);</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> }</div><div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00071">BasicTypes.h:71</a></div></div>
|
|
999
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_aac1988c13622c0755d491f0bc2b834df"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#aac1988c13622c0755d491f0bc2b834df">SVF::SaberCondAllocator::evaluateProgExit</a></div><div class="ttdeci">Condition evaluateProgExit(const BranchStmt *branchStmt, const BasicBlock *succ)</div><div class="ttdoc">Return condition when there is a branch calls program exit. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00215">SaberCondAllocator.cpp:215</a></div></div>
|
|
1000
1000
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab4eba98cf7306c89e40975c766d5bf65"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">SVF::SaberCondAllocator::Condition</a></div><div class="ttdeci">Z3Expr Condition</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00052">SaberCondAllocator.h:52</a></div></div>
|
|
1001
1001
|
<div class="ttc" id="classSVF_1_1ICFGNode_html"><div class="ttname"><a href="classSVF_1_1ICFGNode.html">SVF::ICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00054">ICFGNode.h:54</a></div></div>
|
|
1002
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a2b1c2e7764631d40a5b8d0ce2cc73442"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a2b1c2e7764631d40a5b8d0ce2cc73442">SVF::SaberCondAllocator::getBranchCond</a></div><div class="ttdeci">Condition getBranchCond(const BasicBlock *bb, const BasicBlock *succ) const</div><div class="ttdoc">Get branch condition. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1002
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a2b1c2e7764631d40a5b8d0ce2cc73442"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a2b1c2e7764631d40a5b8d0ce2cc73442">SVF::SaberCondAllocator::getBranchCond</a></div><div class="ttdeci">Condition getBranchCond(const BasicBlock *bb, const BasicBlock *succ) const</div><div class="ttdoc">Get branch condition. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00142">SaberCondAllocator.cpp:142</a></div></div>
|
|
1003
1003
|
<div class="ttc" id="classSVF_1_1BranchStmt_html"><div class="ttname"><a href="classSVF_1_1BranchStmt.html">SVF::BranchStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00938">SVFStatements.h:938</a></div></div>
|
|
1004
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a4c3945abc15c6caeb9d026f47e78a340"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a4c3945abc15c6caeb9d026f47e78a340">SVF::SaberCondAllocator::evaluateLoopExitBranch</a></div><div class="ttdeci">Condition evaluateLoopExitBranch(const BasicBlock *bb, const BasicBlock *succ)</div><div class="ttdoc">Evaluate loop exit branch. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1004
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a4c3945abc15c6caeb9d026f47e78a340"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a4c3945abc15c6caeb9d026f47e78a340">SVF::SaberCondAllocator::evaluateLoopExitBranch</a></div><div class="ttdeci">Condition evaluateLoopExitBranch(const BasicBlock *bb, const BasicBlock *succ)</div><div class="ttdoc">Evaluate loop exit branch. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00259">SaberCondAllocator.cpp:259</a></div></div>
|
|
1005
1005
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a6bd67514e0ea9a2704ae83a38c9f2592"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a6bd67514e0ea9a2704ae83a38c9f2592">SVF::SaberCondAllocator::getICFG</a></div><div class="ttdeci">ICFG * getICFG() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00201">SaberCondAllocator.h:201</a></div></div>
|
|
1006
1006
|
<div class="ttc" id="namespaceSVF_1_1LLVMUtil_html_a6d9205380948e1bd00708581a64301e1"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a6d9205380948e1bd00708581a64301e1">SVF::LLVMUtil::getBBSuccessorNum</a></div><div class="ttdeci">u32_t getBBSuccessorNum(const BasicBlock *BB)</div><div class="ttdoc">Get num of BB&#39;s successors. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00389">LLVMUtil.cpp:389</a></div></div>
|
|
1007
|
-
<div class="ttc" id="classSVF_1_1Z3Expr_html_a9aa800372d57db519d484cc32ea1c5dc"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">SVF::Z3Expr::nullExpr</a></div><div class="ttdeci">static z3::expr nullExpr()</div><div class="ttdoc">null expression </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#
|
|
1008
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ad049eeed763a5f18267b9288f728b070"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ad049eeed763a5f18267b9288f728b070">SVF::SaberCondAllocator::evaluateTestNullLikeExpr</a></div><div class="ttdeci">Condition evaluateTestNullLikeExpr(const BranchStmt *branchStmt, const BasicBlock *succ)</div><div class="ttdoc">Return branch condition after evaluating test null like expression. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1007
|
+
<div class="ttc" id="classSVF_1_1Z3Expr_html_a9aa800372d57db519d484cc32ea1c5dc"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">SVF::Z3Expr::nullExpr</a></div><div class="ttdeci">static z3::expr nullExpr()</div><div class="ttdoc">null expression </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00098">Z3Expr.h:98</a></div></div>
|
|
1008
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ad049eeed763a5f18267b9288f728b070"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ad049eeed763a5f18267b9288f728b070">SVF::SaberCondAllocator::evaluateTestNullLikeExpr</a></div><div class="ttdeci">Condition evaluateTestNullLikeExpr(const BranchStmt *branchStmt, const BasicBlock *succ)</div><div class="ttdoc">Return branch condition after evaluating test null like expression. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00186">SaberCondAllocator.cpp:186</a></div></div>
|
|
1009
1009
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab9d7f1f5c5f22b190ec34255dead41b3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">SVF::SaberCondAllocator::getTrueCond</a></div><div class="ttdeci">Condition getTrueCond() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00095">SaberCondAllocator.h:95</a></div></div>
|
|
1010
1010
|
</div><!-- fragment -->
|
|
1011
1011
|
</div>
|
|
@@ -1049,17 +1049,17 @@ Static Private Attributes</h2></td></tr>
|
|
|
1049
1049
|
<p>exclude exit bb which calls program exit</p>
|
|
1050
1050
|
<p>if the dst dominate all other loop exit bbs, then dst can certainly be reached </p>
|
|
1051
1051
|
|
|
1052
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1053
|
-
<div class="fragment"><div class="line"><a name="
|
|
1052
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00259">259</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1053
|
+
<div class="fragment"><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> {</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *fun = bb->getParent();</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  assert(fun == dst->getParent() && <span class="stringliteral">"two basic blocks should be in the same function"</span>);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a77e088bfe47c0b0ddcbbe0693dec6fe5">LoopInfo</a> *loopInfo = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a44932e57515b7ddcc192796679dd69be">getLoopInfo</a>(fun);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keywordflow">if</span> (loopInfo->isLoopHeader(const_cast<BasicBlock *>(bb)))</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  {</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">Loop</a> *loop = loopInfo->getLoopFor(bb);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <a class="code" href="namespaceSVF.html#a02be4933b76c2baa7fdbe8b290e12bb3">SmallBBVector</a> exitbbs;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<BasicBlock *></a> filteredbbs;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  loop->getExitBlocks(exitbbs);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">while</span> (!exitbbs.empty())</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  {</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *eb = exitbbs.pop_back_val();</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1SaberCondAllocator.html#a7f5f1fb437153d2a797cf509b8f97c7f">isBBCallsProgExit</a>(eb))</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  filteredbbs.insert(eb);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordtype">bool</span> allPDT = <span class="keyword">true</span>;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <a class="code" href="namespaceSVF.html#ab34383ee87cd45eb485fa29db482ffef">PostDominatorTree</a> *pdt = <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad19b88bca27044d0d9a6999c88afde97">getPostDT</a>(fun);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &filteredbb: filteredbbs)</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  {</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">if</span> (!pdt->dominates(dst, filteredbb))</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  allPDT = <span class="keyword">false</span>;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordflow">if</span> (allPDT)</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  }</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">Condition::nullExpr</a>();</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> }</div><div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00071">BasicTypes.h:71</a></div></div>
|
|
1054
1054
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a44932e57515b7ddcc192796679dd69be"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a44932e57515b7ddcc192796679dd69be">SVF::SaberCondAllocator::getLoopInfo</a></div><div class="ttdeci">LoopInfo * getLoopInfo(const Function *f)</div><div class="ttdoc">Get LoopInfo. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00154">SaberCondAllocator.h:154</a></div></div>
|
|
1055
1055
|
<div class="ttc" id="namespaceSVF_html_a02be4933b76c2baa7fdbe8b290e12bb3"><div class="ttname"><a href="namespaceSVF.html#a02be4933b76c2baa7fdbe8b290e12bb3">SVF::SmallBBVector</a></div><div class="ttdeci">llvm::SmallVector< llvm::BasicBlock *, 8 > SmallBBVector</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00119">SVFBasicTypes.h:119</a></div></div>
|
|
1056
1056
|
<div class="ttc" id="namespaceSVF_html_a77e088bfe47c0b0ddcbbe0693dec6fe5"><div class="ttname"><a href="namespaceSVF.html#a77e088bfe47c0b0ddcbbe0693dec6fe5">SVF::LoopInfo</a></div><div class="ttdeci">llvm::LoopInfo LoopInfo</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00080">BasicTypes.h:80</a></div></div>
|
|
1057
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a7f5f1fb437153d2a797cf509b8f97c7f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a7f5f1fb437153d2a797cf509b8f97c7f">SVF::SaberCondAllocator::isBBCallsProgExit</a></div><div class="ttdeci">bool isBBCallsProgExit(const BasicBlock *bb)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1057
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a7f5f1fb437153d2a797cf509b8f97c7f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a7f5f1fb437153d2a797cf509b8f97c7f">SVF::SaberCondAllocator::isBBCallsProgExit</a></div><div class="ttdeci">bool isBBCallsProgExit(const BasicBlock *bb)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00432">SaberCondAllocator.cpp:432</a></div></div>
|
|
1058
1058
|
<div class="ttc" id="namespaceSVF_html_ab34383ee87cd45eb485fa29db482ffef"><div class="ttname"><a href="namespaceSVF.html#ab34383ee87cd45eb485fa29db482ffef">SVF::PostDominatorTree</a></div><div class="ttdeci">llvm::PostDominatorTree PostDominatorTree</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00110">BasicTypes.h:110</a></div></div>
|
|
1059
1059
|
<div class="ttc" id="namespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set< Key, Hash, KeyEqual, Allocator > Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00105">SVFBasicTypes.h:105</a></div></div>
|
|
1060
1060
|
<div class="ttc" id="namespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00070">BasicTypes.h:70</a></div></div>
|
|
1061
1061
|
<div class="ttc" id="namespaceSVF_html_abf85e29310b2e4df8925d00a5c081314"><div class="ttname"><a href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">SVF::Loop</a></div><div class="ttdeci">llvm::Loop Loop</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00079">BasicTypes.h:79</a></div></div>
|
|
1062
|
-
<div class="ttc" id="classSVF_1_1Z3Expr_html_a9aa800372d57db519d484cc32ea1c5dc"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">SVF::Z3Expr::nullExpr</a></div><div class="ttdeci">static z3::expr nullExpr()</div><div class="ttdoc">null expression </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#
|
|
1062
|
+
<div class="ttc" id="classSVF_1_1Z3Expr_html_a9aa800372d57db519d484cc32ea1c5dc"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">SVF::Z3Expr::nullExpr</a></div><div class="ttdeci">static z3::expr nullExpr()</div><div class="ttdoc">null expression </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00098">Z3Expr.h:98</a></div></div>
|
|
1063
1063
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ad19b88bca27044d0d9a6999c88afde97"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ad19b88bca27044d0d9a6999c88afde97">SVF::SaberCondAllocator::getPostDT</a></div><div class="ttdeci">PostDominatorTree * getPostDT(const Function *fun)</div><div class="ttdoc">Get Postdominators. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00149">SaberCondAllocator.h:149</a></div></div>
|
|
1064
1064
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab9d7f1f5c5f22b190ec34255dead41b3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">SVF::SaberCondAllocator::getTrueCond</a></div><div class="ttdeci">Condition getTrueCond() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00095">SaberCondAllocator.h:95</a></div></div>
|
|
1065
1065
|
</div><!-- fragment -->
|
|
@@ -1105,13 +1105,13 @@ Static Private Attributes</h2></td></tr>
|
|
|
1105
1105
|
<p>else branch calls program exit</p>
|
|
1106
1106
|
<p>no branch call program exit </p>
|
|
1107
1107
|
|
|
1108
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1109
|
-
<div class="fragment"><div class="line"><a name="
|
|
1108
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00215">215</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1109
|
+
<div class="fragment"><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ1 = branchStmt-><a class="code" href="classSVF_1_1BranchStmt.html#a7d9a6ebb2d95942c453864b5327b1ae8">getSuccessor</a>(0)-><a class="code" href="classSVF_1_1ICFGNode.html#ac1689701c75e04481e2ae2f4482551c4">getBB</a>();</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ2 = branchStmt-><a class="code" href="classSVF_1_1BranchStmt.html#a7d9a6ebb2d95942c453864b5327b1ae8">getSuccessor</a>(1)-><a class="code" href="classSVF_1_1ICFGNode.html#ac1689701c75e04481e2ae2f4482551c4">getBB</a>();</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordtype">bool</span> branch1 = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a7f5f1fb437153d2a797cf509b8f97c7f">isBBCallsProgExit</a>(succ1);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordtype">bool</span> branch2 = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a7f5f1fb437153d2a797cf509b8f97c7f">isBBCallsProgExit</a>(succ2);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordflow">if</span> (branch1 && !branch2)</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="comment">// succ is then branch</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">if</span> (succ1 == succ)</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">getFalseCond</a>();</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="comment">// succ is else branch</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!branch1 && branch2)</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  {</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="comment">// succ is else branch</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordflow">if</span> (succ2 == succ)</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">getFalseCond</a>();</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="comment">// succ is then branch</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="comment">// two branches both call program exit</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (branch1 && branch2)</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">getFalseCond</a>();</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  }</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">Condition::nullExpr</a>();</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span> }</div><div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00071">BasicTypes.h:71</a></div></div>
|
|
1110
1110
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9b52da69d79746765d0c12a5ce1b08f4"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">SVF::SaberCondAllocator::getFalseCond</a></div><div class="ttdeci">Condition getFalseCond() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00099">SaberCondAllocator.h:99</a></div></div>
|
|
1111
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a7f5f1fb437153d2a797cf509b8f97c7f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a7f5f1fb437153d2a797cf509b8f97c7f">SVF::SaberCondAllocator::isBBCallsProgExit</a></div><div class="ttdeci">bool isBBCallsProgExit(const BasicBlock *bb)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1111
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a7f5f1fb437153d2a797cf509b8f97c7f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a7f5f1fb437153d2a797cf509b8f97c7f">SVF::SaberCondAllocator::isBBCallsProgExit</a></div><div class="ttdeci">bool isBBCallsProgExit(const BasicBlock *bb)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00432">SaberCondAllocator.cpp:432</a></div></div>
|
|
1112
1112
|
<div class="ttc" id="classSVF_1_1BranchStmt_html_a7d9a6ebb2d95942c453864b5327b1ae8"><div class="ttname"><a href="classSVF_1_1BranchStmt.html#a7d9a6ebb2d95942c453864b5327b1ae8">SVF::BranchStmt::getSuccessor</a></div><div class="ttdeci">const ICFGNode * getSuccessor(u32_t i) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l01007">SVFStatements.h:1007</a></div></div>
|
|
1113
1113
|
<div class="ttc" id="classSVF_1_1ICFGNode_html_ac1689701c75e04481e2ae2f4482551c4"><div class="ttname"><a href="classSVF_1_1ICFGNode.html#ac1689701c75e04481e2ae2f4482551c4">SVF::ICFGNode::getBB</a></div><div class="ttdeci">virtual const BasicBlock * getBB() const</div><div class="ttdoc">Return the function of this ICFGNode. </div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00086">ICFGNode.h:86</a></div></div>
|
|
1114
|
-
<div class="ttc" id="classSVF_1_1Z3Expr_html_a9aa800372d57db519d484cc32ea1c5dc"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">SVF::Z3Expr::nullExpr</a></div><div class="ttdeci">static z3::expr nullExpr()</div><div class="ttdoc">null expression </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#
|
|
1114
|
+
<div class="ttc" id="classSVF_1_1Z3Expr_html_a9aa800372d57db519d484cc32ea1c5dc"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">SVF::Z3Expr::nullExpr</a></div><div class="ttdeci">static z3::expr nullExpr()</div><div class="ttdoc">null expression </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00098">Z3Expr.h:98</a></div></div>
|
|
1115
1115
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab9d7f1f5c5f22b190ec34255dead41b3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">SVF::SaberCondAllocator::getTrueCond</a></div><div class="ttdeci">Condition getTrueCond() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00095">SaberCondAllocator.h:95</a></div></div>
|
|
1116
1116
|
</div><!-- fragment -->
|
|
1117
1117
|
</div>
|
|
@@ -1153,17 +1153,17 @@ Static Private Attributes</h2></td></tr>
|
|
|
1153
1153
|
<p>Return branch condition after evaluating test null like expression. </p>
|
|
1154
1154
|
<p>Evaluate null like expression for source-sink related bug detection in SABER </p>
|
|
1155
1155
|
|
|
1156
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1157
|
-
<div class="fragment"><div class="line"><a name="
|
|
1156
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00186">186</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1157
|
+
<div class="fragment"><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ1 = branchStmt-><a class="code" href="classSVF_1_1BranchStmt.html#a7d9a6ebb2d95942c453864b5327b1ae8">getSuccessor</a>(0)-><a class="code" href="classSVF_1_1ICFGNode.html#ac1689701c75e04481e2ae2f4482551c4">getBB</a>();</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SaberCondAllocator.html#a0244cfcb0f23614e8f870383a6bd44b3">isTestNullExpr</a>(branchStmt-><a class="code" href="classSVF_1_1BranchStmt.html#a915384027ae53e99311f05a08edf99f0">getCondition</a>()-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()))</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="comment">// succ is then branch</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">if</span> (succ1 == succ)</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">getFalseCond</a>();</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="comment">// succ is else branch</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  }</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SaberCondAllocator.html#a8ffebb3dec9884434be8e432ab1f0063">isTestNotNullExpr</a>(branchStmt-><a class="code" href="classSVF_1_1BranchStmt.html#a915384027ae53e99311f05a08edf99f0">getCondition</a>()-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()))</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="comment">// succ is then branch</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">if</span> (succ1 == succ)</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="comment">// succ is else branch</span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">getFalseCond</a>();</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  }</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">Condition::nullExpr</a>();</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> }</div><div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00071">BasicTypes.h:71</a></div></div>
|
|
1158
1158
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9b52da69d79746765d0c12a5ce1b08f4"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">SVF::SaberCondAllocator::getFalseCond</a></div><div class="ttdeci">Condition getFalseCond() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00099">SaberCondAllocator.h:99</a></div></div>
|
|
1159
1159
|
<div class="ttc" id="classSVF_1_1BranchStmt_html_a7d9a6ebb2d95942c453864b5327b1ae8"><div class="ttname"><a href="classSVF_1_1BranchStmt.html#a7d9a6ebb2d95942c453864b5327b1ae8">SVF::BranchStmt::getSuccessor</a></div><div class="ttdeci">const ICFGNode * getSuccessor(u32_t i) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l01007">SVFStatements.h:1007</a></div></div>
|
|
1160
1160
|
<div class="ttc" id="classSVF_1_1ICFGNode_html_ac1689701c75e04481e2ae2f4482551c4"><div class="ttname"><a href="classSVF_1_1ICFGNode.html#ac1689701c75e04481e2ae2f4482551c4">SVF::ICFGNode::getBB</a></div><div class="ttdeci">virtual const BasicBlock * getBB() const</div><div class="ttdoc">Return the function of this ICFGNode. </div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00086">ICFGNode.h:86</a></div></div>
|
|
1161
1161
|
<div class="ttc" id="classSVF_1_1SVFVar_html_afaa33caa8d2a306f6741d9d066243e40"><div class="ttname"><a href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">SVF::SVFVar::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get/has methods of the components. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00091">SVFVariables.h:91</a></div></div>
|
|
1162
1162
|
<div class="ttc" id="classSVF_1_1BranchStmt_html_a915384027ae53e99311f05a08edf99f0"><div class="ttname"><a href="classSVF_1_1BranchStmt.html#a915384027ae53e99311f05a08edf99f0">SVF::BranchStmt::getCondition</a></div><div class="ttdeci">const SVFVar * getCondition() const</div><div class="ttdoc">Return the condition. </div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8cpp_source.html#l00320">SVFStatements.cpp:320</a></div></div>
|
|
1163
|
-
<div class="ttc" id="classSVF_1_1Z3Expr_html_a9aa800372d57db519d484cc32ea1c5dc"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">SVF::Z3Expr::nullExpr</a></div><div class="ttdeci">static z3::expr nullExpr()</div><div class="ttdoc">null expression </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#
|
|
1163
|
+
<div class="ttc" id="classSVF_1_1Z3Expr_html_a9aa800372d57db519d484cc32ea1c5dc"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">SVF::Z3Expr::nullExpr</a></div><div class="ttdeci">static z3::expr nullExpr()</div><div class="ttdoc">null expression </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00098">Z3Expr.h:98</a></div></div>
|
|
1164
1164
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab9d7f1f5c5f22b190ec34255dead41b3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">SVF::SaberCondAllocator::getTrueCond</a></div><div class="ttdeci">Condition getTrueCond() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00095">SaberCondAllocator.h:95</a></div></div>
|
|
1165
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a0244cfcb0f23614e8f870383a6bd44b3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a0244cfcb0f23614e8f870383a6bd44b3">SVF::SaberCondAllocator::isTestNullExpr</a></div><div class="ttdeci">bool isTestNullExpr(const Value *test) const</div><div class="ttdoc">Return true if this is a test null expression. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1166
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a8ffebb3dec9884434be8e432ab1f0063"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a8ffebb3dec9884434be8e432ab1f0063">SVF::SaberCondAllocator::isTestNotNullExpr</a></div><div class="ttdeci">bool isTestNotNullExpr(const Value *test) const</div><div class="ttdoc">Return true if this is a test not null expression. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1165
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a0244cfcb0f23614e8f870383a6bd44b3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a0244cfcb0f23614e8f870383a6bd44b3">SVF::SaberCondAllocator::isTestNullExpr</a></div><div class="ttdeci">bool isTestNullExpr(const Value *test) const</div><div class="ttdoc">Return true if this is a test null expression. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00349">SaberCondAllocator.cpp:349</a></div></div>
|
|
1166
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a8ffebb3dec9884434be8e432ab1f0063"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a8ffebb3dec9884434be8e432ab1f0063">SVF::SaberCondAllocator::isTestNotNullExpr</a></div><div class="ttdeci">bool isTestNotNullExpr(const Value *test) const</div><div class="ttdoc">Return true if this is a test not null expression. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00358">SaberCondAllocator.cpp:358</a></div></div>
|
|
1167
1167
|
</div><!-- fragment -->
|
|
1168
1168
|
</div>
|
|
1169
1169
|
</div>
|
|
@@ -1195,7 +1195,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
1195
1195
|
|
|
1196
1196
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00104">104</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
1197
1197
|
<div class="fragment"><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <a class="code" href="namespaceSVF.html#aa7b6a13e52671de8524b130738aeb564">NodeBS</a> elems;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9f43fe1cacf419f03276d66c3a54fe77">extractSubConds</a>(cond, elems);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">return</span> elems;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  }</div><div class="ttc" id="namespaceSVF_html_aa7b6a13e52671de8524b130738aeb564"><div class="ttname"><a href="namespaceSVF.html#aa7b6a13e52671de8524b130738aeb564">SVF::NodeBS</a></div><div class="ttdeci">SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00096">SVFBasicTypes.h:96</a></div></div>
|
|
1198
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9f43fe1cacf419f03276d66c3a54fe77"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9f43fe1cacf419f03276d66c3a54fe77">SVF::SaberCondAllocator::extractSubConds</a></div><div class="ttdeci">void extractSubConds(const Condition &condition, NodeBS &support) const</div><div class="ttdoc">extract subexpression from a Z3 expression </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1198
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9f43fe1cacf419f03276d66c3a54fe77"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9f43fe1cacf419f03276d66c3a54fe77">SVF::SaberCondAllocator::extractSubConds</a></div><div class="ttdeci">void extractSubConds(const Condition &condition, NodeBS &support) const</div><div class="ttdoc">extract subexpression from a Z3 expression </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00627">SaberCondAllocator.cpp:627</a></div></div>
|
|
1199
1199
|
</div><!-- fragment -->
|
|
1200
1200
|
</div>
|
|
1201
1201
|
</div>
|
|
@@ -1235,11 +1235,11 @@ Static Private Attributes</h2></td></tr>
|
|
|
1235
1235
|
|
|
1236
1236
|
<p>extract subexpression from a Z3 expression </p>
|
|
1237
1237
|
|
|
1238
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1239
|
-
<div class="fragment"><div class="line"><a name="
|
|
1238
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00627">627</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1239
|
+
<div class="fragment"><div class="line"><a name="l00628"></a><span class="lineno"> 628</span> {</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <span class="keywordflow">if</span> (condition.getExpr().num_args() == 1 && <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad5d27f65374025b6a105ea7a92cbdb50">isNegCond</a>(condition.id()))</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  {</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  support.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(condition.getExpr().id());</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  }</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  <span class="keywordflow">if</span> (condition.getExpr().num_args() == 0)</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="keywordflow">if</span> (!condition.getExpr().is_true() && !condition.getExpr().is_false())</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  support.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(condition.getExpr().id());</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < condition.getExpr().num_args(); ++i)</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  {</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> expr = condition.<a class="code" href="classSVF_1_1Z3Expr.html#a57c199ba2c3c6a6d44a86e0b1429be55">getExpr</a>().arg(i);</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9f43fe1cacf419f03276d66c3a54fe77">extractSubConds</a>(expr, support);</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  }</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span> </div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab4eba98cf7306c89e40975c766d5bf65"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">SVF::SaberCondAllocator::Condition</a></div><div class="ttdeci">Z3Expr Condition</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00052">SaberCondAllocator.h:52</a></div></div>
|
|
1240
1240
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ad5d27f65374025b6a105ea7a92cbdb50"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ad5d27f65374025b6a105ea7a92cbdb50">SVF::SaberCondAllocator::isNegCond</a></div><div class="ttdeci">bool isNegCond(u32_t id) const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00138">SaberCondAllocator.h:138</a></div></div>
|
|
1241
1241
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
|
|
1242
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9f43fe1cacf419f03276d66c3a54fe77"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9f43fe1cacf419f03276d66c3a54fe77">SVF::SaberCondAllocator::extractSubConds</a></div><div class="ttdeci">void extractSubConds(const Condition &condition, NodeBS &support) const</div><div class="ttdoc">extract subexpression from a Z3 expression </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1242
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9f43fe1cacf419f03276d66c3a54fe77"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9f43fe1cacf419f03276d66c3a54fe77">SVF::SaberCondAllocator::extractSubConds</a></div><div class="ttdeci">void extractSubConds(const Condition &condition, NodeBS &support) const</div><div class="ttdoc">extract subexpression from a Z3 expression </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00627">SaberCondAllocator.cpp:627</a></div></div>
|
|
1243
1243
|
<div class="ttc" id="classSVF_1_1Z3Expr_html_a57c199ba2c3c6a6d44a86e0b1429be55"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a57c199ba2c3c6a6d44a86e0b1429be55">SVF::Z3Expr::getExpr</a></div><div class="ttdeci">const z3::expr & getExpr() const</div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00079">Z3Expr.h:79</a></div></div>
|
|
1244
1244
|
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a61bd86909a141f9de873d92c0f904832"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">SVF::SparseBitVector::set</a></div><div class="ttdeci">void set(unsigned Idx)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00745">SparseBitVector.h:745</a></div></div>
|
|
1245
1245
|
</div><!-- fragment -->
|
|
@@ -1282,8 +1282,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
1282
1282
|
<p>Get branch condition. </p>
|
|
1283
1283
|
<p>Get a branch condition </p>
|
|
1284
1284
|
|
|
1285
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1286
|
-
<div class="fragment"><div class="line"><a name="
|
|
1285
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00142">142</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1286
|
+
<div class="fragment"><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> {</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> pos = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a5d911cede2f514e87b030e2a93919515">getBBSuccessorPos</a>(bb, succ);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6d9205380948e1bd00708581a64301e1">getBBSuccessorNum</a>(bb) == 1)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  BBCondMap::const_iterator it = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646">bbConds</a>.find(bb);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  assert(it != <a class="code" href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646">bbConds</a>.end() && <span class="stringliteral">"basic block does not have branch and conditions??"</span>);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  CondPosMap::const_iterator cit = it->second.find(pos);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  assert(cit != it->second.end() && <span class="stringliteral">"no condition on the branch??"</span>);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">return</span> cit->second;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  }</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> }</div><div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
|
|
1287
1287
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a5c129ebf5ae55eb3af8bd670c921a646"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646">SVF::SaberCondAllocator::bbConds</a></div><div class="ttdeci">BBCondMap bbConds</div><div class="ttdoc">a counter for fresh condition </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00299">SaberCondAllocator.h:299</a></div></div>
|
|
1288
1288
|
<div class="ttc" id="namespaceSVF_1_1LLVMUtil_html_a6d9205380948e1bd00708581a64301e1"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a6d9205380948e1bd00708581a64301e1">SVF::LLVMUtil::getBBSuccessorNum</a></div><div class="ttdeci">u32_t getBBSuccessorNum(const BasicBlock *BB)</div><div class="ttdoc">Get num of BB&#39;s successors. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00389">LLVMUtil.cpp:389</a></div></div>
|
|
1289
1289
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab9d7f1f5c5f22b190ec34255dead41b3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">SVF::SaberCondAllocator::getTrueCond</a></div><div class="ttdeci">Condition getTrueCond() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00095">SaberCondAllocator.h:95</a></div></div>
|
|
@@ -1478,9 +1478,9 @@ Static Private Attributes</h2></td></tr>
|
|
|
1478
1478
|
|
|
1479
1479
|
<p>Get a condition, evaluate the value for conditions if necessary (e.g., testNull like express) </p>
|
|
1480
1480
|
|
|
1481
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1482
|
-
<div class="fragment"><div class="line"><a name="
|
|
1483
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a4d334bb764e2f3feb5da892e0c21b8ed"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a4d334bb764e2f3feb5da892e0c21b8ed">SVF::SaberCondAllocator::evaluateBranchCond</a></div><div class="ttdeci">Condition evaluateBranchCond(const BasicBlock *bb, const BasicBlock *succ)</div><div class="ttdoc">Evaluate branch conditions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1481
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00157">157</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1482
|
+
<div class="fragment"><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> {</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SaberCondAllocator.html#a9aec07a64b97d546cfa0efe10f888b6a">getCurEvalSVFGNode</a>() && <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9aec07a64b97d546cfa0efe10f888b6a">getCurEvalSVFGNode</a>()->getValue())</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4d334bb764e2f3feb5da892e0c21b8ed">evaluateBranchCond</a>(bb, succ);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a2b1c2e7764631d40a5b8d0ce2cc73442">getBranchCond</a>(bb, succ);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a2b1c2e7764631d40a5b8d0ce2cc73442"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a2b1c2e7764631d40a5b8d0ce2cc73442">SVF::SaberCondAllocator::getBranchCond</a></div><div class="ttdeci">Condition getBranchCond(const BasicBlock *bb, const BasicBlock *succ) const</div><div class="ttdoc">Get branch condition. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00142">SaberCondAllocator.cpp:142</a></div></div>
|
|
1483
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a4d334bb764e2f3feb5da892e0c21b8ed"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a4d334bb764e2f3feb5da892e0c21b8ed">SVF::SaberCondAllocator::evaluateBranchCond</a></div><div class="ttdeci">Condition evaluateBranchCond(const BasicBlock *bb, const BasicBlock *succ)</div><div class="ttdoc">Evaluate branch conditions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00299">SaberCondAllocator.cpp:299</a></div></div>
|
|
1484
1484
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9aec07a64b97d546cfa0efe10f888b6a"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9aec07a64b97d546cfa0efe10f888b6a">SVF::SaberCondAllocator::getCurEvalSVFGNode</a></div><div class="ttdeci">const SVFGNode * getCurEvalSVFGNode() const</div><div class="ttdoc">Get current value for branch condition evaluation. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00180">SaberCondAllocator.h:180</a></div></div>
|
|
1485
1485
|
</div><!-- fragment -->
|
|
1486
1486
|
</div>
|
|
@@ -1509,7 +1509,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
1509
1509
|
</div><div class="memdoc">
|
|
1510
1510
|
|
|
1511
1511
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00099">99</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
1512
|
-
<div class="fragment"><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#af541505af93ccebf57543793658cf495">Condition::getFalseCond</a>();</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  }</div><div class="ttc" id="classSVF_1_1Z3Expr_html_af541505af93ccebf57543793658cf495"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#af541505af93ccebf57543793658cf495">SVF::Z3Expr::getFalseCond</a></div><div class="ttdeci">static Z3Expr getFalseCond()</div><div class="ttdoc">Return the unique false condition. </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#
|
|
1512
|
+
<div class="fragment"><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#af541505af93ccebf57543793658cf495">Condition::getFalseCond</a>();</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  }</div><div class="ttc" id="classSVF_1_1Z3Expr_html_af541505af93ccebf57543793658cf495"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#af541505af93ccebf57543793658cf495">SVF::Z3Expr::getFalseCond</a></div><div class="ttdeci">static Z3Expr getFalseCond()</div><div class="ttdoc">Return the unique false condition. </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00288">Z3Expr.h:288</a></div></div>
|
|
1513
1513
|
</div><!-- fragment -->
|
|
1514
1514
|
</div>
|
|
1515
1515
|
</div>
|
|
@@ -1646,10 +1646,10 @@ Static Private Attributes</h2></td></tr>
|
|
|
1646
1646
|
<p>Get complement phi condition e.g., B0: dstBB; B1:incomingBB; B2:complementBB Assume B0 (phi node) is the successor of both B1 and B2. If B1 dominates B2, and B0 not dominate B2 then condition from B1–>B0 = neg(B1–>B2)^(B1–>B0) </p>
|
|
1647
1647
|
<p>avoid both BB0 and BB1 dominate BB2 (e.g., while loop), then BB2 is not necessaryly a complement BB </p>
|
|
1648
1648
|
|
|
1649
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1650
|
-
<div class="fragment"><div class="line"><a name="
|
|
1649
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00455">455</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1650
|
+
<div class="fragment"><div class="line"><a name="l00456"></a><span class="lineno"> 456</span> {</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  assert(BB1 && BB2 && <span class="stringliteral">"expect nullptr BB here!"</span>);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <a class="code" href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">DominatorTree</a> *dt = <a class="code" href="classSVF_1_1SaberCondAllocator.html#acf93725fa53eda82ea30b8efa1940016">getDT</a>(BB1->getParent());</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="keywordflow">if</span> (dt->dominates(BB1, BB2) && !dt->dominates(BB0, BB2))</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  {</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> cond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">ComputeIntraVFGGuard</a>(BB1, BB2);</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a620d53b9af8dd30523c478f4e9655817">condNeg</a>(cond);</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  }</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab4eba98cf7306c89e40975c766d5bf65"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">SVF::SaberCondAllocator::Condition</a></div><div class="ttdeci">Z3Expr Condition</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00052">SaberCondAllocator.h:52</a></div></div>
|
|
1651
1651
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_acf93725fa53eda82ea30b8efa1940016"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#acf93725fa53eda82ea30b8efa1940016">SVF::SaberCondAllocator::getDT</a></div><div class="ttdeci">DominatorTree * getDT(const Function *fun)</div><div class="ttdoc">Get dominators. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00144">SaberCondAllocator.h:144</a></div></div>
|
|
1652
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a94ef09be5ef07f4d5222059b99619bc2"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">SVF::SaberCondAllocator::ComputeIntraVFGGuard</a></div><div class="ttdeci">virtual Condition ComputeIntraVFGGuard(const BasicBlock *src, const BasicBlock *dst)</div><div class="ttdoc">Guard Computation for a value-flow (between two basic blocks) </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1652
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a94ef09be5ef07f4d5222059b99619bc2"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">SVF::SaberCondAllocator::ComputeIntraVFGGuard</a></div><div class="ttdeci">virtual Condition ComputeIntraVFGGuard(const BasicBlock *src, const BasicBlock *dst)</div><div class="ttdoc">Guard Computation for a value-flow (between two basic blocks) </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00506">SaberCondAllocator.cpp:506</a></div></div>
|
|
1653
1653
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a620d53b9af8dd30523c478f4e9655817"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a620d53b9af8dd30523c478f4e9655817">SVF::SaberCondAllocator::condNeg</a></div><div class="ttdeci">Condition condNeg(const Condition &cond)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00091">SaberCondAllocator.h:91</a></div></div>
|
|
1654
1654
|
<div class="ttc" id="namespaceSVF_html_aecbb42b8e9d17fa0189c50dda9fd5fdd"><div class="ttname"><a href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">SVF::DominatorTree</a></div><div class="ttdeci">llvm::DominatorTree DominatorTree</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00109">BasicTypes.h:109</a></div></div>
|
|
1655
1655
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab9d7f1f5c5f22b190ec34255dead41b3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">SVF::SaberCondAllocator::getTrueCond</a></div><div class="ttdeci">Condition getTrueCond() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00095">SaberCondAllocator.h:95</a></div></div>
|
|
@@ -1712,7 +1712,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
1712
1712
|
</div><div class="memdoc">
|
|
1713
1713
|
|
|
1714
1714
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00095">95</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
1715
|
-
<div class="fragment"><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#aaa0c9122f34208235a2d830432665752">Condition::getTrueCond</a>();</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="ttc" id="classSVF_1_1Z3Expr_html_aaa0c9122f34208235a2d830432665752"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#aaa0c9122f34208235a2d830432665752">SVF::Z3Expr::getTrueCond</a></div><div class="ttdeci">static Z3Expr getTrueCond()</div><div class="ttdoc">Return the unique true condition. </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#
|
|
1715
|
+
<div class="fragment"><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#aaa0c9122f34208235a2d830432665752">Condition::getTrueCond</a>();</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="ttc" id="classSVF_1_1Z3Expr_html_aaa0c9122f34208235a2d830432665752"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#aaa0c9122f34208235a2d830432665752">SVF::Z3Expr::getTrueCond</a></div><div class="ttdeci">static Z3Expr getTrueCond()</div><div class="ttdoc">Return the unique true condition. </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00281">Z3Expr.h:281</a></div></div>
|
|
1716
1716
|
</div><!-- fragment -->
|
|
1717
1717
|
</div>
|
|
1718
1718
|
</div>
|
|
@@ -1743,8 +1743,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
1743
1743
|
<p>whether condition is satisfiable for all possible boolean guards </p>
|
|
1744
1744
|
|
|
1745
1745
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00193">193</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
1746
|
-
<div class="fragment"><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#aa9027574586fd4fbb12039f595ecec71">isEquivalentBranchCond</a>(condition, <a class="code" href="classSVF_1_1Z3Expr.html#aaa0c9122f34208235a2d830432665752">Condition::getTrueCond</a>());</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_aa9027574586fd4fbb12039f595ecec71"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#aa9027574586fd4fbb12039f595ecec71">SVF::SaberCondAllocator::isEquivalentBranchCond</a></div><div class="ttdeci">bool isEquivalentBranchCond(const Condition &lhs, const Condition &rhs) const</div><div class="ttdoc">Whether lhs and rhs are equivalent branch conditions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1747
|
-
<div class="ttc" id="classSVF_1_1Z3Expr_html_aaa0c9122f34208235a2d830432665752"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#aaa0c9122f34208235a2d830432665752">SVF::Z3Expr::getTrueCond</a></div><div class="ttdeci">static Z3Expr getTrueCond()</div><div class="ttdoc">Return the unique true condition. </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#
|
|
1746
|
+
<div class="fragment"><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#aa9027574586fd4fbb12039f595ecec71">isEquivalentBranchCond</a>(condition, <a class="code" href="classSVF_1_1Z3Expr.html#aaa0c9122f34208235a2d830432665752">Condition::getTrueCond</a>());</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_aa9027574586fd4fbb12039f595ecec71"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#aa9027574586fd4fbb12039f595ecec71">SVF::SaberCondAllocator::isEquivalentBranchCond</a></div><div class="ttdeci">bool isEquivalentBranchCond(const Condition &lhs, const Condition &rhs) const</div><div class="ttdoc">Whether lhs and rhs are equivalent branch conditions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00604">SaberCondAllocator.cpp:604</a></div></div>
|
|
1747
|
+
<div class="ttc" id="classSVF_1_1Z3Expr_html_aaa0c9122f34208235a2d830432665752"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#aaa0c9122f34208235a2d830432665752">SVF::Z3Expr::getTrueCond</a></div><div class="ttdeci">static Z3Expr getTrueCond()</div><div class="ttdoc">Return the unique true condition. </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00281">Z3Expr.h:281</a></div></div>
|
|
1748
1748
|
</div><!-- fragment -->
|
|
1749
1749
|
</div>
|
|
1750
1750
|
</div>
|
|
@@ -1773,8 +1773,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
1773
1773
|
</div><div class="memdoc">
|
|
1774
1774
|
<p>Whether this basic block contains program exit function call </p>
|
|
1775
1775
|
|
|
1776
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1777
|
-
<div class="fragment"><div class="line"><a name="
|
|
1776
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00432">432</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1777
|
+
<div class="fragment"><div class="line"><a name="l00433"></a><span class="lineno"> 433</span> {</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *fun = bb->getParent();</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  FunToExitBBsMap::const_iterator it = <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad1620cc7482aeb464b53cfce64e17cc3">funToExitBBsMap</a>.find(fun);</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordflow">if</span> (it != <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad1620cc7482aeb464b53cfce64e17cc3">funToExitBBsMap</a>.end())</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <a class="code" href="namespaceSVF.html#ab34383ee87cd45eb485fa29db482ffef">PostDominatorTree</a> *pdt = <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad19b88bca27044d0d9a6999c88afde97">getPostDT</a>(fun);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &bit: it->second)</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  {</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="keywordflow">if</span> (pdt->dominates(bit, bb))</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  }</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  }</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span> }</div><div class="ttc" id="namespaceSVF_html_ab34383ee87cd45eb485fa29db482ffef"><div class="ttname"><a href="namespaceSVF.html#ab34383ee87cd45eb485fa29db482ffef">SVF::PostDominatorTree</a></div><div class="ttdeci">llvm::PostDominatorTree PostDominatorTree</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00110">BasicTypes.h:110</a></div></div>
|
|
1778
1778
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ad1620cc7482aeb464b53cfce64e17cc3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ad1620cc7482aeb464b53cfce64e17cc3">SVF::SaberCondAllocator::funToExitBBsMap</a></div><div class="ttdeci">FunToExitBBsMap funToExitBBsMap</div><div class="ttdoc">map a function to all its basic blocks calling program exit </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00290">SaberCondAllocator.h:290</a></div></div>
|
|
1779
1779
|
<div class="ttc" id="namespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00070">BasicTypes.h:70</a></div></div>
|
|
1780
1780
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ad19b88bca27044d0d9a6999c88afde97"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ad19b88bca27044d0d9a6999c88afde97">SVF::SaberCondAllocator::getPostDT</a></div><div class="ttdeci">PostDominatorTree * getPostDT(const Function *fun)</div><div class="ttdoc">Get Postdominators. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00149">SaberCondAllocator.h:149</a></div></div>
|
|
@@ -1808,8 +1808,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
1808
1808
|
<p>Evaluate test null/not null like expressions. </p>
|
|
1809
1809
|
<p>Return true if the predicate of this compare instruction is equal </p>
|
|
1810
1810
|
|
|
1811
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1812
|
-
<div class="fragment"><div class="line"><a name="
|
|
1811
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00339">339</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1812
|
+
<div class="fragment"><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> {</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">return</span> (cmp->getPredicate() == CmpInst::ICMP_EQ);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> }</div></div><!-- fragment -->
|
|
1813
1813
|
</div>
|
|
1814
1814
|
</div>
|
|
1815
1815
|
<a id="aa9027574586fd4fbb12039f595ecec71"></a>
|
|
@@ -1841,8 +1841,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
1841
1841
|
<p>Whether lhs and rhs are equivalent branch conditions. </p>
|
|
1842
1842
|
<p>check equal using z3 solver </p>
|
|
1843
1843
|
|
|
1844
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1845
|
-
<div class="fragment"><div class="line"><a name="
|
|
1844
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00604">604</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1845
|
+
<div class="fragment"><div class="line"><a name="l00606"></a><span class="lineno"> 606</span> {</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <a class="code" href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">Condition::getSolver</a>().push();</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <a class="code" href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">Condition::getSolver</a>().add(lhs.getExpr() != rhs.getExpr()); </div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  z3::check_result res = <a class="code" href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">Condition::getSolver</a>().check();</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <a class="code" href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">Condition::getSolver</a>().pop();</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <span class="keywordflow">return</span> res == z3::unsat;</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span> }</div><div class="ttc" id="classSVF_1_1Z3Expr_html_a16721e960145864d0835eb95f2ae4681"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">SVF::Z3Expr::getSolver</a></div><div class="ttdeci">static z3::solver & getSolver()</div><div class="ttdoc">Get z3 solver, singleton design here to make sure we only have one context. </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8cpp_source.html#l00056">Z3Expr.cpp:56</a></div></div>
|
|
1846
1846
|
</div><!-- fragment -->
|
|
1847
1847
|
</div>
|
|
1848
1848
|
</div>
|
|
@@ -1872,8 +1872,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
1872
1872
|
|
|
1873
1873
|
<p>Return true if the predicate of this compare instruction is not equal. </p>
|
|
1874
1874
|
|
|
1875
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1876
|
-
<div class="fragment"><div class="line"><a name="
|
|
1875
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00344">344</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1876
|
+
<div class="fragment"><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> {</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keywordflow">return</span> (cmp->getPredicate() == CmpInst::ICMP_NE);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span> }</div></div><!-- fragment -->
|
|
1877
1877
|
</div>
|
|
1878
1878
|
</div>
|
|
1879
1879
|
<a id="ad5d27f65374025b6a105ea7a92cbdb50"></a>
|
|
@@ -1924,8 +1924,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
1924
1924
|
|
|
1925
1925
|
<p>whether condition is satisfiable </p>
|
|
1926
1926
|
|
|
1927
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1928
|
-
<div class="fragment"><div class="line"><a name="
|
|
1927
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00615">615</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1928
|
+
<div class="fragment"><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> {</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <a class="code" href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">Condition::getSolver</a>().add(condition.getExpr());</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  z3::check_result result = <a class="code" href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">Condition::getSolver</a>().check();</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  <a class="code" href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">Condition::getSolver</a>().pop();</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <span class="keywordflow">if</span> (result == z3::sat || result == z3::unknown)</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span> }</div><div class="ttc" id="classSVF_1_1Z3Expr_html_a16721e960145864d0835eb95f2ae4681"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">SVF::Z3Expr::getSolver</a></div><div class="ttdeci">static z3::solver & getSolver()</div><div class="ttdoc">Get z3 solver, singleton design here to make sure we only have one context. </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8cpp_source.html#l00056">Z3Expr.cpp:56</a></div></div>
|
|
1929
1929
|
</div><!-- fragment -->
|
|
1930
1930
|
</div>
|
|
1931
1931
|
</div>
|
|
@@ -1960,8 +1960,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
1960
1960
|
<li>br i1 tobool, label if.end, label if.then, !dbg !161 There is an indirect edge 1->2 with value %0 </li>
|
|
1961
1961
|
</ol>
|
|
1962
1962
|
|
|
1963
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1964
|
-
<div class="fragment"><div class="line"><a name="
|
|
1963
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00379">379</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1964
|
+
<div class="fragment"><div class="line"><a name="l00380"></a><span class="lineno"> 380</span> {</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span> </div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *op0 = cmp->getOperand(0);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *op1 = cmp->getOperand(1);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordflow">if</span> (SVFUtil::isa<ConstantPointerNull>(op1))</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  {</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const Value *></a> inDirVal;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &it: <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9aec07a64b97d546cfa0efe10f888b6a">getCurEvalSVFGNode</a>()->getOutEdges())</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  {</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keywordflow">if</span> (it->isIndirectVFGEdge())</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  {</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  inDirVal.insert(it->getDstNode()->getValue());</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  }</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  }</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keywordflow">return</span> inDirVal.find(op0) != inDirVal.end();</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  }</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<ConstantPointerNull>(op0))</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const Value *></a> inDirVal;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &it: <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9aec07a64b97d546cfa0efe10f888b6a">getCurEvalSVFGNode</a>()->getOutEdges())</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  {</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keywordflow">if</span> (it->isIndirectVFGEdge())</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  {</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  inDirVal.insert(it->getDstNode()->getValue());</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  }</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  }</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">return</span> inDirVal.find(op1) != inDirVal.end();</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  }</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> }</div><div class="ttc" id="namespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set< Key, Hash, KeyEqual, Allocator > Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00105">SVFBasicTypes.h:105</a></div></div>
|
|
1965
1965
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9aec07a64b97d546cfa0efe10f888b6a"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9aec07a64b97d546cfa0efe10f888b6a">SVF::SaberCondAllocator::getCurEvalSVFGNode</a></div><div class="ttdeci">const SVFGNode * getCurEvalSVFGNode() const</div><div class="ttdoc">Get current value for branch condition evaluation. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00180">SaberCondAllocator.h:180</a></div></div>
|
|
1966
1966
|
<div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00072">BasicTypes.h:72</a></div></div>
|
|
1967
1967
|
</div><!-- fragment -->
|
|
@@ -1993,10 +1993,10 @@ Static Private Attributes</h2></td></tr>
|
|
|
1993
1993
|
|
|
1994
1994
|
<p>Return true if this is a test not null expression. </p>
|
|
1995
1995
|
|
|
1996
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1997
|
-
<div class="fragment"><div class="line"><a name="
|
|
1998
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a7a7fbd17d13c81a9b259641d6e1cc857"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a7a7fbd17d13c81a9b259641d6e1cc857">SVF::SaberCondAllocator::isTestContainsNullAndTheValue</a></div><div class="ttdeci">bool isTestContainsNullAndTheValue(const CmpInst *cmp) const</div><div class="ttdoc">Return true if two values on the predicate are what we want. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1999
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab254027728c09a23cff8825b335da1c8"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab254027728c09a23cff8825b335da1c8">SVF::SaberCondAllocator::isNECmp</a></div><div class="ttdeci">bool isNECmp(const CmpInst *cmp) const</div><div class="ttdoc">Return true if the predicate of this compare instruction is not equal. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1996
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00358">358</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1997
|
+
<div class="fragment"><div class="line"><a name="l00359"></a><span class="lineno"> 359</span> {</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a02550b1e1110f4cfca868603ce243564">CmpInst</a> *cmp = SVFUtil::dyn_cast<CmpInst>(test))</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  {</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a7a7fbd17d13c81a9b259641d6e1cc857">isTestContainsNullAndTheValue</a>(cmp) && <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab254027728c09a23cff8825b335da1c8">isNECmp</a>(cmp);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  }</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span> }</div><div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a02550b1e1110f4cfca868603ce243564"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a02550b1e1110f4cfca868603ce243564">CmpInst</a></div><div class="ttdeci">llvm::CmpInst CmpInst</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00073">BasicTypes.h:73</a></div></div>
|
|
1998
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a7a7fbd17d13c81a9b259641d6e1cc857"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a7a7fbd17d13c81a9b259641d6e1cc857">SVF::SaberCondAllocator::isTestContainsNullAndTheValue</a></div><div class="ttdeci">bool isTestContainsNullAndTheValue(const CmpInst *cmp) const</div><div class="ttdoc">Return true if two values on the predicate are what we want. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00379">SaberCondAllocator.cpp:379</a></div></div>
|
|
1999
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab254027728c09a23cff8825b335da1c8"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab254027728c09a23cff8825b335da1c8">SVF::SaberCondAllocator::isNECmp</a></div><div class="ttdeci">bool isNECmp(const CmpInst *cmp) const</div><div class="ttdoc">Return true if the predicate of this compare instruction is not equal. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00344">SaberCondAllocator.cpp:344</a></div></div>
|
|
2000
2000
|
</div><!-- fragment -->
|
|
2001
2001
|
</div>
|
|
2002
2002
|
</div>
|
|
@@ -2026,10 +2026,10 @@ Static Private Attributes</h2></td></tr>
|
|
|
2026
2026
|
|
|
2027
2027
|
<p>Return true if this is a test null expression. </p>
|
|
2028
2028
|
|
|
2029
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
2030
|
-
<div class="fragment"><div class="line"><a name="
|
|
2029
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00349">349</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
2030
|
+
<div class="fragment"><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> {</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a02550b1e1110f4cfca868603ce243564">CmpInst</a> *cmp = SVFUtil::dyn_cast<CmpInst>(test))</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  {</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a7a7fbd17d13c81a9b259641d6e1cc857">isTestContainsNullAndTheValue</a>(cmp) && <a class="code" href="classSVF_1_1SaberCondAllocator.html#a61a5b10b610d56f7585cf709eb2b2d5b">isEQCmp</a>(cmp);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  }</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a61a5b10b610d56f7585cf709eb2b2d5b"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a61a5b10b610d56f7585cf709eb2b2d5b">SVF::SaberCondAllocator::isEQCmp</a></div><div class="ttdeci">bool isEQCmp(const CmpInst *cmp) const</div><div class="ttdoc">Evaluate test null/not null like expressions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00339">SaberCondAllocator.cpp:339</a></div></div>
|
|
2031
2031
|
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a02550b1e1110f4cfca868603ce243564"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a02550b1e1110f4cfca868603ce243564">CmpInst</a></div><div class="ttdeci">llvm::CmpInst CmpInst</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00073">BasicTypes.h:73</a></div></div>
|
|
2032
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a7a7fbd17d13c81a9b259641d6e1cc857"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a7a7fbd17d13c81a9b259641d6e1cc857">SVF::SaberCondAllocator::isTestContainsNullAndTheValue</a></div><div class="ttdeci">bool isTestContainsNullAndTheValue(const CmpInst *cmp) const</div><div class="ttdoc">Return true if two values on the predicate are what we want. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
2032
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a7a7fbd17d13c81a9b259641d6e1cc857"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a7a7fbd17d13c81a9b259641d6e1cc857">SVF::SaberCondAllocator::isTestContainsNullAndTheValue</a></div><div class="ttdeci">bool isTestContainsNullAndTheValue(const CmpInst *cmp) const</div><div class="ttdoc">Return true if two values on the predicate are what we want. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00379">SaberCondAllocator.cpp:379</a></div></div>
|
|
2033
2033
|
</div><!-- fragment -->
|
|
2034
2034
|
</div>
|
|
2035
2035
|
</div>
|
|
@@ -2051,12 +2051,12 @@ Static Private Attributes</h2></td></tr>
|
|
|
2051
2051
|
|
|
2052
2052
|
<p>Allocate a new condition. </p>
|
|
2053
2053
|
|
|
2054
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
2055
|
-
<div class="fragment"><div class="line"><a name="
|
|
2054
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00591">591</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
2055
|
+
<div class="fragment"><div class="line"><a name="l00592"></a><span class="lineno"> 592</span> {</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> condCountIdx = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a76fad4d58db94d7c572876ba6f1adf83">totalCondNum</a>++;</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> expr = <a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Condition::getContext</a>().bool_const((<span class="stringliteral">"c"</span> + std::to_string(condCountIdx)).c_str());</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> negCond = <a class="code" href="classSVF_1_1Z3Expr.html#a9a545e516e6dee37310ad02481a84356">Condition::NEG</a>(expr);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ae7ba47d494686df48a2a7e86b1f386b4">setCondInst</a>(expr, inst);</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a22b71f885c07fff3c35006337ec41ee7">setNegCondInst</a>(negCond, inst);</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#afd6cf17070e3629ced1ac36b8e2b0bbb">conditionVec</a>.push_back(expr);</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#afd6cf17070e3629ced1ac36b8e2b0bbb">conditionVec</a>.push_back(negCond);</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <span class="keywordflow">return</span> expr;</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a76fad4d58db94d7c572876ba6f1adf83"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a76fad4d58db94d7c572876ba6f1adf83">SVF::SaberCondAllocator::totalCondNum</a></div><div class="ttdeci">static u32_t totalCondNum</div><div class="ttdoc">vector storing z3expression </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00296">SaberCondAllocator.h:296</a></div></div>
|
|
2056
2056
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab4eba98cf7306c89e40975c766d5bf65"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">SVF::SaberCondAllocator::Condition</a></div><div class="ttdeci">Z3Expr Condition</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00052">SaberCondAllocator.h:52</a></div></div>
|
|
2057
|
-
<div class="ttc" id="classSVF_1_1Z3Expr_html_a9a545e516e6dee37310ad02481a84356"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a9a545e516e6dee37310ad02481a84356">SVF::Z3Expr::NEG</a></div><div class="ttdeci">static Z3Expr NEG(const Z3Expr &z3Expr)</div><div class="ttdoc">compute NEG </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#
|
|
2057
|
+
<div class="ttc" id="classSVF_1_1Z3Expr_html_a9a545e516e6dee37310ad02481a84356"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a9a545e516e6dee37310ad02481a84356">SVF::Z3Expr::NEG</a></div><div class="ttdeci">static Z3Expr NEG(const Z3Expr &z3Expr)</div><div class="ttdoc">compute NEG </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00294">Z3Expr.h:294</a></div></div>
|
|
2058
2058
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
|
|
2059
|
-
<div class="ttc" id="classSVF_1_1Z3Expr_html_acfdff582a0188678c10939165a40df30"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">SVF::Z3Expr::getContext</a></div><div class="ttdeci">static z3::context & getContext()</div><div class="ttdoc">Get z3 context, singleton design here to make sure we only have one context. </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8cpp_source.html#
|
|
2059
|
+
<div class="ttc" id="classSVF_1_1Z3Expr_html_acfdff582a0188678c10939165a40df30"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">SVF::Z3Expr::getContext</a></div><div class="ttdeci">static z3::context & getContext()</div><div class="ttdoc">Get z3 context, singleton design here to make sure we only have one context. </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8cpp_source.html#l00066">Z3Expr.cpp:66</a></div></div>
|
|
2060
2060
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_afd6cf17070e3629ced1ac36b8e2b0bbb"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#afd6cf17070e3629ced1ac36b8e2b0bbb">SVF::SaberCondAllocator::conditionVec</a></div><div class="ttdeci">std::vector< Condition > conditionVec</div><div class="ttdoc">bit vector for distinguish neg </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00295">SaberCondAllocator.h:295</a></div></div>
|
|
2061
2061
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ae7ba47d494686df48a2a7e86b1f386b4"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ae7ba47d494686df48a2a7e86b1f386b4">SVF::SaberCondAllocator::setCondInst</a></div><div class="ttdeci">void setCondInst(const Condition &condition, const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00131">SaberCondAllocator.h:131</a></div></div>
|
|
2062
2062
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a22b71f885c07fff3c35006337ec41ee7"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a22b71f885c07fff3c35006337ec41ee7">SVF::SaberCondAllocator::setNegCondInst</a></div><div class="ttdeci">void setNegCondInst(const Condition &condition, const Instruction *inst)</div><div class="ttdoc">mark neg Z3 expression </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00231">SaberCondAllocator.h:231</a></div></div>
|
|
@@ -2081,8 +2081,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
2081
2081
|
<p>Print out the path condition information. </p>
|
|
2082
2082
|
<p>Print path conditions </p>
|
|
2083
2083
|
|
|
2084
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
2085
|
-
<div class="fragment"><div class="line"><a name="
|
|
2084
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00564">564</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
2085
|
+
<div class="fragment"><div class="line"><a name="l00565"></a><span class="lineno"> 565</span> {</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span> </div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"print path condition\n"</span>;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span> </div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &bbCond: <a class="code" href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646">bbConds</a>)</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  {</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *bb = bbCond.first;</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &cit: bbCond.second)</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  {</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ: successors(bb))</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  {</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <span class="keywordflow">if</span> (i == cit.first)</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  {</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> cond = cit.second;</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << bb->getName().str() << <span class="stringliteral">"-->"</span> << succ->getName().str() << <span class="stringliteral">":"</span>;</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="classSVF_1_1SaberCondAllocator.html#a100c1962eac6d7af420defc827a025ed">dumpCond</a>(cond) << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  }</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  i++;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  }</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  }</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  }</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span> }</div><div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00071">BasicTypes.h:71</a></div></div>
|
|
2086
2086
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab4eba98cf7306c89e40975c766d5bf65"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">SVF::SaberCondAllocator::Condition</a></div><div class="ttdeci">Z3Expr Condition</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00052">SaberCondAllocator.h:52</a></div></div>
|
|
2087
2087
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
|
|
2088
2088
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a5c129ebf5ae55eb3af8bd670c921a646"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646">SVF::SaberCondAllocator::bbConds</a></div><div class="ttdeci">BBCondMap bbConds</div><div class="ttdoc">a counter for fresh condition </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00299">SaberCondAllocator.h:299</a></div></div>
|
|
@@ -2137,8 +2137,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
2137
2137
|
<p>we only care about basic blocks have more than one successor</p>
|
|
2138
2138
|
<p>FIXME: llvm getNumSuccessors allows duplicated block in the successors, it makes this assertion fail In this case we may waste a condition allocation, because the overwrite of the previous cond </p>
|
|
2139
2139
|
|
|
2140
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
2141
|
-
<div class="fragment"><div class="line"><a name="
|
|
2140
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00168">168</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
2141
|
+
<div class="fragment"><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> {</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  assert(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a6d9205380948e1bd00708581a64301e1">getBBSuccessorNum</a>(bb) > 1 && <span class="stringliteral">"not more than one successor??"</span>);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> pos = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a5d911cede2f514e87b030e2a93919515">getBBSuccessorPos</a>(bb, succ);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#aa330cc6a1a3c38601ebeb325ffd87221">CondPosMap</a> &condPosMap = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646">bbConds</a>[bb];</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="comment">//assert(condPosMap.find(pos) == condPosMap.end() && "this branch has already been set ");</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  condPosMap[pos] = cond;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_aa330cc6a1a3c38601ebeb325ffd87221"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#aa330cc6a1a3c38601ebeb325ffd87221">SVF::SaberCondAllocator::CondPosMap</a></div><div class="ttdeci">Map< u32_t, Condition > CondPosMap</div><div class="ttdoc">id to instruction map for z3 </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00054">SaberCondAllocator.h:54</a></div></div>
|
|
2142
2142
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
|
|
2143
2143
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a5c129ebf5ae55eb3af8bd670c921a646"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646">SVF::SaberCondAllocator::bbConds</a></div><div class="ttdeci">BBCondMap bbConds</div><div class="ttdoc">a counter for fresh condition </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00299">SaberCondAllocator.h:299</a></div></div>
|
|
2144
2144
|
<div class="ttc" id="namespaceSVF_1_1LLVMUtil_html_a6d9205380948e1bd00708581a64301e1"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a6d9205380948e1bd00708581a64301e1">SVF::LLVMUtil::getBBSuccessorNum</a></div><div class="ttdeci">u32_t getBBSuccessorNum(const BasicBlock *BB)</div><div class="ttdoc">Get num of BB&#39;s successors. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00389">LLVMUtil.cpp:389</a></div></div>
|
|
@@ -2184,7 +2184,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
2184
2184
|
|
|
2185
2185
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00208">208</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
2186
2186
|
<div class="fragment"><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  {</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  BBToCondMap::iterator it = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>.find(bb);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="comment">// until a fixed-point is reached (condition is not changed)</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>.end() && <a class="code" href="classSVF_1_1SaberCondAllocator.html#aa9027574586fd4fbb12039f595ecec71">isEquivalentBranchCond</a>(it->second, cond))</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>[bb] = cond;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a6d29487d00d66dadae7b4b79f9bf50e9"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">SVF::SaberCondAllocator::bbToCondMap</a></div><div class="ttdeci">BBToCondMap bbToCondMap</div><div class="ttdoc">map a basic block to its path condition starting from root </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00291">SaberCondAllocator.h:291</a></div></div>
|
|
2187
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_aa9027574586fd4fbb12039f595ecec71"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#aa9027574586fd4fbb12039f595ecec71">SVF::SaberCondAllocator::isEquivalentBranchCond</a></div><div class="ttdeci">bool isEquivalentBranchCond(const Condition &lhs, const Condition &rhs) const</div><div class="ttdoc">Whether lhs and rhs are equivalent branch conditions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
2187
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_aa9027574586fd4fbb12039f595ecec71"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#aa9027574586fd4fbb12039f595ecec71">SVF::SaberCondAllocator::isEquivalentBranchCond</a></div><div class="ttdeci">bool isEquivalentBranchCond(const Condition &lhs, const Condition &rhs) const</div><div class="ttdoc">Whether lhs and rhs are equivalent branch conditions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00604">SaberCondAllocator.cpp:604</a></div></div>
|
|
2188
2188
|
</div><!-- fragment -->
|
|
2189
2189
|
</div>
|
|
2190
2190
|
</div>
|