svf-tools 1.0.528 → 1.0.531
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/CMakeLists.txt +1 -1
- package/SVF-doxygen/html/html/BreakConstantExpr_8cpp.html +10 -10
- package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/BreakConstantExpr_8h_source.html +3 -3
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/CoreBitVector_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/DCHG_8h_source.html +6 -6
- package/SVF-doxygen/html/html/DPItem_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DataFlowUtil_8h_source.html +3 -3
- package/SVF-doxygen/html/html/ExeState_8h_source.html +1 -1
- package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h.html +4 -4
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ICFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/LLVMLoopAnalysis_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/LLVMModule_8h_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/LLVMUtil_8h.html +10 -10
- package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +4 -4
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/MHP_8cpp.html +5 -5
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/MHP_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/MTA_8h_source.html +4 -4
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PointsTo_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h.html +157 -1351
- package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h_source.html +76 -75
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +24 -24
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +34 -34
- package/SVF-doxygen/html/html/SVFLoop_8h_source.html +32 -32
- package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SaberCondAllocator_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SparseBitVector_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymState_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +17 -17
- package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +2 -2
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/TCT_8h_source.html +2 -2
- package/SVF-doxygen/html/html/WPAPass_8h_source.html +2 -2
- package/SVF-doxygen/html/html/Z3Expr_8h_source.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +149 -149
- package/SVF-doxygen/html/html/classSVF_1_1DCHNode.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MergeFunctionRets.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PTASCEV.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +88 -88
- package/SVF-doxygen/html/html/classSVF_1_1SVFLoop.html +57 -57
- package/SVF-doxygen/html/html/classSVF_1_1SaberCondAllocator.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +25 -25
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +2 -2
- package/SVF-doxygen/html/html/globals_a.html +0 -9
- package/SVF-doxygen/html/html/globals_b.html +4 -19
- package/SVF-doxygen/html/html/globals_c.html +8 -50
- package/SVF-doxygen/html/html/globals_d.html +0 -33
- package/SVF-doxygen/html/html/globals_e.html +0 -6
- package/SVF-doxygen/html/html/globals_f.html +2 -8
- package/SVF-doxygen/html/html/globals_g.html +0 -9
- package/SVF-doxygen/html/html/globals_i.html +4 -22
- package/SVF-doxygen/html/html/globals_l.html +2 -8
- package/SVF-doxygen/html/html/globals_m.html +1 -13
- package/SVF-doxygen/html/html/globals_p.html +0 -3
- package/SVF-doxygen/html/html/globals_r.html +4 -10
- package/SVF-doxygen/html/html/globals_s.html +0 -30
- package/SVF-doxygen/html/html/globals_type.html +1 -284
- package/SVF-doxygen/html/html/globals_u.html +0 -15
- package/SVF-doxygen/html/html/globals_v.html +2 -17
- package/SVF-doxygen/html/html/menudata.js +19 -34
- package/SVF-doxygen/html/html/namespaceSVF.html +1825 -475
- package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +45 -45
- package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +10 -10
- package/SVF-doxygen/html/html/namespacellvm.html +4 -8
- package/SVF-doxygen/html/html/namespacemembers.html +9 -0
- package/SVF-doxygen/html/html/namespacemembers_b.html +13 -0
- package/SVF-doxygen/html/html/namespacemembers_c.html +43 -1
- package/SVF-doxygen/html/html/namespacemembers_d.html +34 -1
- package/SVF-doxygen/html/html/namespacemembers_e.html +6 -0
- package/SVF-doxygen/html/html/namespacemembers_f.html +6 -0
- package/SVF-doxygen/html/html/namespacemembers_g.html +13 -4
- package/SVF-doxygen/html/html/namespacemembers_i.html +26 -8
- package/SVF-doxygen/html/html/namespacemembers_l.html +6 -0
- package/SVF-doxygen/html/html/namespacemembers_m.html +12 -0
- package/SVF-doxygen/html/html/namespacemembers_p.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_r.html +6 -0
- package/SVF-doxygen/html/html/namespacemembers_s.html +30 -0
- package/SVF-doxygen/html/html/namespacemembers_type.html +7 -436
- package/SVF-doxygen/html/html/namespacemembers_type_b.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_type_c.html +8 -8
- package/SVF-doxygen/html/html/namespacemembers_type_e.html +6 -0
- package/SVF-doxygen/html/html/namespacemembers_type_g.html +9 -0
- package/SVF-doxygen/html/html/namespacemembers_type_l.html +0 -3
- package/SVF-doxygen/html/html/namespacemembers_type_m.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_type_n.html +1 -1
- package/SVF-doxygen/html/html/namespacemembers_type_p.html +0 -6
- package/SVF-doxygen/html/html/namespacemembers_type_s.html +3 -18
- package/SVF-doxygen/html/html/namespacemembers_type_t.html +0 -3
- package/SVF-doxygen/html/html/namespacemembers_type_v.html +0 -6
- package/SVF-doxygen/html/html/namespacemembers_u.html +15 -0
- package/SVF-doxygen/html/html/namespacemembers_v.html +15 -0
- package/SVF-doxygen/html/html/search/all_1.js +3 -3
- package/SVF-doxygen/html/html/search/all_10.js +1 -1
- package/SVF-doxygen/html/html/search/all_11.js +2 -2
- package/SVF-doxygen/html/html/search/all_12.js +10 -10
- package/SVF-doxygen/html/html/search/all_14.js +5 -5
- package/SVF-doxygen/html/html/search/all_15.js +5 -5
- package/SVF-doxygen/html/html/search/all_2.js +5 -5
- package/SVF-doxygen/html/html/search/all_3.js +14 -14
- package/SVF-doxygen/html/html/search/all_4.js +11 -11
- package/SVF-doxygen/html/html/search/all_5.js +2 -2
- package/SVF-doxygen/html/html/search/all_6.js +2 -2
- package/SVF-doxygen/html/html/search/all_7.js +3 -3
- package/SVF-doxygen/html/html/search/all_9.js +6 -6
- package/SVF-doxygen/html/html/search/all_c.js +2 -2
- package/SVF-doxygen/html/html/search/all_d.js +4 -4
- package/SVF-doxygen/html/html/search/typedefs_0.js +3 -3
- package/SVF-doxygen/html/html/search/typedefs_1.js +5 -5
- package/SVF-doxygen/html/html/search/typedefs_10.js +10 -10
- package/SVF-doxygen/html/html/search/typedefs_12.js +5 -5
- package/SVF-doxygen/html/html/search/typedefs_13.js +5 -5
- package/SVF-doxygen/html/html/search/typedefs_2.js +14 -14
- package/SVF-doxygen/html/html/search/typedefs_3.js +11 -11
- package/SVF-doxygen/html/html/search/typedefs_4.js +2 -2
- package/SVF-doxygen/html/html/search/typedefs_5.js +2 -2
- package/SVF-doxygen/html/html/search/typedefs_6.js +3 -3
- package/SVF-doxygen/html/html/search/typedefs_7.js +6 -6
- package/SVF-doxygen/html/html/search/typedefs_a.js +2 -2
- package/SVF-doxygen/html/html/search/typedefs_b.js +4 -4
- package/SVF-doxygen/html/html/search/typedefs_e.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_f.js +2 -2
- package/include/MemoryModel/PointsTo.h +1 -1
- package/include/MemoryModel/SVFLoop.h +2 -1
- package/include/SVF-FE/BasicTypes.h +5 -0
- package/include/SVF-FE/CHGBuilder.h +2 -1
- package/include/SVF-FE/LLVMLoopAnalysis.h +1 -1
- package/include/SVF-FE/SymbolTableBuilder.h +1 -1
- package/include/Util/CoreBitVector.h +1 -1
- package/include/Util/DPItem.h +1 -1
- package/include/Util/ExeState.h +1 -1
- package/include/Util/SparseBitVector.h +1 -1
- package/include/Util/SymState.h +1 -1
- package/include/Util/Z3Expr.h +3 -2
- package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
- package/package.json +1 -1
|
@@ -66,7 +66,7 @@ $(function() {
|
|
|
66
66
|
<div class="title">SaberCondAllocator.h</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="SaberCondAllocator_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//===- SaberCondAllocator.h -- Path condition manipulation---------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-2017> <Yulei Sui></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// along with this program. If not, see <http://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * PathAllocator.h</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * Created on: Apr 3, 2014</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#ifndef PATHALLOCATOR_H_</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#define PATHALLOCATOR_H_</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="DataFlowUtil_8h.html">SVF-FE/DataFlowUtil.h</a>"</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "<a class="code" href="SVF-FE_2BasicTypes_8h.html">SVF-FE/BasicTypes.h</a>"</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "<a class="code" href="WorkList_8h.html">Util/WorkList.h</a>"</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "<a class="code" href="SVFG_8h.html">Graphs/SVFG.h</a>"</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include "<a class="code" href="Z3Expr_8h.html">Util/Z3Expr.h</a>"</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html"> 47</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1SaberCondAllocator.html">SaberCondAllocator</a></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65"> 52</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a>; </div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a7ad6d5346ff534f59a332f1194e27d93"> 53</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<u32_t, const Instruction *></a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a7ad6d5346ff534f59a332f1194e27d93">IndexToTermInstMap</a>; </div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#aa330cc6a1a3c38601ebeb325ffd87221"> 54</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<u32_t,Condition></a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#aa330cc6a1a3c38601ebeb325ffd87221">CondPosMap</a>; </div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a80445dc28d9a01c2e0a656f1e2f2a51f"> 55</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const BasicBlock*, CondPosMap ></a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a80445dc28d9a01c2e0a656f1e2f2a51f">BBCondMap</a>; </div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ae4dea0585e5fad34cbfc10fa535b1426"> 56</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const BasicBlock*></a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ae4dea0585e5fad34cbfc10fa535b1426">BasicBlockSet</a>;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a37b7a293dcd12bd13639c55482e856e1"> 57</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const Function*, BasicBlockSet></a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a37b7a293dcd12bd13639c55482e856e1">FunToExitBBsMap</a>; </div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a43782d54ecac8b538c4f8484e8b32dab"> 58</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const BasicBlock*, Condition></a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a43782d54ecac8b538c4f8484e8b32dab">BBToCondMap</a>; </div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a52ec71159bc70b450895990dfebdedac"> 59</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList<const BasicBlock*></a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a52ec71159bc70b450895990dfebdedac">CFWorkList</a>; </div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4b1625597c6b331dfe0e8ceef95731b5">SaberCondAllocator</a>();</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a009db4214557cbe2ff53b81f0519fbcd"> 66</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a009db4214557cbe2ff53b81f0519fbcd">~SaberCondAllocator</a>()</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ac0060d6660cb022e599dbcb9eabc5aaa"> 71</a></span>  <span class="keyword">inline</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ac0060d6660cb022e599dbcb9eabc5aaa">getMemUsage</a>()</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> vmrss, vmsize;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a630ff9c47f58f9b8df7c8a2b3711477c">SVFUtil::getMemoryUsageKB</a>(&vmrss, &vmsize))</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">return</span> std::to_string(vmsize) + <span class="stringliteral">"KB"</span>;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">return</span> <span class="stringliteral">"cannot read memory usage"</span>;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  }</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a634376c35eceaf4dc995a71484d9bc7c"> 79</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a634376c35eceaf4dc995a71484d9bc7c">getCondNum</a>()</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a76fad4d58db94d7c572876ba6f1adf83">totalCondNum</a>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4"> 87</a></span>  <span class="keyword">inline</span> Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">condAnd</a>(<span class="keyword">const</span> Condition& lhs, <span class="keyword">const</span> Condition& rhs)</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>  <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="l00090"></a><span class="lineno"> 90</span>  }</div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a2e4c3f5149a5085a5c8bb7547eae8161"> 91</a></span>  <span class="keyword">inline</span> Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a2e4c3f5149a5085a5c8bb7547eae8161">condOr</a>(<span class="keyword">const</span> Condition& lhs, <span class="keyword">const</span> Condition& rhs)</div><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#ac063ed06c3495b790c02fe57c781b34e">Condition::OR</a>(lhs,rhs);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  }</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a620d53b9af8dd30523c478f4e9655817"> 95</a></span>  <span class="keyword">inline</span> Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a620d53b9af8dd30523c478f4e9655817">condNeg</a>(<span class="keyword">const</span> Condition& cond)</div><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#a9a545e516e6dee37310ad02481a84356">Condition::NEG</a>(cond);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3"> 99</a></span>  <span class="keyword">inline</span> Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keyword"> </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#aaa0c9122f34208235a2d830432665752">Condition::getTrueCond</a>();</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  }</div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4"> 103</a></span>  <span class="keyword">inline</span> Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">getFalseCond</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#af541505af93ccebf57543793658cf495">Condition::getFalseCond</a>();</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a87205db039579f05214507c48d6befec"> 108</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a87205db039579f05214507c48d6befec">exactCondElem</a>(<span class="keyword">const</span> Condition& cond)</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>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> elems;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9f43fe1cacf419f03276d66c3a54fe77">extractSubConds</a>(cond, elems);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">return</span> elems;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a100c1962eac6d7af420defc827a025ed"> 115</a></span>  <span class="keyword">inline</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a100c1962eac6d7af420defc827a025ed">dumpCond</a>(<span class="keyword">const</span> Condition& cond)<span class="keyword"> const</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</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="l00118"></a><span class="lineno"> 118</span>  }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a5a39b2efcec1c77e7f06dda7b64c9765">newCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a0014c59d7f3c7bd0845548aea05a9a5b">allocate</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* module);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="comment">//{@</span></div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a91994fe743ecec3477da5d303c8f004b"> 128</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *<a class="code" href="classSVF_1_1SaberCondAllocator.html#a91994fe743ecec3477da5d303c8f004b">getCondInst</a>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  IndexToTermInstMap::const_iterator it = <a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>.find(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  assert(it != <a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>.end() && <span class="stringliteral">"this should be a fresh condition"</span>);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ae7ba47d494686df48a2a7e86b1f386b4"> 135</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ae7ba47d494686df48a2a7e86b1f386b4">setCondInst</a>(<span class="keyword">const</span> Condition &condition, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)</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>  assert(<a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>.find(condition.<a class="code" href="classSVF_1_1Z3Expr.html#acdb4fbb53f19bac033e79cfe96ce82ca">id</a>()) == <a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>.end() && <span class="stringliteral">"this should be a fresh condition"</span>);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>[condition.<a class="code" href="classSVF_1_1Z3Expr.html#acdb4fbb53f19bac033e79cfe96ce82ca">id</a>()] = inst;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div><div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ad5d27f65374025b6a105ea7a92cbdb50"> 142</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad5d27f65374025b6a105ea7a92cbdb50">isNegCond</a>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4267ed81d5100d49581a4216f46e660c">negConds</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a112f2ede1240c95f9fe810f2882fab80">test</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div><div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#acf93725fa53eda82ea30b8efa1940016"> 148</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">DominatorTree</a>* <a class="code" href="classSVF_1_1SaberCondAllocator.html#acf93725fa53eda82ea30b8efa1940016">getDT</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun)</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  {</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ac9a70a1f69abe85197d95945b6c4ed97">cfInfoBuilder</a>.<a class="code" href="classSVF_1_1PTACFInfoBuilder.html#afb3864bae4ac95c7d3b731634c1abdab">getDT</a>(fun);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  }</div><div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ad19b88bca27044d0d9a6999c88afde97"> 153</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#ab34383ee87cd45eb485fa29db482ffef">PostDominatorTree</a>* <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad19b88bca27044d0d9a6999c88afde97">getPostDT</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun)</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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ac9a70a1f69abe85197d95945b6c4ed97">cfInfoBuilder</a>.<a class="code" href="classSVF_1_1PTACFInfoBuilder.html#a00e3339dab62325354e8ecd8251da0f1">getPostDT</a>(fun);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  }</div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a44932e57515b7ddcc192796679dd69be"> 158</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a77e088bfe47c0b0ddcbbe0693dec6fe5">LoopInfo</a>* <a class="code" href="classSVF_1_1SaberCondAllocator.html#a44932e57515b7ddcc192796679dd69be">getLoopInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* f)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  {</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#ac9a70a1f69abe85197d95945b6c4ed97">cfInfoBuilder</a>.<a class="code" href="classSVF_1_1PTACFInfoBuilder.html#a418e6009760a7c9a048d2ffd9cd29956">getLoopInfo</a>(f);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keyword">virtual</span> Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">ComputeIntraVFGGuard</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* src, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* dst);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keyword">virtual</span> Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a25f4b168340871cf5641fb79d008685a">ComputeInterCallVFGGuard</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* src, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* dst, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* callBB);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">virtual</span> Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a3934d1ebdc728a89db9cec42436004c4">ComputeInterRetVFGGuard</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* src, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* dst, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* retBB);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keyword">virtual</span> Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a79d103da4190c9e868c2446a4bc62f44">getPHIComplementCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* BB1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* BB2, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* BB0);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div><div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a5406e73b860c419143035ee3774e7c1c"> 174</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a5406e73b860c419143035ee3774e7c1c">clearCFCond</a>()</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>.clear();</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  }</div><div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ae717f565b947a72651c0de19bf6bcca0"> 179</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ae717f565b947a72651c0de19bf6bcca0">setCurEvalSVFGNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node)</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  {</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4ac9b5ec6bfd7a7b468cb13a5e8803e0">curEvalSVFGNode</a> = node;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  }</div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a9aec07a64b97d546cfa0efe10f888b6a"> 184</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9aec07a64b97d546cfa0efe10f888b6a">getCurEvalSVFGNode</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4ac9b5ec6bfd7a7b468cb13a5e8803e0">curEvalSVFGNode</a>;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  }</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a389fd522c1de5b4feed34f29b9709d03">printPathCond</a>();</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a7c132cc105a97a5dbf0c9b9d16b4b72a">isSatisfiable</a>(<span class="keyword">const</span> Condition& condition);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div><div class="line"><a name="l00197"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a246da0431273c312800459aa85d80a86"> 197</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a246da0431273c312800459aa85d80a86">isAllPathReachable</a>(Condition& condition)</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  {</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</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="l00200"></a><span class="lineno"> 200</span>  }</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#aa9027574586fd4fbb12039f595ecec71">isEquivalentBranchCond</a>(<span class="keyword">const</span> Condition &lhs, <span class="keyword">const</span> Condition &rhs) <span class="keyword">const</span>;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a6bd67514e0ea9a2704ae83a38c9f2592"> 205</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6bd67514e0ea9a2704ae83a38c9f2592">getICFG</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keyword"> </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_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">PAG::getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</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> </div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div><div class="line"><a name="l00212"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ae7aea2293ca15894af66a98649d25f5b"> 212</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ae7aea2293ca15894af66a98649d25f5b">setCFCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bb, <span class="keyword">const</span> Condition& cond)</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  BBToCondMap::iterator it = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>.find(bb);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="comment">// until a fixed-point is reached (condition is not changed)</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</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="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>[bb] = cond;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f"> 222</a></span>  <span class="keyword">inline</span> Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">getCFCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bb)<span class="keyword"> const</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  BBToCondMap::const_iterator it = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>.find(bb);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">if</span>(it==<a class="code" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>.end())</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">getFalseCond</a>();</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  }</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div><div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a22b71f885c07fff3c35006337ec41ee7"> 235</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a22b71f885c07fff3c35006337ec41ee7">setNegCondInst</a>(<span class="keyword">const</span> Condition &condition, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ae7ba47d494686df48a2a7e86b1f386b4">setCondInst</a>(condition, inst);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4267ed81d5100d49581a4216f46e660c">negConds</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(condition.<a class="code" href="classSVF_1_1Z3Expr.html#acdb4fbb53f19bac033e79cfe96ce82ca">id</a>());</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6e1f93e7f0a5f9f78aa199982b698f9f">allocateForBB</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>& bb);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#af3d224fdc92de272363f411b8f8c2a09">setBranchCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *bb, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ, <span class="keyword">const</span> Condition& cond);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a2b1c2e7764631d40a5b8d0ce2cc73442">getBranchCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> * bb, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ) <span class="keyword">const</span>;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a8926da3e50d32bd1fcf0a011417d445c">getEvalBrCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> * bb, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4d334bb764e2f3feb5da892e0c21b8ed">evaluateBranchCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> * bb, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ) ;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4c3945abc15c6caeb9d026f47e78a340">evaluateLoopExitBranch</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> * bb, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad049eeed763a5f18267b9288f728b070">evaluateTestNullLikeExpr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1BranchStmt.html">BranchStmt</a>* branchStmt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#aac1988c13622c0755d491f0bc2b834df">evaluateProgExit</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1BranchStmt.html">BranchStmt</a>* branchStmt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#adcb9b49512179e016765b50277fc058f">collectBBCallingProgExit</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>& bb);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a7f5f1fb437153d2a797cf509b8f97c7f">isBBCallsProgExit</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bb);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a61a5b10b610d56f7585cf709eb2b2d5b">isEQCmp</a>(<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a02550b1e1110f4cfca868603ce243564">CmpInst</a>* cmp) <span class="keyword">const</span>;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab254027728c09a23cff8825b335da1c8">isNECmp</a>(<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a02550b1e1110f4cfca868603ce243564">CmpInst</a>* cmp) <span class="keyword">const</span>;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a0244cfcb0f23614e8f870383a6bd44b3">isTestNullExpr</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* test) <span class="keyword">const</span>;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a8ffebb3dec9884434be8e432ab1f0063">isTestNotNullExpr</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* test) <span class="keyword">const</span>;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a7a7fbd17d13c81a9b259641d6e1cc857">isTestContainsNullAndTheValue</a>(<span class="keyword">const</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a02550b1e1110f4cfca868603ce243564">CmpInst</a>* cmp) <span class="keyword">const</span>;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a59e01031d81c2e06bbc6577036b51732"> 284</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a59e01031d81c2e06bbc6577036b51732">destroy</a>()</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</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> </div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9f43fe1cacf419f03276d66c3a54fe77">extractSubConds</a>(<span class="keyword">const</span> Condition &condition, <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> &support) <span class="keyword">const</span>;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div><div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ac9a70a1f69abe85197d95945b6c4ed97"> 293</a></span>  <a class="code" href="classSVF_1_1PTACFInfoBuilder.html">PTACFInfoBuilder</a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ac9a70a1f69abe85197d95945b6c4ed97">cfInfoBuilder</a>; </div><div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ad1620cc7482aeb464b53cfce64e17cc3"> 294</a></span>  FunToExitBBsMap <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad1620cc7482aeb464b53cfce64e17cc3">funToExitBBsMap</a>; </div><div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9"> 295</a></span>  BBToCondMap <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>; </div><div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a4ac9b5ec6bfd7a7b468cb13a5e8803e0"> 296</a></span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4ac9b5ec6bfd7a7b468cb13a5e8803e0">curEvalSVFGNode</a>{}; </div><div class="line"><a name="l00297"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881"> 297</a></span>  IndexToTermInstMap <a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>; </div><div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a4267ed81d5100d49581a4216f46e660c"> 298</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4267ed81d5100d49581a4216f46e660c">negConds</a>; </div><div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#afd6cf17070e3629ced1ac36b8e2b0bbb"> 299</a></span>  std::vector<Condition> <a class="code" href="classSVF_1_1SaberCondAllocator.html#afd6cf17070e3629ced1ac36b8e2b0bbb">conditionVec</a>; </div><div class="line"><a name="l00300"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a76fad4d58db94d7c572876ba6f1adf83"> 300</a></span>  <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a76fad4d58db94d7c572876ba6f1adf83">totalCondNum</a>; </div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00303"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646"> 303</a></span>  BBCondMap <a class="code" href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646">bbConds</a>; </div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </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="comment">// End namespace SVF</span></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="preprocessor">#endif </span><span class="comment">/* PATHALLOCATOR_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a009db4214557cbe2ff53b81f0519fbcd"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a009db4214557cbe2ff53b81f0519fbcd">SVF::SaberCondAllocator::~SaberCondAllocator</a></div><div class="ttdeci">virtual ~SaberCondAllocator()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00066">SaberCondAllocator.h:66</a></div></div>
|
|
69
|
+
<a href="SaberCondAllocator_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//===- SaberCondAllocator.h -- Path condition manipulation---------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-2017> <Yulei Sui></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// along with this program. If not, see <http://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * PathAllocator.h</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * Created on: Apr 3, 2014</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#ifndef PATHALLOCATOR_H_</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#define PATHALLOCATOR_H_</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="DataFlowUtil_8h.html">SVF-FE/DataFlowUtil.h</a>"</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "<a class="code" href="SVF-FE_2BasicTypes_8h.html">SVF-FE/BasicTypes.h</a>"</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "<a class="code" href="WorkList_8h.html">Util/WorkList.h</a>"</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "<a class="code" href="SVFG_8h.html">Graphs/SVFG.h</a>"</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include "<a class="code" href="Z3Expr_8h.html">Util/Z3Expr.h</a>"</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html"> 47</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1SaberCondAllocator.html">SaberCondAllocator</a></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65"> 52</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a>; </div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a7ad6d5346ff534f59a332f1194e27d93"> 53</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<u32_t, const Instruction *></a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a7ad6d5346ff534f59a332f1194e27d93">IndexToTermInstMap</a>; </div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#aa330cc6a1a3c38601ebeb325ffd87221"> 54</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<u32_t,Condition></a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#aa330cc6a1a3c38601ebeb325ffd87221">CondPosMap</a>; </div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a80445dc28d9a01c2e0a656f1e2f2a51f"> 55</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const BasicBlock*, CondPosMap ></a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a80445dc28d9a01c2e0a656f1e2f2a51f">BBCondMap</a>; </div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ae4dea0585e5fad34cbfc10fa535b1426"> 56</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const BasicBlock*></a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ae4dea0585e5fad34cbfc10fa535b1426">BasicBlockSet</a>;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a37b7a293dcd12bd13639c55482e856e1"> 57</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const Function*, BasicBlockSet></a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a37b7a293dcd12bd13639c55482e856e1">FunToExitBBsMap</a>; </div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a43782d54ecac8b538c4f8484e8b32dab"> 58</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const BasicBlock*, Condition></a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a43782d54ecac8b538c4f8484e8b32dab">BBToCondMap</a>; </div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a52ec71159bc70b450895990dfebdedac"> 59</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList<const BasicBlock*></a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a52ec71159bc70b450895990dfebdedac">CFWorkList</a>; </div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4b1625597c6b331dfe0e8ceef95731b5">SaberCondAllocator</a>();</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a009db4214557cbe2ff53b81f0519fbcd"> 66</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a009db4214557cbe2ff53b81f0519fbcd">~SaberCondAllocator</a>()</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ac0060d6660cb022e599dbcb9eabc5aaa"> 71</a></span>  <span class="keyword">inline</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ac0060d6660cb022e599dbcb9eabc5aaa">getMemUsage</a>()</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> vmrss, vmsize;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a630ff9c47f58f9b8df7c8a2b3711477c">SVFUtil::getMemoryUsageKB</a>(&vmrss, &vmsize))</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">return</span> std::to_string(vmsize) + <span class="stringliteral">"KB"</span>;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">return</span> <span class="stringliteral">"cannot read memory usage"</span>;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  }</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a634376c35eceaf4dc995a71484d9bc7c"> 79</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a634376c35eceaf4dc995a71484d9bc7c">getCondNum</a>()</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a76fad4d58db94d7c572876ba6f1adf83">totalCondNum</a>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4"> 87</a></span>  <span class="keyword">inline</span> Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">condAnd</a>(<span class="keyword">const</span> Condition& lhs, <span class="keyword">const</span> Condition& rhs)</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>  <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="l00090"></a><span class="lineno"> 90</span>  }</div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a2e4c3f5149a5085a5c8bb7547eae8161"> 91</a></span>  <span class="keyword">inline</span> Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a2e4c3f5149a5085a5c8bb7547eae8161">condOr</a>(<span class="keyword">const</span> Condition& lhs, <span class="keyword">const</span> Condition& rhs)</div><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#ac063ed06c3495b790c02fe57c781b34e">Condition::OR</a>(lhs,rhs);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  }</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a620d53b9af8dd30523c478f4e9655817"> 95</a></span>  <span class="keyword">inline</span> Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a620d53b9af8dd30523c478f4e9655817">condNeg</a>(<span class="keyword">const</span> Condition& cond)</div><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#a9a545e516e6dee37310ad02481a84356">Condition::NEG</a>(cond);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3"> 99</a></span>  <span class="keyword">inline</span> Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keyword"> </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#aaa0c9122f34208235a2d830432665752">Condition::getTrueCond</a>();</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  }</div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4"> 103</a></span>  <span class="keyword">inline</span> Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">getFalseCond</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#af541505af93ccebf57543793658cf495">Condition::getFalseCond</a>();</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a87205db039579f05214507c48d6befec"> 108</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a87205db039579f05214507c48d6befec">exactCondElem</a>(<span class="keyword">const</span> Condition& cond)</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>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> elems;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9f43fe1cacf419f03276d66c3a54fe77">extractSubConds</a>(cond, elems);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">return</span> elems;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a100c1962eac6d7af420defc827a025ed"> 115</a></span>  <span class="keyword">inline</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a100c1962eac6d7af420defc827a025ed">dumpCond</a>(<span class="keyword">const</span> Condition& cond)<span class="keyword"> const</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</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="l00118"></a><span class="lineno"> 118</span>  }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a5a39b2efcec1c77e7f06dda7b64c9765">newCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a0014c59d7f3c7bd0845548aea05a9a5b">allocate</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* module);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="comment">//{@</span></div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a91994fe743ecec3477da5d303c8f004b"> 128</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *<a class="code" href="classSVF_1_1SaberCondAllocator.html#a91994fe743ecec3477da5d303c8f004b">getCondInst</a>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  IndexToTermInstMap::const_iterator it = <a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>.find(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  assert(it != <a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>.end() && <span class="stringliteral">"this should be a fresh condition"</span>);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ae7ba47d494686df48a2a7e86b1f386b4"> 135</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ae7ba47d494686df48a2a7e86b1f386b4">setCondInst</a>(<span class="keyword">const</span> Condition &condition, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)</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>  assert(<a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>.find(condition.<a class="code" href="classSVF_1_1Z3Expr.html#acdb4fbb53f19bac033e79cfe96ce82ca">id</a>()) == <a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>.end() && <span class="stringliteral">"this should be a fresh condition"</span>);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>[condition.<a class="code" href="classSVF_1_1Z3Expr.html#acdb4fbb53f19bac033e79cfe96ce82ca">id</a>()] = inst;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div><div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ad5d27f65374025b6a105ea7a92cbdb50"> 142</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad5d27f65374025b6a105ea7a92cbdb50">isNegCond</a>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4267ed81d5100d49581a4216f46e660c">negConds</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a112f2ede1240c95f9fe810f2882fab80">test</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div><div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#acf93725fa53eda82ea30b8efa1940016"> 148</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">DominatorTree</a>* <a class="code" href="classSVF_1_1SaberCondAllocator.html#acf93725fa53eda82ea30b8efa1940016">getDT</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun)</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  {</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ac9a70a1f69abe85197d95945b6c4ed97">cfInfoBuilder</a>.<a class="code" href="classSVF_1_1PTACFInfoBuilder.html#afb3864bae4ac95c7d3b731634c1abdab">getDT</a>(fun);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  }</div><div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ad19b88bca27044d0d9a6999c88afde97"> 153</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#ab34383ee87cd45eb485fa29db482ffef">PostDominatorTree</a>* <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad19b88bca27044d0d9a6999c88afde97">getPostDT</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun)</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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ac9a70a1f69abe85197d95945b6c4ed97">cfInfoBuilder</a>.<a class="code" href="classSVF_1_1PTACFInfoBuilder.html#a00e3339dab62325354e8ecd8251da0f1">getPostDT</a>(fun);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  }</div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a44932e57515b7ddcc192796679dd69be"> 158</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a77e088bfe47c0b0ddcbbe0693dec6fe5">LoopInfo</a>* <a class="code" href="classSVF_1_1SaberCondAllocator.html#a44932e57515b7ddcc192796679dd69be">getLoopInfo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* f)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  {</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#ac9a70a1f69abe85197d95945b6c4ed97">cfInfoBuilder</a>.<a class="code" href="classSVF_1_1PTACFInfoBuilder.html#a418e6009760a7c9a048d2ffd9cd29956">getLoopInfo</a>(f);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keyword">virtual</span> Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">ComputeIntraVFGGuard</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* src, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* dst);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keyword">virtual</span> Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a25f4b168340871cf5641fb79d008685a">ComputeInterCallVFGGuard</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* src, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* dst, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* callBB);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">virtual</span> Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a3934d1ebdc728a89db9cec42436004c4">ComputeInterRetVFGGuard</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* src, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* dst, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* retBB);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keyword">virtual</span> Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a79d103da4190c9e868c2446a4bc62f44">getPHIComplementCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* BB1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* BB2, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* BB0);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div><div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a5406e73b860c419143035ee3774e7c1c"> 174</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a5406e73b860c419143035ee3774e7c1c">clearCFCond</a>()</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>.clear();</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  }</div><div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ae717f565b947a72651c0de19bf6bcca0"> 179</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ae717f565b947a72651c0de19bf6bcca0">setCurEvalSVFGNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node)</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  {</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4ac9b5ec6bfd7a7b468cb13a5e8803e0">curEvalSVFGNode</a> = node;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  }</div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a9aec07a64b97d546cfa0efe10f888b6a"> 184</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9aec07a64b97d546cfa0efe10f888b6a">getCurEvalSVFGNode</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4ac9b5ec6bfd7a7b468cb13a5e8803e0">curEvalSVFGNode</a>;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  }</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a389fd522c1de5b4feed34f29b9709d03">printPathCond</a>();</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a7c132cc105a97a5dbf0c9b9d16b4b72a">isSatisfiable</a>(<span class="keyword">const</span> Condition& condition);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div><div class="line"><a name="l00197"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a246da0431273c312800459aa85d80a86"> 197</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a246da0431273c312800459aa85d80a86">isAllPathReachable</a>(Condition& condition)</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  {</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</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="l00200"></a><span class="lineno"> 200</span>  }</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#aa9027574586fd4fbb12039f595ecec71">isEquivalentBranchCond</a>(<span class="keyword">const</span> Condition &lhs, <span class="keyword">const</span> Condition &rhs) <span class="keyword">const</span>;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a6bd67514e0ea9a2704ae83a38c9f2592"> 205</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6bd67514e0ea9a2704ae83a38c9f2592">getICFG</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keyword"> </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_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">PAG::getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</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> </div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div><div class="line"><a name="l00212"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ae7aea2293ca15894af66a98649d25f5b"> 212</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ae7aea2293ca15894af66a98649d25f5b">setCFCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bb, <span class="keyword">const</span> Condition& cond)</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  BBToCondMap::iterator it = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>.find(bb);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="comment">// until a fixed-point is reached (condition is not changed)</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</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="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>[bb] = cond;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f"> 222</a></span>  <span class="keyword">inline</span> Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">getCFCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bb)<span class="keyword"> const</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  BBToCondMap::const_iterator it = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>.find(bb);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">if</span>(it==<a class="code" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>.end())</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">getFalseCond</a>();</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  }</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div><div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a22b71f885c07fff3c35006337ec41ee7"> 235</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a22b71f885c07fff3c35006337ec41ee7">setNegCondInst</a>(<span class="keyword">const</span> Condition &condition, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ae7ba47d494686df48a2a7e86b1f386b4">setCondInst</a>(condition, inst);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4267ed81d5100d49581a4216f46e660c">negConds</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(condition.<a class="code" href="classSVF_1_1Z3Expr.html#acdb4fbb53f19bac033e79cfe96ce82ca">id</a>());</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6e1f93e7f0a5f9f78aa199982b698f9f">allocateForBB</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>& bb);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#af3d224fdc92de272363f411b8f8c2a09">setBranchCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *bb, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ, <span class="keyword">const</span> Condition& cond);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a2b1c2e7764631d40a5b8d0ce2cc73442">getBranchCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> * bb, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ) <span class="keyword">const</span>;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a8926da3e50d32bd1fcf0a011417d445c">getEvalBrCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> * bb, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4d334bb764e2f3feb5da892e0c21b8ed">evaluateBranchCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> * bb, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ) ;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4c3945abc15c6caeb9d026f47e78a340">evaluateLoopExitBranch</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> * bb, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad049eeed763a5f18267b9288f728b070">evaluateTestNullLikeExpr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1BranchStmt.html">BranchStmt</a>* branchStmt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  Condition <a class="code" href="classSVF_1_1SaberCondAllocator.html#aac1988c13622c0755d491f0bc2b834df">evaluateProgExit</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1BranchStmt.html">BranchStmt</a>* branchStmt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#adcb9b49512179e016765b50277fc058f">collectBBCallingProgExit</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>& bb);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a7f5f1fb437153d2a797cf509b8f97c7f">isBBCallsProgExit</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bb);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a61a5b10b610d56f7585cf709eb2b2d5b">isEQCmp</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5d875a9d726bb9f68a17efa528dec0b4">CmpInst</a>* cmp) <span class="keyword">const</span>;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab254027728c09a23cff8825b335da1c8">isNECmp</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5d875a9d726bb9f68a17efa528dec0b4">CmpInst</a>* cmp) <span class="keyword">const</span>;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a0244cfcb0f23614e8f870383a6bd44b3">isTestNullExpr</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* test) <span class="keyword">const</span>;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a8ffebb3dec9884434be8e432ab1f0063">isTestNotNullExpr</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* test) <span class="keyword">const</span>;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a7a7fbd17d13c81a9b259641d6e1cc857">isTestContainsNullAndTheValue</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5d875a9d726bb9f68a17efa528dec0b4">CmpInst</a>* cmp) <span class="keyword">const</span>;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a59e01031d81c2e06bbc6577036b51732"> 284</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a59e01031d81c2e06bbc6577036b51732">destroy</a>()</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</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> </div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9f43fe1cacf419f03276d66c3a54fe77">extractSubConds</a>(<span class="keyword">const</span> Condition &condition, <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> &support) <span class="keyword">const</span>;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div><div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ac9a70a1f69abe85197d95945b6c4ed97"> 293</a></span>  <a class="code" href="classSVF_1_1PTACFInfoBuilder.html">PTACFInfoBuilder</a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ac9a70a1f69abe85197d95945b6c4ed97">cfInfoBuilder</a>; </div><div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#ad1620cc7482aeb464b53cfce64e17cc3"> 294</a></span>  FunToExitBBsMap <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad1620cc7482aeb464b53cfce64e17cc3">funToExitBBsMap</a>; </div><div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9"> 295</a></span>  BBToCondMap <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>; </div><div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a4ac9b5ec6bfd7a7b468cb13a5e8803e0"> 296</a></span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4ac9b5ec6bfd7a7b468cb13a5e8803e0">curEvalSVFGNode</a>{}; </div><div class="line"><a name="l00297"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881"> 297</a></span>  IndexToTermInstMap <a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>; </div><div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a4267ed81d5100d49581a4216f46e660c"> 298</a></span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4267ed81d5100d49581a4216f46e660c">negConds</a>; </div><div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#afd6cf17070e3629ced1ac36b8e2b0bbb"> 299</a></span>  std::vector<Condition> <a class="code" href="classSVF_1_1SaberCondAllocator.html#afd6cf17070e3629ced1ac36b8e2b0bbb">conditionVec</a>; </div><div class="line"><a name="l00300"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a76fad4d58db94d7c572876ba6f1adf83"> 300</a></span>  <span class="keyword">static</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a76fad4d58db94d7c572876ba6f1adf83">totalCondNum</a>; </div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00303"></a><span class="lineno"><a class="line" href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646"> 303</a></span>  BBCondMap <a class="code" href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646">bbConds</a>; </div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </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="comment">// End namespace SVF</span></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="preprocessor">#endif </span><span class="comment">/* PATHALLOCATOR_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a009db4214557cbe2ff53b81f0519fbcd"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a009db4214557cbe2ff53b81f0519fbcd">SVF::SaberCondAllocator::~SaberCondAllocator</a></div><div class="ttdeci">virtual ~SaberCondAllocator()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00066">SaberCondAllocator.h:66</a></div></div>
|
|
70
70
|
<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#l00295">SaberCondAllocator.h:295</a></div></div>
|
|
71
71
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_aee401aa2c7884888bbd26544bcd92881"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">SVF::SaberCondAllocator::idToTermInstMap</a></div><div class="ttdeci">IndexToTermInstMap idToTermInstMap</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00297">SaberCondAllocator.h:297</a></div></div>
|
|
72
72
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a25f4b168340871cf5641fb79d008685a"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a25f4b168340871cf5641fb79d008685a">SVF::SaberCondAllocator::ComputeInterCallVFGGuard</a></div><div class="ttdeci">virtual Condition ComputeInterCallVFGGuard(const BasicBlock *src, const BasicBlock *dst, const BasicBlock *callBB)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00476">SaberCondAllocator.cpp:476</a></div></div>
|
|
@@ -121,7 +121,6 @@ $(function() {
|
|
|
121
121
|
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html">BasicTypes.h</a></div></div>
|
|
122
122
|
<div class="ttc" id="classSVF_1_1PTACFInfoBuilder_html_a418e6009760a7c9a048d2ffd9cd29956"><div class="ttname"><a href="classSVF_1_1PTACFInfoBuilder.html#a418e6009760a7c9a048d2ffd9cd29956">SVF::PTACFInfoBuilder::getLoopInfo</a></div><div class="ttdeci">LoopInfo * getLoopInfo(const Function *f)</div><div class="ttdoc">Get loop info of a function. </div><div class="ttdef"><b>Definition:</b> <a href="DataFlowUtil_8cpp_source.html#l00075">DataFlowUtil.cpp:75</a></div></div>
|
|
123
123
|
<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#l00091">SaberCondAllocator.h:91</a></div></div>
|
|
124
|
-
<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>
|
|
125
124
|
<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>
|
|
126
125
|
<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#l00087">SaberCondAllocator.h:87</a></div></div>
|
|
127
126
|
<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>
|
|
@@ -174,6 +173,7 @@ $(function() {
|
|
|
174
173
|
<div class="ttc" id="classSVF_1_1Z3Expr_html_acdb4fbb53f19bac033e79cfe96ce82ca"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#acdb4fbb53f19bac033e79cfe96ce82ca">SVF::Z3Expr::id</a></div><div class="ttdeci">u32_t id() const</div><div class="ttdoc">get id </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00104">Z3Expr.h:104</a></div></div>
|
|
175
174
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html">SVF::SaberCondAllocator</a></div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00047">SaberCondAllocator.h:47</a></div></div>
|
|
176
175
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a87205db039579f05214507c48d6befec"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a87205db039579f05214507c48d6befec">SVF::SaberCondAllocator::exactCondElem</a></div><div class="ttdeci">NodeBS exactCondElem(const Condition &cond)</div><div class="ttdoc">Iterator every element of the condition. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00108">SaberCondAllocator.h:108</a></div></div>
|
|
176
|
+
<div class="ttc" id="namespaceSVF_html_a5d875a9d726bb9f68a17efa528dec0b4"><div class="ttname"><a href="namespaceSVF.html#a5d875a9d726bb9f68a17efa528dec0b4">SVF::CmpInst</a></div><div class="ttdeci">llvm::CmpInst CmpInst</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00076">BasicTypes.h:76</a></div></div>
|
|
177
177
|
<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>
|
|
178
178
|
<div class="ttc" id="classSVF_1_1VFGNode_html"><div class="ttname"><a href="classSVF_1_1VFGNode.html">SVF::VFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00046">VFGNode.h:46</a></div></div>
|
|
179
179
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a37b7a293dcd12bd13639c55482e856e1"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a37b7a293dcd12bd13639c55482e856e1">SVF::SaberCondAllocator::FunToExitBBsMap</a></div><div class="ttdeci">Map< const Function *, BasicBlockSet > 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#l00057">SaberCondAllocator.h:57</a></div></div>
|