svf-tools 1.0.340 → 1.0.341
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +16 -15
- package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +29 -27
- package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +44 -42
- package/SVF-doxygen/html/html/classSVF_1_1MemObj-members.html +23 -22
- package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +69 -46
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo-members.html +17 -15
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +141 -106
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1StInfo.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +17 -16
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +15 -15
- package/SVF-doxygen/html/html/functions_c.html +21 -16
- package/SVF-doxygen/html/html/functions_eval_c.html +5 -2
- package/SVF-doxygen/html/html/functions_func_i.html +19 -17
- package/SVF-doxygen/html/html/functions_i.html +19 -17
- package/SVF-doxygen/html/html/functions_m.html +1 -1
- package/SVF-doxygen/html/html/functions_n.html +3 -3
- package/SVF-doxygen/html/html/functions_o.html +10 -10
- package/SVF-doxygen/html/html/functions_p.html +17 -23
- package/SVF-doxygen/html/html/functions_s.html +7 -9
- package/SVF-doxygen/html/html/functions_w.html +5 -9
- package/SVF-doxygen/html/html/search/all_10.js +11 -11
- package/SVF-doxygen/html/html/search/all_12.js +1 -1
- package/SVF-doxygen/html/html/search/all_13.js +4 -4
- package/SVF-doxygen/html/html/search/all_14.js +4 -4
- package/SVF-doxygen/html/html/search/all_15.js +1 -1
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_3.js +2 -1
- package/SVF-doxygen/html/html/search/all_9.js +4 -4
- package/SVF-doxygen/html/html/search/all_c.js +1 -1
- package/SVF-doxygen/html/html/search/all_d.js +1 -1
- package/SVF-doxygen/html/html/search/all_e.js +1 -1
- package/SVF-doxygen/html/html/search/all_f.js +2 -2
- package/SVF-doxygen/html/html/search/enumvalues_2.js +2 -1
- package/SVF-doxygen/html/html/search/functions_8.js +4 -4
- package/SVF-doxygen/html/html/search/functions_e.js +1 -1
- package/SVF-doxygen/html/html/search/variables_14.js +3 -3
- package/SVF-doxygen/html/html/search/variables_15.js +1 -1
- package/include/MemoryModel/SVFIR.h +1 -1
- package/include/MemoryModel/SymbolTableInfo.h +15 -9
- package/lib/MemoryModel/SymbolTableInfo.cpp +12 -7
- package/lib/SVF-FE/SymbolTableBuilder.cpp +2 -2
- package/lib/Util/PTAStat.cpp +3 -3
- package/package.json +1 -1
|
@@ -66,7 +66,7 @@ $(function() {
|
|
|
66
66
|
<div class="title">SVFIR.h</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="SVFIR_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">//===- SVFIR.h -- IR of SVF ---------------------------------------------//</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-> <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"> * SVFIR.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: 31, 12, 2021</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 SVFIR_H_</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#define SVFIR_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="IRGraph_8h.html">Graphs/IRGraph.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html"> 43</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1IRGraph.html">IRGraph</a></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a46fadea4d08baefc8fbc1d8928da7f6b"> 46</a></span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1SVFIRBuilder.html">SVFIRBuilder</a>;</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a294bb5e174030882a385c790ab835bb3"> 47</a></span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1SVFIR.html#a294bb5e174030882a385c790ab835bb3">ExternalPAG</a>;</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a639210db7230cea2eeaf2d08c953d827"> 48</a></span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PAGBuilderFromFile.html">PAGBuilderFromFile</a>;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ac7f1349df526a5a50741e9303f3bd446"> 49</a></span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1TypeBasedHeapCloning.html">TypeBasedHeapCloning</a>; </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ab4c2e6d44c679a9ba117843f2234784b"> 52</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const CallBlockNode*></a> <a class="code" href="classSVF_1_1SVFIR.html#ab4c2e6d44c679a9ba117843f2234784b">CallSiteSet</a>;</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a0f5732647f3f44ec12617029354fca11"> 53</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap<const CallBlockNode*,NodeID></a> <a class="code" href="classSVF_1_1SVFIR.html#a0f5732647f3f44ec12617029354fca11">CallSiteToFunPtrMap</a>;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ae0aab46dbf1e02d7ec6f754970f485f9"> 54</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID,CallSiteSet></a> <a class="code" href="classSVF_1_1SVFIR.html#ae0aab46dbf1e02d7ec6f754970f485f9">FunPtrToCallSitesMap</a>;</div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ab6abb822445c9b3f5cb2b7206042e940"> 55</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID,NodeBS></a> <a class="code" href="classSVF_1_1SVFIR.html#ab6abb822445c9b3f5cb2b7206042e940">MemObjToFieldsMap</a>;</div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9"> 56</a></span>  <span class="keyword">typedef</span> std::vector<const SVFStmt*> <a class="code" href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9">SVFStmtList</a>;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b"> 57</a></span>  <span class="keyword">typedef</span> std::vector<const SVFVar*> <a class="code" href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVFVarList</a>;</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a08a05dfa6b9734936bb92b3969dbce3b"> 58</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const SVFVar*,PhiStmt*></a> <a class="code" href="classSVF_1_1SVFIR.html#a08a05dfa6b9734936bb92b3969dbce3b">PHINodeMap</a>;</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a4541aa617c79f7922fe8e21c0f2b6b63"> 59</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const SVFFunction*,SVFVarList></a> <a class="code" href="classSVF_1_1SVFIR.html#a4541aa617c79f7922fe8e21c0f2b6b63">FunToArgsListMap</a>;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a0321197dcaf5b00189b6dec732a799ef"> 60</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const CallBlockNode*,SVFVarList></a> <a class="code" href="classSVF_1_1SVFIR.html#a0321197dcaf5b00189b6dec732a799ef">CSToArgsListMap</a>;</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a8a7156b1182e8d32b3899d510514ae42"> 61</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const RetBlockNode*,const SVFVar*></a> <a class="code" href="classSVF_1_1SVFIR.html#a8a7156b1182e8d32b3899d510514ae42">CSToRetMap</a>;</div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ae34e5ff2f065ad752c248337d625b2e3"> 62</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const SVFFunction*,const SVFVar*></a> <a class="code" href="classSVF_1_1SVFIR.html#ae34e5ff2f065ad752c248337d625b2e3">FunToRetMap</a>;</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ac918466df08a2ab30472f3e57935f005"> 63</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const SVFFunction*,SVFStmtSet></a> <a class="code" href="classSVF_1_1SVFIR.html#ac918466df08a2ab30472f3e57935f005">FunToPAGEdgeSetMap</a>;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a4666dabcbeb3f40f96a0694ce2f07eb0"> 64</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const ICFGNode*,SVFStmtList></a> <a class="code" href="classSVF_1_1SVFIR.html#a4666dabcbeb3f40f96a0694ce2f07eb0">ICFGNode2SVFStmtsMap</a>;</div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a654236d64abc2ca95982da7b4408b52d"> 65</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID, NodeID></a> <a class="code" href="classSVF_1_1SVFIR.html#a654236d64abc2ca95982da7b4408b52d">NodeToNodeMap</a>;</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ab0d0aa216dbf7cc8f5b8030d5217e89c"> 66</a></span>  <span class="keyword">typedef</span> std::pair<NodeID, Size_t> <a class="code" href="classSVF_1_1SVFIR.html#ab0d0aa216dbf7cc8f5b8030d5217e89c">NodeOffset</a>;</div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a323e459ca43e239ddcdc8d00c6a8db6d"> 67</a></span>  <span class="keyword">typedef</span> std::pair<NodeID, LocationSet> <a class="code" href="classSVF_1_1SVFIR.html#a323e459ca43e239ddcdc8d00c6a8db6d">NodeLocationSet</a>;</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ae683914bce36e2d387bc0bc97dfcb14d"> 68</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeOffset,NodeID></a> <a class="code" href="classSVF_1_1SVFIR.html#ae683914bce36e2d387bc0bc97dfcb14d">NodeOffsetMap</a>;</div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aa5b08d987b37d35e73de88da10a97bc4"> 69</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeLocationSet,NodeID></a> <a class="code" href="classSVF_1_1SVFIR.html#aa5b08d987b37d35e73de88da10a97bc4">NodeLocationSetMap</a>;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a52dfad2ac907db45a91752c53384fb3d"> 70</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const Value*, NodeLocationSetMap></a> <a class="code" href="classSVF_1_1SVFIR.html#a52dfad2ac907db45a91752c53384fb3d">GepValueVarMap</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ab715a8e83a4ec45fb86298fef3eda95a"> 71</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodePair,NodeID></a> <a class="code" href="classSVF_1_1SVFIR.html#ab715a8e83a4ec45fb86298fef3eda95a">NodePairSetMap</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> <span class="keyword">private</span>:</div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a86c0c23d854b034d741d9d8891debab7"> 76</a></span>  ICFGNode2SVFStmtsMap <a class="code" href="classSVF_1_1SVFIR.html#a86c0c23d854b034d741d9d8891debab7">icfgNode2SVFStmtsMap</a>; </div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aaae756185bbd5b7175e96f8928a989c2"> 77</a></span>  ICFGNode2SVFStmtsMap <a class="code" href="classSVF_1_1SVFIR.html#aaae756185bbd5b7175e96f8928a989c2">icfgNode2PTASVFStmtsMap</a>; </div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ad7bbe1abea55ed03c9b6c81891c0bd67"> 78</a></span>  GepValueVarMap <a class="code" href="classSVF_1_1SVFIR.html#ad7bbe1abea55ed03c9b6c81891c0bd67">GepValObjMap</a>; </div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a148b51118eeba8117e033fea84b56be8"> 79</a></span>  NodeLocationSetMap <a class="code" href="classSVF_1_1SVFIR.html#a148b51118eeba8117e033fea84b56be8">GepObjVarMap</a>; </div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a3c014227661d8976714772205611c252"> 80</a></span>  MemObjToFieldsMap <a class="code" href="classSVF_1_1SVFIR.html#a3c014227661d8976714772205611c252">memToFieldsMap</a>; </div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a71b51492b00e66e36266b9a76a842323"> 81</a></span>  <a class="code" href="classSVF_1_1IRGraph.html#a28ea8f85b0923d00364a010c1fd4e416">SVFStmtSet</a> <a class="code" href="classSVF_1_1SVFIR.html#a71b51492b00e66e36266b9a76a842323">globSVFStmtSet</a>; </div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a41abf665421dbfaef508b1eba0c91fb9"> 82</a></span>  PHINodeMap <a class="code" href="classSVF_1_1SVFIR.html#a41abf665421dbfaef508b1eba0c91fb9">phiNodeMap</a>; </div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a864c465fbfdbbbdcc7fc8bbe26737903"> 83</a></span>  FunToArgsListMap <a class="code" href="classSVF_1_1SVFIR.html#a864c465fbfdbbbdcc7fc8bbe26737903">funArgsListMap</a>; </div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aa0920f5f967efdb89e23f12d31b112a2"> 84</a></span>  CSToArgsListMap <a class="code" href="classSVF_1_1SVFIR.html#aa0920f5f967efdb89e23f12d31b112a2">callSiteArgsListMap</a>; </div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a11ab07f48c934f45c239393332aa60e1"> 85</a></span>  CSToRetMap <a class="code" href="classSVF_1_1SVFIR.html#a11ab07f48c934f45c239393332aa60e1">callSiteRetMap</a>; </div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a4cef56f7fc77b47dc6e65c59c98551c5"> 86</a></span>  FunToRetMap <a class="code" href="classSVF_1_1SVFIR.html#a4cef56f7fc77b47dc6e65c59c98551c5">funRetMap</a>; </div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5"> 87</a></span>  <span class="keyword">static</span> <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>; </div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a0a5f88766b7e11f1ea35befcbcea62dc"> 88</a></span>  CallSiteToFunPtrMap <a class="code" href="classSVF_1_1SVFIR.html#a0a5f88766b7e11f1ea35befcbcea62dc">indCallSiteToFunPtrMap</a>; </div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#af9c840e4b82fe9fd9493eabaa2b52bd5"> 89</a></span>  FunPtrToCallSitesMap <a class="code" href="classSVF_1_1SVFIR.html#af9c840e4b82fe9fd9493eabaa2b52bd5">funPtrToCallSitesMap</a>; </div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <a class="code" href="namespaceSVF.html#a3c2bd95727ec0d9c55c631b6617026c8">OrderedNodeSet</a> <a class="code" href="classSVF_1_1SVFIR.html#abd9f622b55839d6796ca2576f2323498">candidatePointers</a>;</div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#abe8aa0d325b35dd59ce4a7f302760e51"> 93</a></span>  <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* <a class="code" href="classSVF_1_1SVFIR.html#abe8aa0d325b35dd59ce4a7f302760e51">icfg</a>; <span class="comment">// ICFG</span></div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ac6c537688366e73bb0ae5db49c0b2450"> 94</a></span>  CallSiteSet <a class="code" href="classSVF_1_1SVFIR.html#ac6c537688366e73bb0ae5db49c0b2450">callSiteSet</a>; </div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="classSVF_1_1SVFIR.html#abf511f82cdbf7a6d9b6da167aee57636">SVFIR</a>(<span class="keywordtype">bool</span> buildFromFile);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a6834558be6987c91a3732154482c9567">destroy</a>();</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362"> 106</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">getPAG</a>(<span class="keywordtype">bool</span> buildFromFile = <span class="keyword">false</span>)</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">if</span> (pag == <span class="keyword">nullptr</span>)</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>  pag = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFIR.html#abf511f82cdbf7a6d9b6da167aee57636">SVFIR</a>(buildFromFile);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  }</div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a007c86e5d2d541d08815547a5492731e"> 114</a></span>  <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a007c86e5d2d541d08815547a5492731e">releaseSVFIR</a>()</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">if</span> (pag)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  pag = <span class="keyword">nullptr</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>  <span class="keyword">inline</span> MemObjToFieldsMap& <a class="code" href="classSVF_1_1SVFIR.html#a6f46446d667258b32ddc1ccab48f651c">getMemToFieldsMap</a>()</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a3c014227661d8976714772205611c252">memToFieldsMap</a>;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a77e3c407ea3990413e371589aa468963"> 127</a></span>  <span class="keyword">inline</span> NodeLocationSetMap& <a class="code" href="classSVF_1_1SVFIR.html#a77e3c407ea3990413e371589aa468963">getGepObjNodeMap</a>()</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a148b51118eeba8117e033fea84b56be8">GepObjVarMap</a>;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  }</div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da"> 132</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* <a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()</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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#abe8aa0d325b35dd59ce4a7f302760e51">icfg</a>;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  }</div><div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a7990c72dd6d645d713f19ed973841484"> 137</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a3c2bd95727ec0d9c55c631b6617026c8">OrderedNodeSet</a>& <a class="code" href="classSVF_1_1SVFIR.html#a7990c72dd6d645d713f19ed973841484">getAllValidPtrs</a>()</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#abd9f622b55839d6796ca2576f2323498">candidatePointers</a>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#af6a2c401d5c7582a4a958b1fe40838e5">initialiseCandidatePointers</a>();</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a3d62b2a06fe1ec531cbde12131fa31df"> 145</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1SVFIR.html#a3d62b2a06fe1ec531cbde12131fa31df">~SVFIR</a>()</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <a class="code" href="classSVF_1_1SVFIR.html#a6834558be6987c91a3732154482c9567">destroy</a>();</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a2375f49c77f2285a6316e7540b051a0f">handleBlackHole</a>(<span class="keywordtype">bool</span> b);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* <a class="code" href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">getModule</a>()</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-><a class="code" href="classSVF_1_1SymbolTableInfo.html#a40387a4893ae5caf58d6f786533d2f44">getModule</a>();</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& <a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9">SVFStmt::PEDGEK</a> kind)</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IRGraph.html#a3db2c4e2823f16d78c86596da284acd1">KindToSVFStmtSetMap</a>[kind];</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  }</div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a65a4af3d6f0bfc11e31f020bb2966576"> 167</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& <a class="code" href="classSVF_1_1SVFIR.html#a65a4af3d6f0bfc11e31f020bb2966576">getPTASVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9">SVFStmt::PEDGEK</a> kind)</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  {</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IRGraph.html#ae0a9b81717fd834bbd109c4b69aaff9d">KindToPTASVFStmtSetMap</a>[kind];</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  }</div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a63acb4d86d93ad1e88860ac839a8c654"> 172</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a63acb4d86d93ad1e88860ac839a8c654">hasSVFStmtList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* inst)<span class="keyword"> const</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keywordflow">return</span> icfgNode2SVFStmtsMap.find(inst)!=icfgNode2SVFStmtsMap.end();</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  }</div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a0552d565633ee22abe03085134a871c0"> 176</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a0552d565633ee22abe03085134a871c0">hasPTASVFStmtList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* inst)<span class="keyword"> const</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">return</span> icfgNode2PTASVFStmtsMap.find(inst)!=icfgNode2PTASVFStmtsMap.end();</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div><div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a570ad42ad516e3fabb91a3563b618c0b"> 181</a></span>  <span class="keyword">inline</span> SVFStmtList& <a class="code" href="classSVF_1_1SVFIR.html#a570ad42ad516e3fabb91a3563b618c0b">getSVFStmtList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* inst)</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">return</span> icfgNode2SVFStmtsMap[inst];</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  }</div><div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#abb91ed47d5c13d0ad7eec35164e37988"> 186</a></span>  <span class="keyword">inline</span> SVFStmtList& <a class="code" href="classSVF_1_1SVFIR.html#abb91ed47d5c13d0ad7eec35164e37988">getPTASVFStmtList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* inst)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">return</span> icfgNode2PTASVFStmtsMap[inst];</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  }</div><div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a6a84868ab4e2845e884fba08d82b40f6"> 191</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a6a84868ab4e2845e884fba08d82b40f6">addToSVFStmtList</a>(<a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* inst, <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge)</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  edge-><a class="code" href="classSVF_1_1SVFStmt.html#adb92a92f5c878576dff26cb38eab8c8c">setICFGNode</a>(inst);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  icfgNode2SVFStmtsMap[inst].push_back(edge);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">if</span> (edge-><a class="code" href="classSVF_1_1SVFStmt.html#a0b6c03af568b70903da6b200ac86c951">isPTAEdge</a>())</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  icfgNode2PTASVFStmtsMap[inst].push_back(edge);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  }</div><div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a5c5adab1f68520a304fbf70ca40f7687"> 199</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1IRGraph.html#a28ea8f85b0923d00364a010c1fd4e416">SVFStmtSet</a>& <a class="code" href="classSVF_1_1SVFIR.html#a5c5adab1f68520a304fbf70ca40f7687">getGlobalSVFStmtSet</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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a71b51492b00e66e36266b9a76a842323">globSVFStmtSet</a>;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  }</div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aa530e33657f68fc2e8eae9435ce430cb"> 204</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> CallSiteSet& <a class="code" href="classSVF_1_1SVFIR.html#aa530e33657f68fc2e8eae9435ce430cb">getCallSiteSet</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#ac6c537688366e73bb0ae5db49c0b2450">callSiteSet</a>;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  }</div><div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a5de67390d38bfacd5b63b776a0ecbfff"> 209</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a5de67390d38bfacd5b63b776a0ecbfff">isPhiNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node)<span class="keyword"> const</span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">return</span> phiNodeMap.find(node) != phiNodeMap.end();</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div><div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ac359813747b4f75920c5f395ba74f410"> 215</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#ac359813747b4f75920c5f395ba74f410">hasFunArgsList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func)<span class="keyword"> const</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">return</span> (funArgsListMap.find(func) != funArgsListMap.end());</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  }</div><div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a615c056c876b59d1fd174a2ac9ade27c"> 220</a></span>  <span class="keyword">inline</span> FunToArgsListMap& <a class="code" href="classSVF_1_1SVFIR.html#a615c056c876b59d1fd174a2ac9ade27c">getFunArgsMap</a>()</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  {</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a864c465fbfdbbbdcc7fc8bbe26737903">funArgsListMap</a>;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  }</div><div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aa148e3e14ebad8460e32079f2f44413a"> 225</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> SVFVarList& <a class="code" href="classSVF_1_1SVFIR.html#aa148e3e14ebad8460e32079f2f44413a">getFunArgsList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func)<span class="keyword"> const</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  FunToArgsListMap::const_iterator it = funArgsListMap.find(func);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != funArgsListMap.end() && <span class="stringliteral">"this function doesn't have arguments"</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"><a class="line" href="classSVF_1_1SVFIR.html#a2a4185af81e7e10f0db74c39ee220101"> 232</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a2a4185af81e7e10f0db74c39ee220101">hasCallSiteArgsMap</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">return</span> (callSiteArgsListMap.find(cs) != callSiteArgsListMap.end());</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  }</div><div class="line"><a name="l00237"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a346b9300ad16ef65e3ab4e11f88193a7"> 237</a></span>  <span class="keyword">inline</span> CSToArgsListMap& <a class="code" href="classSVF_1_1SVFIR.html#a346b9300ad16ef65e3ab4e11f88193a7">getCallSiteArgsMap</a>()</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  {</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#aa0920f5f967efdb89e23f12d31b112a2">callSiteArgsListMap</a>;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  }</div><div class="line"><a name="l00242"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ac7f90610a7b5f456c530a4419393fae5"> 242</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> SVFVarList& <a class="code" href="classSVF_1_1SVFIR.html#ac7f90610a7b5f456c530a4419393fae5">getCallSiteArgsList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  CSToArgsListMap::const_iterator it = callSiteArgsListMap.find(cs);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != callSiteArgsListMap.end() && <span class="stringliteral">"this call site doesn't have arguments"</span>);</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  }</div><div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a650b3931af337a92ffcb5dad5ab47b22"> 249</a></span>  <span class="keyword">inline</span> CSToRetMap& <a class="code" href="classSVF_1_1SVFIR.html#a650b3931af337a92ffcb5dad5ab47b22">getCallSiteRets</a>()</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a11ab07f48c934f45c239393332aa60e1">callSiteRetMap</a>;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  }</div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a70aa4d730ef1d38ef9c46f5014465bdd"> 254</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* <a class="code" href="classSVF_1_1SVFIR.html#a70aa4d730ef1d38ef9c46f5014465bdd">getCallSiteRet</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetBlockNode.html">RetBlockNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  CSToRetMap::const_iterator it = callSiteRetMap.find(cs);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != callSiteRetMap.end() && <span class="stringliteral">"this call site doesn't have return"</span>);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  }</div><div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a170bef1e9a07ce0449faf66706ae6e61"> 260</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a170bef1e9a07ce0449faf66706ae6e61">callsiteHasRet</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetBlockNode.html">RetBlockNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordflow">return</span> callSiteRetMap.find(cs) != callSiteRetMap.end();</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  }</div><div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#abd1bb12776dc9a17863a52ce2cd31958"> 265</a></span>  <span class="keyword">inline</span> FunToRetMap& <a class="code" href="classSVF_1_1SVFIR.html#abd1bb12776dc9a17863a52ce2cd31958">getFunRets</a>()</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  {</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a4cef56f7fc77b47dc6e65c59c98551c5">funRetMap</a>;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  }</div><div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a34e27b8bcfeaafda190dcdb9169a346f"> 270</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* <a class="code" href="classSVF_1_1SVFIR.html#a34e27b8bcfeaafda190dcdb9169a346f">getFunRet</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func)<span class="keyword"> const</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  FunToRetMap::const_iterator it = funRetMap.find(func);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != funRetMap.end() && <span class="stringliteral">"this function doesn't have return"</span>);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  }</div><div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#afe8274c3b7317fccef5314662a182046"> 276</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#afe8274c3b7317fccef5314662a182046">funHasRet</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func)<span class="keyword"> const</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">return</span> funRetMap.find(func) != funRetMap.end();</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  }</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a4b4592e3187bb6583aba63b2f374754e"> 284</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> <a class="code" href="classSVF_1_1SVFIR.html#a4b4592e3187bb6583aba63b2f374754e">getFieldValNodeNum</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keywordflow">return</span> GepValObjMap.size();</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  }</div><div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#af7a98a5eb789178594063140c85cd21f"> 288</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> <a class="code" href="classSVF_1_1SVFIR.html#af7a98a5eb789178594063140c85cd21f">getFieldObjNodeNum</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordflow">return</span> GepObjVarMap.size();</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div><div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a811c5eaeef1e52cc2d6f56ec5a76bb02"> 295</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a811c5eaeef1e52cc2d6f56ec5a76bb02">getGepValVar</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* curInst, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls)<span class="keyword"> const</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  GepValueVarMap::const_iterator iter = GepValObjMap.find(curInst);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">if</span>(iter==GepValObjMap.end()){</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordflow">return</span> UINT_MAX;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  }</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="keywordflow">else</span>{</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  NodeLocationSetMap::const_iterator lit = iter->second.find(std::make_pair(base, ls));</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">if</span>(lit==iter->second.end())</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">return</span> UINT_MAX;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">return</span> lit->second;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</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> </div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div><div class="line"><a name="l00312"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a2d2131128ceb3362b5dc89317cfd88a0"> 312</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> CallSiteToFunPtrMap& <a class="code" href="classSVF_1_1SVFIR.html#a2d2131128ceb3362b5dc89317cfd88a0">getIndirectCallsites</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a0a5f88766b7e11f1ea35befcbcea62dc">indCallSiteToFunPtrMap</a>;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  }</div><div class="line"><a name="l00316"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a533a01d01fab9e45cd1780f9bbd50b0f"> 316</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a533a01d01fab9e45cd1780f9bbd50b0f">getFunPtr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  CallSiteToFunPtrMap::const_iterator it = indCallSiteToFunPtrMap.find(cs);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it!=indCallSiteToFunPtrMap.end() && <span class="stringliteral">"indirect callsite not have a function pointer?"</span>);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  }</div><div class="line"><a name="l00322"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#abf209739a97b96ae0d1c8451fdc684e8"> 322</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> CallSiteSet& <a class="code" href="classSVF_1_1SVFIR.html#abf209739a97b96ae0d1c8451fdc684e8">getIndCallSites</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> funPtr)<span class="keyword"> const</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  FunPtrToCallSitesMap::const_iterator it = funPtrToCallSitesMap.find(funPtr);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it!=funPtrToCallSitesMap.end() && <span class="stringliteral">"function pointer not used at any indirect callsite?"</span>);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  }</div><div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ad44e1ef13d047f8aea8f6ddf5510bd6c"> 328</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#ad44e1ef13d047f8aea8f6ddf5510bd6c">isIndirectCallSites</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keywordflow">return</span> (indCallSiteToFunPtrMap.find(cs) != indCallSiteToFunPtrMap.end());</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  }</div><div class="line"><a name="l00332"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a9235a60e7332c8416e113e7360441d97"> 332</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a9235a60e7332c8416e113e7360441d97">isFunPtr</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">return</span> (funPtrToCallSitesMap.find(<span class="keywordtype">id</span>) != funPtrToCallSitesMap.end());</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  }</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div><div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a6f41676ae91ba7fad38cc7387dd1c255"> 339</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a6f41676ae91ba7fad38cc7387dd1c255">getIntraPAGEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9">SVFStmt::PEDGEK</a> kind)</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  {</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a6f41676ae91ba7fad38cc7387dd1c255">getIntraPAGEdge</a>(<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src), <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst), kind);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  }</div><div class="line"><a name="l00343"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ac1dbd64071f9822b0404f4ed9c8bd2cd"> 343</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#ac1dbd64071f9822b0404f4ed9c8bd2cd">getIntraPAGEdge</a>(<a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* src, <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dst, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9">SVFStmt::PEDGEK</a> kind)</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  {</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a> edge(src,dst,kind);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& edgeSet = <a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(kind);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  SVFStmt::SVFStmtSetTy::const_iterator it = edgeSet.find(&edge);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != edgeSet.end() && <span class="stringliteral">"can not find pag edge"</span>);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keywordflow">return</span> (*it);</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  }</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> </div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span> </div><div class="line"><a name="l00357"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1"> 357</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>*<a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a>* objPN = SVFUtil::dyn_cast<ObjVar>(node))</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(objPN);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  }</div><div class="line"><a name="l00365"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a25b86c16d11b4d50ccc28ead525687ae"> 365</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>*<a class="code" href="classSVF_1_1SVFIR.html#a25b86c16d11b4d50ccc28ead525687ae">getObject</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a>* node)<span class="keyword"> const</span></div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keywordflow">return</span> node-><a class="code" href="classSVF_1_1ObjVar.html#a6a4feb73b54e602407e35eeb09f55930">getMemObj</a>();</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  }</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls);</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls) ;</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div><div class="line"><a name="l00377"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a2878e202045b7f2c817185e8bf95d354"> 377</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a2878e202045b7f2c817185e8bf95d354">getFIObjVar</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj)<span class="keyword"> const</span></div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">return</span> obj-><a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>();</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  }</div><div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ac9f860028c8cbd364720888084701628"> 381</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#ac9f860028c8cbd364720888084701628">getFIObjVar</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = pag-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa<ObjVar>(node) && <span class="stringliteral">"need an object node"</span>);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a>* obj = SVFUtil::cast<ObjVar>(node);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a2878e202045b7f2c817185e8bf95d354">getFIObjVar</a>(obj-><a class="code" href="classSVF_1_1ObjVar.html#a6a4feb73b54e602407e35eeb09f55930">getMemObj</a>());</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  }</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span> </div><div class="line"><a name="l00392"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a6a71d2716530607d66d9e9035199d997"> 392</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a6a71d2716530607d66d9e9035199d997">isBlkPtr</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1SymbolTableInfo.html#acba43b6e9cdf07afaf3d30351aa8df7c">SymbolTableInfo::isBlkPtr</a>(<span class="keywordtype">id</span>));</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  }</div><div class="line"><a name="l00396"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a18ca66c199b910b15f1bfa77dcc98c30"> 396</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a18ca66c199b910b15f1bfa77dcc98c30">isNullPtr</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1SymbolTableInfo.html#ad095e4a569d399cadc03ce864f61c394">SymbolTableInfo::isNullPtr</a>(<span class="keywordtype">id</span>));</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  }</div><div class="line"><a name="l00400"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ad9895f2d075eb402390e3b01ed68e001"> 400</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#ad9895f2d075eb402390e3b01ed68e001">isBlkObjOrConstantObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1SVFIR.html#a17527c55d35ae5c18f00fd4dabe6acad">isBlkObj</a>(<span class="keywordtype">id</span>) || <a class="code" href="classSVF_1_1SVFIR.html#a5d15e4b09784f438568ebe61f8aa5156">isConstantObj</a>(<span class="keywordtype">id</span>));</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  }</div><div class="line"><a name="l00404"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a17527c55d35ae5c18f00fd4dabe6acad"> 404</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a17527c55d35ae5c18f00fd4dabe6acad">isBlkObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#ad9cdb21e20182f3bc95f04bbb97712f3">SymbolTableInfo::isBlkObj</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  }</div><div class="line"><a name="l00408"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a5d15e4b09784f438568ebe61f8aa5156"> 408</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a5d15e4b09784f438568ebe61f8aa5156">isConstantObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(obj && <span class="stringliteral">"not an object node?"</span>);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#a704b917b1e1dbaf9cd758fa9acc1083b">SymbolTableInfo::isConstantObj</a>(<span class="keywordtype">id</span>) || obj-><a class="code" href="classSVF_1_1MemObj.html#a3f429b085f749ed0c8269517eb9094ae">isConstant</a>();</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  }</div><div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a07716ca7f769f704a80ccee1a6ad7ee2"> 414</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a07716ca7f769f704a80ccee1a6ad7ee2">isNonPointerObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FIObjVar.html">FIObjVar</a>* fiNode = SVFUtil::dyn_cast<FIObjVar>(node))</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  {</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">return</span> (fiNode->getMemObj()->hasPtrObj() == <span class="keyword">false</span>);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  }</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a>* gepNode = SVFUtil::dyn_cast<GepObjVar>(node))</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  {</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="keywordflow">return</span> (gepNode->getMemObj()->isNonPtrFieldObj(gepNode->getLocationSet()));</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  }</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<DummyObjVar>(node))</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  {</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  }</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  {</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"expecting a object node"</span>);</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  }</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  }</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span> </div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a5298f34143ec3a2e6bb74ebad668cbbc">getBaseValVar</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> <a class="code" href="classSVF_1_1SVFIR.html#a8b36d077c30fb2830a253ded82413c2d">getLocationSetFromBaseNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08"> 442</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749">getBaseObj</a>(<span class="keywordtype">id</span>)-><a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>();</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  }</div><div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749"> 446</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* <a class="code" href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749">getBaseObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = pag-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa<ObjVar>(node) && <span class="stringliteral">"need an object node"</span>);</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a>* obj = SVFUtil::cast<ObjVar>(node);</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keywordflow">return</span> obj-><a class="code" href="classSVF_1_1ObjVar.html#a6a4feb73b54e602407e35eeb09f55930">getMemObj</a>();</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  }</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span> </div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span> </div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& <a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">getAllFieldsObjVars</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& <a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">getAllFieldsObjVars</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>);</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1SVFIR.html#a42d1e2f0213fb6e54c56cc0695b57cb0">getFieldsAfterCollapse</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>);</div><div class="line"><a name="l00461"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0"> 461</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>()</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  {</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>(<a class="code" href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">NodeIDAllocator::get</a>()->allocateValueId());</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  }</div><div class="line"><a name="l00465"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a18388bc282c5329a837c6a273893c4fb"> 465</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a18388bc282c5329a837c6a273893c4fb">addDummyObjNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  {</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a18388bc282c5329a837c6a273893c4fb">addDummyObjNode</a>(<a class="code" href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">NodeIDAllocator::get</a>()->allocateObjectId(), type);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  }</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span> </div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#addc84dae75be8e8b9deccdb4360736d3">isValidPointer</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId) <span class="keyword">const</span>;</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a5c3b194ebada47baaccf0e9f3ab1a139">isValidTopLevelPtr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node);</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span> </div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a236b4fefd16e9c793c5bd6d576290841">print</a>();</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> </div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span> </div><div class="line"><a name="l00482"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523"> 482</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge) {</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordtype">bool</span> added = <a class="code" href="classSVF_1_1IRGraph.html#a3db2c4e2823f16d78c86596da284acd1">KindToSVFStmtSetMap</a>[edge-><a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>()].insert(edge).second;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(added && <span class="stringliteral">"duplicated edge, not added!!!"</span>);</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="keywordflow">if</span> (edge-><a class="code" href="classSVF_1_1SVFStmt.html#a0b6c03af568b70903da6b200ac86c951">isPTAEdge</a>())</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <a class="code" href="classSVF_1_1IRGraph.html#a9f68ffe75e3d9457092ac2368aa08a27">totalPTAPAGEdge</a>++;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <a class="code" href="classSVF_1_1IRGraph.html#ae0a9b81717fd834bbd109c4b69aaff9d">KindToPTASVFStmtSetMap</a>[edge-><a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>()].insert(edge);</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  }</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  }</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> </div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#ac27b9eedd489f13175c010a32203abae">addFunArgs</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* arg)</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  {</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <a class="code" href="classSVF_1_1FunEntryBlockNode.html">FunEntryBlockNode</a>* funEntryBlockNode = icfg-><a class="code" href="classSVF_1_1ICFG.html#ae1ef14cdda27a2062c4c454750444108">getFunEntryBlockNode</a>(fun);</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  funEntryBlockNode-><a class="code" href="classSVF_1_1FunEntryBlockNode.html#ae6ebc073885c5d47f685c61097dadf20">addFormalParms</a>(arg);</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  funArgsListMap[fun].push_back(arg);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  }</div><div class="line"><a name="l00501"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a53774463f34bb8b528b179b72b48fd69"> 501</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a53774463f34bb8b528b179b72b48fd69">addFunRet</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* ret)</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  {</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <a class="code" href="classSVF_1_1FunExitBlockNode.html">FunExitBlockNode</a>* funExitBlockNode = icfg-><a class="code" href="classSVF_1_1ICFG.html#aa33426d57dc150956902945a17a29bcb">getFunExitBlockNode</a>(fun);</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  funExitBlockNode-><a class="code" href="classSVF_1_1FunExitBlockNode.html#ae1499a3ea7d5bb90dccd5d04a8b97dfc">addFormalRet</a>(ret);</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  funRetMap[fun] = ret;</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  }</div><div class="line"><a name="l00508"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a5fafbfd6a30b8796b92a3a1f3409767f"> 508</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a5fafbfd6a30b8796b92a3a1f3409767f">addCallSiteArgs</a>(<a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* callBlockNode,<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* arg)</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  {</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  callBlockNode-><a class="code" href="classSVF_1_1CallBlockNode.html#a6d819186e239e68c117af16ed405da84">addActualParms</a>(arg);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  callSiteArgsListMap[callBlockNode].push_back(arg);</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  }</div><div class="line"><a name="l00514"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a3c8070a1d7a6a705433b05dd633185b1"> 514</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a3c8070a1d7a6a705433b05dd633185b1">addCallSiteRets</a>(<a class="code" href="classSVF_1_1RetBlockNode.html">RetBlockNode</a>* retBlockNode,<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* arg)</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  {</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  retBlockNode-><a class="code" href="classSVF_1_1RetBlockNode.html#ad2cd6f6589ce5464d6fbcac49f115714">addActualRet</a>(arg);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  callSiteRetMap[retBlockNode]= arg;</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  }</div><div class="line"><a name="l00520"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aa91db3ebf92eacf077ae7b4d0735635b"> 520</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#aa91db3ebf92eacf077ae7b4d0735635b">addIndirectCallsites</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> funPtr)</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  {</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="keywordtype">bool</span> added = indCallSiteToFunPtrMap.insert(std::make_pair(cs,funPtr)).second;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  funPtrToCallSitesMap[funPtr].insert(cs);</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(added && <span class="stringliteral">"adding the same indirect callsite twice?"</span>);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  }</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span> </div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a93bc14960cdd4eb345c64e9b79757ccf">addValNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i)</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  {</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a> *node = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ValVar.html">ValVar</a>(val,i);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a93bc14960cdd4eb345c64e9b79757ccf">addValNode</a>(val, node, i);</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  }</div><div class="line"><a name="l00536"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d"> 536</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">addObjNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i)</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  {</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* mem = <a class="code" href="classSVF_1_1IRGraph.html#a4f5792216c6f38c32dac5074862ffc50">getMemObj</a>(val);</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(((mem-><a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>() == i)) && <span class="stringliteral">"not same object id?"</span>);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a06465449e58e14bfb1c3eee2c97d3242">addFIObjNode</a>(mem);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  }</div><div class="line"><a name="l00543"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a38f6d0c7db935fd4e556761f96f1fa09"> 543</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a38f6d0c7db935fd4e556761f96f1fa09">addRetNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* val, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i)</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  {</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a> *node = <span class="keyword">new</span> <a class="code" href="classSVF_1_1RetPN.html">RetPN</a>(val,i);</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a38f6d0c7db935fd4e556761f96f1fa09">addRetNode</a>(val, node, i);</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  }</div><div class="line"><a name="l00549"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a6ade5bf3edc7b6c3faafc3e5ff3d0538"> 549</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a6ade5bf3edc7b6c3faafc3e5ff3d0538">addVarargNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* val, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i)</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  {</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a> *node = <span class="keyword">new</span> <a class="code" href="classSVF_1_1VarArgPN.html">VarArgPN</a>(val,i);</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IRGraph.html#a685f1a8a35aa5dc9c298e3b0e2ccf007">addNode</a>(node,i);</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  }</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> </div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a9a702ceb8ba3851daef444f1ece3a2f8">addGepValNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* curInst,<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *type, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> fieldidx);</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a1ac1e7752e98abff7054f4caa709260d">addGepObjNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls);</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a06465449e58e14bfb1c3eee2c97d3242">addFIObjNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span> </div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span> </div><div class="line"><a name="l00565"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a6b1bb039f068ff2ab486214354df4684"> 565</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a6b1bb039f068ff2ab486214354df4684">addDummyValNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i)</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a93bc14960cdd4eb345c64e9b79757ccf">addValNode</a>(<span class="keyword">nullptr</span>, <span class="keyword">new</span> <a class="code" href="classSVF_1_1DummyValVar.html">DummyValVar</a>(i), i);</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  }</div><div class="line"><a name="l00569"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a3071c94ea72048d74a65a409a906af35"> 569</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a3071c94ea72048d74a65a409a906af35">addDummyObjNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  {</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* mem = <a class="code" href="classSVF_1_1SVFIR.html#a4ee79c74a7a2cea5c063fa598ab89532">addDummyMemObj</a>(i, type);</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">addObjNode</a>(<span class="keyword">nullptr</span>, <span class="keyword">new</span> <a class="code" href="classSVF_1_1DummyObjVar.html">DummyObjVar</a>(i,mem), i);</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  }</div><div class="line"><a name="l00574"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a4ee79c74a7a2cea5c063fa598ab89532"> 574</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* <a class="code" href="classSVF_1_1SVFIR.html#a4ee79c74a7a2cea5c063fa598ab89532">addDummyMemObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  {</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-><a class="code" href="classSVF_1_1SymbolTableInfo.html#a8e40c578ccdd3a108a10a191a309bd18">createDummyObj</a>(i,type);</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  }</div><div class="line"><a name="l00578"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a2b532a5db0197c579b512fbcdb4d6220"> 578</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a2b532a5db0197c579b512fbcdb4d6220">addBlackholeObjNode</a>()</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  {</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">addObjNode</a>(<span class="keyword">nullptr</span>, <span class="keyword">new</span> <a class="code" href="classSVF_1_1DummyObjVar.html">DummyObjVar</a>(<a class="code" href="classSVF_1_1IRGraph.html#a3ce34b9fcb651689bce44ab48fbcdff0">getBlackHoleNode</a>(),<a class="code" href="classSVF_1_1IRGraph.html#aafe9544b07a8c40bf915613df11df48e">getBlackHoleObj</a>()), <a class="code" href="classSVF_1_1IRGraph.html#a3ce34b9fcb651689bce44ab48fbcdff0">getBlackHoleNode</a>());</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  }</div><div class="line"><a name="l00582"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aff3f3ff198e7511576484dfda7bf051b"> 582</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#aff3f3ff198e7511576484dfda7bf051b">addConstantObjNode</a>()</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  {</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">addObjNode</a>(<span class="keyword">nullptr</span>, <span class="keyword">new</span> <a class="code" href="classSVF_1_1DummyObjVar.html">DummyObjVar</a>(<a class="code" href="classSVF_1_1IRGraph.html#ac5da3a0cbe040a45d719b6f6a23aed91">getConstantNode</a>(),<a class="code" href="classSVF_1_1IRGraph.html#aceae1e4e49a1d2e63ef3d71a7e5ef3eb">getConstantObj</a>()), <a class="code" href="classSVF_1_1IRGraph.html#ac5da3a0cbe040a45d719b6f6a23aed91">getConstantNode</a>());</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  }</div><div class="line"><a name="l00586"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a2b1de62f88588b068d4eed125049ed8d"> 586</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a2b1de62f88588b068d4eed125049ed8d">addBlackholePtrNode</a>()</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  {</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>(<a class="code" href="classSVF_1_1IRGraph.html#a3b417ee79560fd00f4cf80906044c198">getBlkPtr</a>());</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  }</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div><div class="line"><a name="l00593"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a3face8a526a33d82ef7cde7602030bc9"> 593</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a3face8a526a33d82ef7cde7602030bc9">addValNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*, <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a> *node, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i)</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  {</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1GenericGraph.html#a6885064afa211958af7b73f0233284e5">hasGNode</a>(i) == <span class="keyword">false</span> && <span class="stringliteral">"This NodeID clashes here. Please check NodeIDAllocator. Switch Strategy::DEBUG to SEQ or DENSE"</span>);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IRGraph.html#a685f1a8a35aa5dc9c298e3b0e2ccf007">addNode</a>(node,i);</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  }</div><div class="line"><a name="l00599"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a3a5d8b7f6286ec31b5a9038c88779151"> 599</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a3a5d8b7f6286ec31b5a9038c88779151">addObjNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*, <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a> *node, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i)</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  {</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1GenericGraph.html#a6885064afa211958af7b73f0233284e5">hasGNode</a>(i) == <span class="keyword">false</span> && <span class="stringliteral">"This NodeID clashes here. Please check NodeIDAllocator. Switch Strategy::DEBUG to SEQ or DENSE"</span>);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IRGraph.html#a685f1a8a35aa5dc9c298e3b0e2ccf007">addNode</a>(node,i);</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  }</div><div class="line"><a name="l00605"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a1f63adcd679596996ee2eabf0179462f"> 605</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a1f63adcd679596996ee2eabf0179462f">addRetNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>*, <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a> *node, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i)</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  {</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IRGraph.html#a685f1a8a35aa5dc9c298e3b0e2ccf007">addNode</a>(node,i);</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  }</div><div class="line"><a name="l00610"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a078c01295f47bf12f1a2b8abfab8b28d"> 610</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a078c01295f47bf12f1a2b8abfab8b28d">addVarargNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>*, <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a> *node, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i)</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  {</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IRGraph.html#a685f1a8a35aa5dc9c298e3b0e2ccf007">addNode</a>(node,i);</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  }</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span> </div><div class="line"><a name="l00616"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ae3d9b4acb63a7dbe316e87bad4e3987a"> 616</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#ae3d9b4acb63a7dbe316e87bad4e3987a">addGlobalPAGEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge)</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  {</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  globSVFStmtSet.insert(edge);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  }</div><div class="line"><a name="l00621"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a51f28f03a236b244b636ca88c5511a30"> 621</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a51f28f03a236b244b636ca88c5511a30">addCallSite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* call)</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  {</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  callSiteSet.insert(call);</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  }</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span> </div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  <a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a8436a7eede7b5ff5d9b80a0c951ea729">addAddrStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst);</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <a class="code" href="classSVF_1_1CopyStmt.html">CopyStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#aa54b93ebf36944b548aaa74dbf8a144f">addCopyStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst);</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <a class="code" href="classSVF_1_1PhiStmt.html">PhiStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#af6b4b35214d0e526dee13dadbb6326d0">addPhiStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> res, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> opnd);</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  <a class="code" href="classSVF_1_1CmpStmt.html">CmpStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a7eb14738f0cf08cc8b5c623c953db4ba">addCmpStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> predict);</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <a class="code" href="classSVF_1_1BinaryOPStmt.html">BinaryOPStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a955a2f93cf9eef857e40f19bc24edb2f">addBinaryOPStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode);</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <a class="code" href="classSVF_1_1UnaryOPStmt.html">UnaryOPStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a8abc436992aa3b6b636084ff5f9a8ef2">addUnaryOPStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode);</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <a class="code" href="classSVF_1_1BranchStmt.html">BranchStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a4f0d318deff3b97a4bd5e7b9d53e42fd">addBranchStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> br, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond, std::vector<const ICFGNode*> succs);</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a3837804b2622baf7e6991aa993286e9e">addLoadStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst);</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a4b491e2d3eb5e041677decd73136c870">addStoreStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1IntraBlockNode.html">IntraBlockNode</a>* val);</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* <a class="code" href="classSVF_1_1SVFIR.html#a9e99fcf29016ef401f53491ec54a4053">addCallPE</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs);</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>* <a class="code" href="classSVF_1_1SVFIR.html#a12fef4ec0537b26947eb0ab10799f29f">addRetPE</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs);</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a9eeab593b2f161ad268d27a7031aedbe">addGepStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls, <span class="keywordtype">bool</span> constGep);</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <a class="code" href="classSVF_1_1NormalGepStmt.html">NormalGepStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a2a851ff7011e3bd71c36be5c7198a1f4">addNormalGepStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <a class="code" href="classSVF_1_1VariantGepStmt.html">VariantGepStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#abbd4b6430444a91e991636abf189c00b">addVariantGepStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls);</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <a class="code" href="classSVF_1_1TDForkPE.html">TDForkPE</a>* <a class="code" href="classSVF_1_1SVFIR.html#a787dc5aff6f7a7d8ec3a7a23d9f40a7e">addThreadForkPE</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs);</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <a class="code" href="classSVF_1_1TDJoinPE.html">TDJoinPE</a>* <a class="code" href="classSVF_1_1SVFIR.html#a4f64a1a266838ac72b66cca138ec57ca">addThreadJoinPE</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span> </div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a33df5f5d9b7de3846cf973135b04f513">addBlackHoleAddrStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span> };</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span> </div><div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="namespaceSVF.html#ac47d39fb505e8ed8d2c6b6b318be5f4d"> 665</a></span> <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a> <a class="code" href="namespaceSVF.html#ac47d39fb505e8ed8d2c6b6b318be5f4d">PAG</a>;</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span> </div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span> } <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span> </div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span> </div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span> </div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="preprocessor">#endif </span><span class="comment">/* SVFIR_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1SVFIR_html_aa5b08d987b37d35e73de88da10a97bc4"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa5b08d987b37d35e73de88da10a97bc4">SVF::SVFIR::NodeLocationSetMap</a></div><div class="ttdeci">Map< NodeLocationSet, NodeID > NodeLocationSetMap</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00069">SVFIR.h:69</a></div></div>
|
|
69
|
+
<a href="SVFIR_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">//===- SVFIR.h -- IR of SVF ---------------------------------------------//</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-> <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"> * SVFIR.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: 31, 12, 2021</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 SVFIR_H_</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#define SVFIR_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="IRGraph_8h.html">Graphs/IRGraph.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html"> 43</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1IRGraph.html">IRGraph</a></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a46fadea4d08baefc8fbc1d8928da7f6b"> 46</a></span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1SVFIRBuilder.html">SVFIRBuilder</a>;</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a294bb5e174030882a385c790ab835bb3"> 47</a></span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1SVFIR.html#a294bb5e174030882a385c790ab835bb3">ExternalPAG</a>;</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a639210db7230cea2eeaf2d08c953d827"> 48</a></span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PAGBuilderFromFile.html">PAGBuilderFromFile</a>;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ac7f1349df526a5a50741e9303f3bd446"> 49</a></span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1TypeBasedHeapCloning.html">TypeBasedHeapCloning</a>; </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ab4c2e6d44c679a9ba117843f2234784b"> 52</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const CallBlockNode*></a> <a class="code" href="classSVF_1_1SVFIR.html#ab4c2e6d44c679a9ba117843f2234784b">CallSiteSet</a>;</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a0f5732647f3f44ec12617029354fca11"> 53</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap<const CallBlockNode*,NodeID></a> <a class="code" href="classSVF_1_1SVFIR.html#a0f5732647f3f44ec12617029354fca11">CallSiteToFunPtrMap</a>;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ae0aab46dbf1e02d7ec6f754970f485f9"> 54</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID,CallSiteSet></a> <a class="code" href="classSVF_1_1SVFIR.html#ae0aab46dbf1e02d7ec6f754970f485f9">FunPtrToCallSitesMap</a>;</div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ab6abb822445c9b3f5cb2b7206042e940"> 55</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID,NodeBS></a> <a class="code" href="classSVF_1_1SVFIR.html#ab6abb822445c9b3f5cb2b7206042e940">MemObjToFieldsMap</a>;</div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9"> 56</a></span>  <span class="keyword">typedef</span> std::vector<const SVFStmt*> <a class="code" href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9">SVFStmtList</a>;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b"> 57</a></span>  <span class="keyword">typedef</span> std::vector<const SVFVar*> <a class="code" href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVFVarList</a>;</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a08a05dfa6b9734936bb92b3969dbce3b"> 58</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const SVFVar*,PhiStmt*></a> <a class="code" href="classSVF_1_1SVFIR.html#a08a05dfa6b9734936bb92b3969dbce3b">PHINodeMap</a>;</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a4541aa617c79f7922fe8e21c0f2b6b63"> 59</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const SVFFunction*,SVFVarList></a> <a class="code" href="classSVF_1_1SVFIR.html#a4541aa617c79f7922fe8e21c0f2b6b63">FunToArgsListMap</a>;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a0321197dcaf5b00189b6dec732a799ef"> 60</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const CallBlockNode*,SVFVarList></a> <a class="code" href="classSVF_1_1SVFIR.html#a0321197dcaf5b00189b6dec732a799ef">CSToArgsListMap</a>;</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a8a7156b1182e8d32b3899d510514ae42"> 61</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const RetBlockNode*,const SVFVar*></a> <a class="code" href="classSVF_1_1SVFIR.html#a8a7156b1182e8d32b3899d510514ae42">CSToRetMap</a>;</div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ae34e5ff2f065ad752c248337d625b2e3"> 62</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const SVFFunction*,const SVFVar*></a> <a class="code" href="classSVF_1_1SVFIR.html#ae34e5ff2f065ad752c248337d625b2e3">FunToRetMap</a>;</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ac918466df08a2ab30472f3e57935f005"> 63</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const SVFFunction*,SVFStmtSet></a> <a class="code" href="classSVF_1_1SVFIR.html#ac918466df08a2ab30472f3e57935f005">FunToPAGEdgeSetMap</a>;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a4666dabcbeb3f40f96a0694ce2f07eb0"> 64</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const ICFGNode*,SVFStmtList></a> <a class="code" href="classSVF_1_1SVFIR.html#a4666dabcbeb3f40f96a0694ce2f07eb0">ICFGNode2SVFStmtsMap</a>;</div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a654236d64abc2ca95982da7b4408b52d"> 65</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID, NodeID></a> <a class="code" href="classSVF_1_1SVFIR.html#a654236d64abc2ca95982da7b4408b52d">NodeToNodeMap</a>;</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ab0d0aa216dbf7cc8f5b8030d5217e89c"> 66</a></span>  <span class="keyword">typedef</span> std::pair<NodeID, Size_t> <a class="code" href="classSVF_1_1SVFIR.html#ab0d0aa216dbf7cc8f5b8030d5217e89c">NodeOffset</a>;</div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a323e459ca43e239ddcdc8d00c6a8db6d"> 67</a></span>  <span class="keyword">typedef</span> std::pair<NodeID, LocationSet> <a class="code" href="classSVF_1_1SVFIR.html#a323e459ca43e239ddcdc8d00c6a8db6d">NodeLocationSet</a>;</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ae683914bce36e2d387bc0bc97dfcb14d"> 68</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeOffset,NodeID></a> <a class="code" href="classSVF_1_1SVFIR.html#ae683914bce36e2d387bc0bc97dfcb14d">NodeOffsetMap</a>;</div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aa5b08d987b37d35e73de88da10a97bc4"> 69</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeLocationSet,NodeID></a> <a class="code" href="classSVF_1_1SVFIR.html#aa5b08d987b37d35e73de88da10a97bc4">NodeLocationSetMap</a>;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a52dfad2ac907db45a91752c53384fb3d"> 70</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const Value*, NodeLocationSetMap></a> <a class="code" href="classSVF_1_1SVFIR.html#a52dfad2ac907db45a91752c53384fb3d">GepValueVarMap</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ab715a8e83a4ec45fb86298fef3eda95a"> 71</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodePair,NodeID></a> <a class="code" href="classSVF_1_1SVFIR.html#ab715a8e83a4ec45fb86298fef3eda95a">NodePairSetMap</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> <span class="keyword">private</span>:</div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a86c0c23d854b034d741d9d8891debab7"> 76</a></span>  ICFGNode2SVFStmtsMap <a class="code" href="classSVF_1_1SVFIR.html#a86c0c23d854b034d741d9d8891debab7">icfgNode2SVFStmtsMap</a>; </div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aaae756185bbd5b7175e96f8928a989c2"> 77</a></span>  ICFGNode2SVFStmtsMap <a class="code" href="classSVF_1_1SVFIR.html#aaae756185bbd5b7175e96f8928a989c2">icfgNode2PTASVFStmtsMap</a>; </div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ad7bbe1abea55ed03c9b6c81891c0bd67"> 78</a></span>  GepValueVarMap <a class="code" href="classSVF_1_1SVFIR.html#ad7bbe1abea55ed03c9b6c81891c0bd67">GepValObjMap</a>; </div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a148b51118eeba8117e033fea84b56be8"> 79</a></span>  NodeLocationSetMap <a class="code" href="classSVF_1_1SVFIR.html#a148b51118eeba8117e033fea84b56be8">GepObjVarMap</a>; </div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a3c014227661d8976714772205611c252"> 80</a></span>  MemObjToFieldsMap <a class="code" href="classSVF_1_1SVFIR.html#a3c014227661d8976714772205611c252">memToFieldsMap</a>; </div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a71b51492b00e66e36266b9a76a842323"> 81</a></span>  <a class="code" href="classSVF_1_1IRGraph.html#a28ea8f85b0923d00364a010c1fd4e416">SVFStmtSet</a> <a class="code" href="classSVF_1_1SVFIR.html#a71b51492b00e66e36266b9a76a842323">globSVFStmtSet</a>; </div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a41abf665421dbfaef508b1eba0c91fb9"> 82</a></span>  PHINodeMap <a class="code" href="classSVF_1_1SVFIR.html#a41abf665421dbfaef508b1eba0c91fb9">phiNodeMap</a>; </div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a864c465fbfdbbbdcc7fc8bbe26737903"> 83</a></span>  FunToArgsListMap <a class="code" href="classSVF_1_1SVFIR.html#a864c465fbfdbbbdcc7fc8bbe26737903">funArgsListMap</a>; </div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aa0920f5f967efdb89e23f12d31b112a2"> 84</a></span>  CSToArgsListMap <a class="code" href="classSVF_1_1SVFIR.html#aa0920f5f967efdb89e23f12d31b112a2">callSiteArgsListMap</a>; </div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a11ab07f48c934f45c239393332aa60e1"> 85</a></span>  CSToRetMap <a class="code" href="classSVF_1_1SVFIR.html#a11ab07f48c934f45c239393332aa60e1">callSiteRetMap</a>; </div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a4cef56f7fc77b47dc6e65c59c98551c5"> 86</a></span>  FunToRetMap <a class="code" href="classSVF_1_1SVFIR.html#a4cef56f7fc77b47dc6e65c59c98551c5">funRetMap</a>; </div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5"> 87</a></span>  <span class="keyword">static</span> <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>; </div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a0a5f88766b7e11f1ea35befcbcea62dc"> 88</a></span>  CallSiteToFunPtrMap <a class="code" href="classSVF_1_1SVFIR.html#a0a5f88766b7e11f1ea35befcbcea62dc">indCallSiteToFunPtrMap</a>; </div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#af9c840e4b82fe9fd9493eabaa2b52bd5"> 89</a></span>  FunPtrToCallSitesMap <a class="code" href="classSVF_1_1SVFIR.html#af9c840e4b82fe9fd9493eabaa2b52bd5">funPtrToCallSitesMap</a>; </div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <a class="code" href="namespaceSVF.html#a3c2bd95727ec0d9c55c631b6617026c8">OrderedNodeSet</a> <a class="code" href="classSVF_1_1SVFIR.html#abd9f622b55839d6796ca2576f2323498">candidatePointers</a>;</div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#abe8aa0d325b35dd59ce4a7f302760e51"> 93</a></span>  <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* <a class="code" href="classSVF_1_1SVFIR.html#abe8aa0d325b35dd59ce4a7f302760e51">icfg</a>; <span class="comment">// ICFG</span></div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ac6c537688366e73bb0ae5db49c0b2450"> 94</a></span>  CallSiteSet <a class="code" href="classSVF_1_1SVFIR.html#ac6c537688366e73bb0ae5db49c0b2450">callSiteSet</a>; </div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="classSVF_1_1SVFIR.html#abf511f82cdbf7a6d9b6da167aee57636">SVFIR</a>(<span class="keywordtype">bool</span> buildFromFile);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a6834558be6987c91a3732154482c9567">destroy</a>();</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362"> 106</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">getPAG</a>(<span class="keywordtype">bool</span> buildFromFile = <span class="keyword">false</span>)</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">if</span> (pag == <span class="keyword">nullptr</span>)</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>  pag = <span class="keyword">new</span> <a class="code" href="classSVF_1_1SVFIR.html#abf511f82cdbf7a6d9b6da167aee57636">SVFIR</a>(buildFromFile);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  }</div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a007c86e5d2d541d08815547a5492731e"> 114</a></span>  <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a007c86e5d2d541d08815547a5492731e">releaseSVFIR</a>()</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">if</span> (pag)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  pag = <span class="keyword">nullptr</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>  <span class="keyword">inline</span> MemObjToFieldsMap& <a class="code" href="classSVF_1_1SVFIR.html#a6f46446d667258b32ddc1ccab48f651c">getMemToFieldsMap</a>()</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a3c014227661d8976714772205611c252">memToFieldsMap</a>;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a77e3c407ea3990413e371589aa468963"> 127</a></span>  <span class="keyword">inline</span> NodeLocationSetMap& <a class="code" href="classSVF_1_1SVFIR.html#a77e3c407ea3990413e371589aa468963">getGepObjNodeMap</a>()</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a148b51118eeba8117e033fea84b56be8">GepObjVarMap</a>;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  }</div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da"> 132</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>* <a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()</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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#abe8aa0d325b35dd59ce4a7f302760e51">icfg</a>;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  }</div><div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a7990c72dd6d645d713f19ed973841484"> 137</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a3c2bd95727ec0d9c55c631b6617026c8">OrderedNodeSet</a>& <a class="code" href="classSVF_1_1SVFIR.html#a7990c72dd6d645d713f19ed973841484">getAllValidPtrs</a>()</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#abd9f622b55839d6796ca2576f2323498">candidatePointers</a>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#af6a2c401d5c7582a4a958b1fe40838e5">initialiseCandidatePointers</a>();</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a3d62b2a06fe1ec531cbde12131fa31df"> 145</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1SVFIR.html#a3d62b2a06fe1ec531cbde12131fa31df">~SVFIR</a>()</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <a class="code" href="classSVF_1_1SVFIR.html#a6834558be6987c91a3732154482c9567">destroy</a>();</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a2375f49c77f2285a6316e7540b051a0f">handleBlackHole</a>(<span class="keywordtype">bool</span> b);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* <a class="code" href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">getModule</a>()</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-><a class="code" href="classSVF_1_1SymbolTableInfo.html#a40387a4893ae5caf58d6f786533d2f44">getModule</a>();</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& <a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9">SVFStmt::PEDGEK</a> kind)</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IRGraph.html#a3db2c4e2823f16d78c86596da284acd1">KindToSVFStmtSetMap</a>[kind];</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  }</div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a65a4af3d6f0bfc11e31f020bb2966576"> 167</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& <a class="code" href="classSVF_1_1SVFIR.html#a65a4af3d6f0bfc11e31f020bb2966576">getPTASVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9">SVFStmt::PEDGEK</a> kind)</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  {</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IRGraph.html#ae0a9b81717fd834bbd109c4b69aaff9d">KindToPTASVFStmtSetMap</a>[kind];</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  }</div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a63acb4d86d93ad1e88860ac839a8c654"> 172</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a63acb4d86d93ad1e88860ac839a8c654">hasSVFStmtList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* inst)<span class="keyword"> const</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keywordflow">return</span> icfgNode2SVFStmtsMap.find(inst)!=icfgNode2SVFStmtsMap.end();</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  }</div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a0552d565633ee22abe03085134a871c0"> 176</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a0552d565633ee22abe03085134a871c0">hasPTASVFStmtList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* inst)<span class="keyword"> const</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">return</span> icfgNode2PTASVFStmtsMap.find(inst)!=icfgNode2PTASVFStmtsMap.end();</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div><div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a570ad42ad516e3fabb91a3563b618c0b"> 181</a></span>  <span class="keyword">inline</span> SVFStmtList& <a class="code" href="classSVF_1_1SVFIR.html#a570ad42ad516e3fabb91a3563b618c0b">getSVFStmtList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* inst)</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">return</span> icfgNode2SVFStmtsMap[inst];</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  }</div><div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#abb91ed47d5c13d0ad7eec35164e37988"> 186</a></span>  <span class="keyword">inline</span> SVFStmtList& <a class="code" href="classSVF_1_1SVFIR.html#abb91ed47d5c13d0ad7eec35164e37988">getPTASVFStmtList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* inst)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">return</span> icfgNode2PTASVFStmtsMap[inst];</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  }</div><div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a6a84868ab4e2845e884fba08d82b40f6"> 191</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a6a84868ab4e2845e884fba08d82b40f6">addToSVFStmtList</a>(<a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* inst, <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge)</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  edge-><a class="code" href="classSVF_1_1SVFStmt.html#adb92a92f5c878576dff26cb38eab8c8c">setICFGNode</a>(inst);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  icfgNode2SVFStmtsMap[inst].push_back(edge);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">if</span> (edge-><a class="code" href="classSVF_1_1SVFStmt.html#a0b6c03af568b70903da6b200ac86c951">isPTAEdge</a>())</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  icfgNode2PTASVFStmtsMap[inst].push_back(edge);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  }</div><div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a5c5adab1f68520a304fbf70ca40f7687"> 199</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1IRGraph.html#a28ea8f85b0923d00364a010c1fd4e416">SVFStmtSet</a>& <a class="code" href="classSVF_1_1SVFIR.html#a5c5adab1f68520a304fbf70ca40f7687">getGlobalSVFStmtSet</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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a71b51492b00e66e36266b9a76a842323">globSVFStmtSet</a>;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  }</div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aa530e33657f68fc2e8eae9435ce430cb"> 204</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> CallSiteSet& <a class="code" href="classSVF_1_1SVFIR.html#aa530e33657f68fc2e8eae9435ce430cb">getCallSiteSet</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#ac6c537688366e73bb0ae5db49c0b2450">callSiteSet</a>;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  }</div><div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a5de67390d38bfacd5b63b776a0ecbfff"> 209</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a5de67390d38bfacd5b63b776a0ecbfff">isPhiNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node)<span class="keyword"> const</span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">return</span> phiNodeMap.find(node) != phiNodeMap.end();</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div><div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ac359813747b4f75920c5f395ba74f410"> 215</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#ac359813747b4f75920c5f395ba74f410">hasFunArgsList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func)<span class="keyword"> const</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">return</span> (funArgsListMap.find(func) != funArgsListMap.end());</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  }</div><div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a615c056c876b59d1fd174a2ac9ade27c"> 220</a></span>  <span class="keyword">inline</span> FunToArgsListMap& <a class="code" href="classSVF_1_1SVFIR.html#a615c056c876b59d1fd174a2ac9ade27c">getFunArgsMap</a>()</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  {</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a864c465fbfdbbbdcc7fc8bbe26737903">funArgsListMap</a>;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  }</div><div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aa148e3e14ebad8460e32079f2f44413a"> 225</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> SVFVarList& <a class="code" href="classSVF_1_1SVFIR.html#aa148e3e14ebad8460e32079f2f44413a">getFunArgsList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func)<span class="keyword"> const</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  FunToArgsListMap::const_iterator it = funArgsListMap.find(func);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != funArgsListMap.end() && <span class="stringliteral">"this function doesn't have arguments"</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"><a class="line" href="classSVF_1_1SVFIR.html#a2a4185af81e7e10f0db74c39ee220101"> 232</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a2a4185af81e7e10f0db74c39ee220101">hasCallSiteArgsMap</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">return</span> (callSiteArgsListMap.find(cs) != callSiteArgsListMap.end());</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  }</div><div class="line"><a name="l00237"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a346b9300ad16ef65e3ab4e11f88193a7"> 237</a></span>  <span class="keyword">inline</span> CSToArgsListMap& <a class="code" href="classSVF_1_1SVFIR.html#a346b9300ad16ef65e3ab4e11f88193a7">getCallSiteArgsMap</a>()</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  {</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#aa0920f5f967efdb89e23f12d31b112a2">callSiteArgsListMap</a>;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  }</div><div class="line"><a name="l00242"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ac7f90610a7b5f456c530a4419393fae5"> 242</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> SVFVarList& <a class="code" href="classSVF_1_1SVFIR.html#ac7f90610a7b5f456c530a4419393fae5">getCallSiteArgsList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  CSToArgsListMap::const_iterator it = callSiteArgsListMap.find(cs);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != callSiteArgsListMap.end() && <span class="stringliteral">"this call site doesn't have arguments"</span>);</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  }</div><div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a650b3931af337a92ffcb5dad5ab47b22"> 249</a></span>  <span class="keyword">inline</span> CSToRetMap& <a class="code" href="classSVF_1_1SVFIR.html#a650b3931af337a92ffcb5dad5ab47b22">getCallSiteRets</a>()</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a11ab07f48c934f45c239393332aa60e1">callSiteRetMap</a>;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  }</div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a70aa4d730ef1d38ef9c46f5014465bdd"> 254</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* <a class="code" href="classSVF_1_1SVFIR.html#a70aa4d730ef1d38ef9c46f5014465bdd">getCallSiteRet</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetBlockNode.html">RetBlockNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  CSToRetMap::const_iterator it = callSiteRetMap.find(cs);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != callSiteRetMap.end() && <span class="stringliteral">"this call site doesn't have return"</span>);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  }</div><div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a170bef1e9a07ce0449faf66706ae6e61"> 260</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a170bef1e9a07ce0449faf66706ae6e61">callsiteHasRet</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetBlockNode.html">RetBlockNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordflow">return</span> callSiteRetMap.find(cs) != callSiteRetMap.end();</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  }</div><div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#abd1bb12776dc9a17863a52ce2cd31958"> 265</a></span>  <span class="keyword">inline</span> FunToRetMap& <a class="code" href="classSVF_1_1SVFIR.html#abd1bb12776dc9a17863a52ce2cd31958">getFunRets</a>()</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  {</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a4cef56f7fc77b47dc6e65c59c98551c5">funRetMap</a>;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  }</div><div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a34e27b8bcfeaafda190dcdb9169a346f"> 270</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* <a class="code" href="classSVF_1_1SVFIR.html#a34e27b8bcfeaafda190dcdb9169a346f">getFunRet</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func)<span class="keyword"> const</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  FunToRetMap::const_iterator it = funRetMap.find(func);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != funRetMap.end() && <span class="stringliteral">"this function doesn't have return"</span>);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  }</div><div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#afe8274c3b7317fccef5314662a182046"> 276</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#afe8274c3b7317fccef5314662a182046">funHasRet</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func)<span class="keyword"> const</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">return</span> funRetMap.find(func) != funRetMap.end();</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  }</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a4b4592e3187bb6583aba63b2f374754e"> 284</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> <a class="code" href="classSVF_1_1SVFIR.html#a4b4592e3187bb6583aba63b2f374754e">getFieldValNodeNum</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keywordflow">return</span> GepValObjMap.size();</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  }</div><div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#af7a98a5eb789178594063140c85cd21f"> 288</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> <a class="code" href="classSVF_1_1SVFIR.html#af7a98a5eb789178594063140c85cd21f">getFieldObjNodeNum</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordflow">return</span> GepObjVarMap.size();</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div><div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a811c5eaeef1e52cc2d6f56ec5a76bb02"> 295</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a811c5eaeef1e52cc2d6f56ec5a76bb02">getGepValVar</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* curInst, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls)<span class="keyword"> const</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  GepValueVarMap::const_iterator iter = GepValObjMap.find(curInst);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">if</span>(iter==GepValObjMap.end()){</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordflow">return</span> UINT_MAX;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  }</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="keywordflow">else</span>{</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  NodeLocationSetMap::const_iterator lit = iter->second.find(std::make_pair(base, ls));</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">if</span>(lit==iter->second.end())</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">return</span> UINT_MAX;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">return</span> lit->second;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</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> </div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div><div class="line"><a name="l00312"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a2d2131128ceb3362b5dc89317cfd88a0"> 312</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> CallSiteToFunPtrMap& <a class="code" href="classSVF_1_1SVFIR.html#a2d2131128ceb3362b5dc89317cfd88a0">getIndirectCallsites</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a0a5f88766b7e11f1ea35befcbcea62dc">indCallSiteToFunPtrMap</a>;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  }</div><div class="line"><a name="l00316"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a533a01d01fab9e45cd1780f9bbd50b0f"> 316</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a533a01d01fab9e45cd1780f9bbd50b0f">getFunPtr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  CallSiteToFunPtrMap::const_iterator it = indCallSiteToFunPtrMap.find(cs);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it!=indCallSiteToFunPtrMap.end() && <span class="stringliteral">"indirect callsite not have a function pointer?"</span>);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  }</div><div class="line"><a name="l00322"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#abf209739a97b96ae0d1c8451fdc684e8"> 322</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> CallSiteSet& <a class="code" href="classSVF_1_1SVFIR.html#abf209739a97b96ae0d1c8451fdc684e8">getIndCallSites</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> funPtr)<span class="keyword"> const</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  FunPtrToCallSitesMap::const_iterator it = funPtrToCallSitesMap.find(funPtr);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it!=funPtrToCallSitesMap.end() && <span class="stringliteral">"function pointer not used at any indirect callsite?"</span>);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  }</div><div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ad44e1ef13d047f8aea8f6ddf5510bd6c"> 328</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#ad44e1ef13d047f8aea8f6ddf5510bd6c">isIndirectCallSites</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keywordflow">return</span> (indCallSiteToFunPtrMap.find(cs) != indCallSiteToFunPtrMap.end());</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  }</div><div class="line"><a name="l00332"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a9235a60e7332c8416e113e7360441d97"> 332</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a9235a60e7332c8416e113e7360441d97">isFunPtr</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">return</span> (funPtrToCallSitesMap.find(<span class="keywordtype">id</span>) != funPtrToCallSitesMap.end());</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  }</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div><div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a6f41676ae91ba7fad38cc7387dd1c255"> 339</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a6f41676ae91ba7fad38cc7387dd1c255">getIntraPAGEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9">SVFStmt::PEDGEK</a> kind)</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  {</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a6f41676ae91ba7fad38cc7387dd1c255">getIntraPAGEdge</a>(<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src), <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst), kind);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  }</div><div class="line"><a name="l00343"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ac1dbd64071f9822b0404f4ed9c8bd2cd"> 343</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#ac1dbd64071f9822b0404f4ed9c8bd2cd">getIntraPAGEdge</a>(<a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* src, <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dst, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9">SVFStmt::PEDGEK</a> kind)</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  {</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a> edge(src,dst,kind);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& edgeSet = <a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(kind);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  SVFStmt::SVFStmtSetTy::const_iterator it = edgeSet.find(&edge);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != edgeSet.end() && <span class="stringliteral">"can not find pag edge"</span>);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keywordflow">return</span> (*it);</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  }</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> </div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span> </div><div class="line"><a name="l00357"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1"> 357</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>*<a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a>* objPN = SVFUtil::dyn_cast<ObjVar>(node))</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(objPN);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  }</div><div class="line"><a name="l00365"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a25b86c16d11b4d50ccc28ead525687ae"> 365</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>*<a class="code" href="classSVF_1_1SVFIR.html#a25b86c16d11b4d50ccc28ead525687ae">getObject</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a>* node)<span class="keyword"> const</span></div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keywordflow">return</span> node-><a class="code" href="classSVF_1_1ObjVar.html#a6a4feb73b54e602407e35eeb09f55930">getMemObj</a>();</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  }</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls);</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls) ;</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div><div class="line"><a name="l00377"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a2878e202045b7f2c817185e8bf95d354"> 377</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a2878e202045b7f2c817185e8bf95d354">getFIObjVar</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj)<span class="keyword"> const</span></div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">return</span> obj-><a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>();</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  }</div><div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ac9f860028c8cbd364720888084701628"> 381</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#ac9f860028c8cbd364720888084701628">getFIObjVar</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = pag-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa<ObjVar>(node) && <span class="stringliteral">"need an object node"</span>);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a>* obj = SVFUtil::cast<ObjVar>(node);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a2878e202045b7f2c817185e8bf95d354">getFIObjVar</a>(obj-><a class="code" href="classSVF_1_1ObjVar.html#a6a4feb73b54e602407e35eeb09f55930">getMemObj</a>());</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  }</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span> </div><div class="line"><a name="l00392"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a6a71d2716530607d66d9e9035199d997"> 392</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a6a71d2716530607d66d9e9035199d997">isBlkPtr</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1SymbolTableInfo.html#acba43b6e9cdf07afaf3d30351aa8df7c">SymbolTableInfo::isBlkPtr</a>(<span class="keywordtype">id</span>));</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  }</div><div class="line"><a name="l00396"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a18ca66c199b910b15f1bfa77dcc98c30"> 396</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a18ca66c199b910b15f1bfa77dcc98c30">isNullPtr</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1SymbolTableInfo.html#ad095e4a569d399cadc03ce864f61c394">SymbolTableInfo::isNullPtr</a>(<span class="keywordtype">id</span>));</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  }</div><div class="line"><a name="l00400"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ad9895f2d075eb402390e3b01ed68e001"> 400</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#ad9895f2d075eb402390e3b01ed68e001">isBlkObjOrConstantObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1SVFIR.html#a17527c55d35ae5c18f00fd4dabe6acad">isBlkObj</a>(<span class="keywordtype">id</span>) || <a class="code" href="classSVF_1_1SVFIR.html#a5d15e4b09784f438568ebe61f8aa5156">isConstantObj</a>(<span class="keywordtype">id</span>));</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  }</div><div class="line"><a name="l00404"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a17527c55d35ae5c18f00fd4dabe6acad"> 404</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a17527c55d35ae5c18f00fd4dabe6acad">isBlkObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#ad9cdb21e20182f3bc95f04bbb97712f3">SymbolTableInfo::isBlkObj</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  }</div><div class="line"><a name="l00408"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a5d15e4b09784f438568ebe61f8aa5156"> 408</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a5d15e4b09784f438568ebe61f8aa5156">isConstantObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(obj && <span class="stringliteral">"not an object node?"</span>);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#a704b917b1e1dbaf9cd758fa9acc1083b">SymbolTableInfo::isConstantObj</a>(<span class="keywordtype">id</span>) || obj-><a class="code" href="classSVF_1_1MemObj.html#a1a4ff4aaaf2573240a318e1b79328cd0">isConstDataOrConstGlobal</a>();</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  }</div><div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a07716ca7f769f704a80ccee1a6ad7ee2"> 414</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a07716ca7f769f704a80ccee1a6ad7ee2">isNonPointerObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FIObjVar.html">FIObjVar</a>* fiNode = SVFUtil::dyn_cast<FIObjVar>(node))</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  {</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">return</span> (fiNode->getMemObj()->hasPtrObj() == <span class="keyword">false</span>);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  }</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a>* gepNode = SVFUtil::dyn_cast<GepObjVar>(node))</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  {</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="keywordflow">return</span> (gepNode->getMemObj()->isNonPtrFieldObj(gepNode->getLocationSet()));</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  }</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<DummyObjVar>(node))</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  {</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  }</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  {</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"expecting a object node"</span>);</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  }</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  }</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span> </div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a5298f34143ec3a2e6bb74ebad668cbbc">getBaseValVar</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> <a class="code" href="classSVF_1_1SVFIR.html#a8b36d077c30fb2830a253ded82413c2d">getLocationSetFromBaseNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08"> 442</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749">getBaseObj</a>(<span class="keywordtype">id</span>)-><a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>();</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  }</div><div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749"> 446</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* <a class="code" href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749">getBaseObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = pag-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa<ObjVar>(node) && <span class="stringliteral">"need an object node"</span>);</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a>* obj = SVFUtil::cast<ObjVar>(node);</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keywordflow">return</span> obj-><a class="code" href="classSVF_1_1ObjVar.html#a6a4feb73b54e602407e35eeb09f55930">getMemObj</a>();</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  }</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span> </div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span> </div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& <a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">getAllFieldsObjVars</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& <a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">getAllFieldsObjVars</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>);</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1SVFIR.html#a42d1e2f0213fb6e54c56cc0695b57cb0">getFieldsAfterCollapse</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>);</div><div class="line"><a name="l00461"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0"> 461</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>()</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  {</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>(<a class="code" href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">NodeIDAllocator::get</a>()->allocateValueId());</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  }</div><div class="line"><a name="l00465"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a18388bc282c5329a837c6a273893c4fb"> 465</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a18388bc282c5329a837c6a273893c4fb">addDummyObjNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  {</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a18388bc282c5329a837c6a273893c4fb">addDummyObjNode</a>(<a class="code" href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">NodeIDAllocator::get</a>()->allocateObjectId(), type);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  }</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span> </div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#addc84dae75be8e8b9deccdb4360736d3">isValidPointer</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId) <span class="keyword">const</span>;</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a5c3b194ebada47baaccf0e9f3ab1a139">isValidTopLevelPtr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node);</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span> </div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a236b4fefd16e9c793c5bd6d576290841">print</a>();</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> </div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span> </div><div class="line"><a name="l00482"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523"> 482</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge) {</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordtype">bool</span> added = <a class="code" href="classSVF_1_1IRGraph.html#a3db2c4e2823f16d78c86596da284acd1">KindToSVFStmtSetMap</a>[edge-><a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>()].insert(edge).second;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(added && <span class="stringliteral">"duplicated edge, not added!!!"</span>);</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="keywordflow">if</span> (edge-><a class="code" href="classSVF_1_1SVFStmt.html#a0b6c03af568b70903da6b200ac86c951">isPTAEdge</a>())</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <a class="code" href="classSVF_1_1IRGraph.html#a9f68ffe75e3d9457092ac2368aa08a27">totalPTAPAGEdge</a>++;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <a class="code" href="classSVF_1_1IRGraph.html#ae0a9b81717fd834bbd109c4b69aaff9d">KindToPTASVFStmtSetMap</a>[edge-><a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>()].insert(edge);</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  }</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  }</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> </div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#ac27b9eedd489f13175c010a32203abae">addFunArgs</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* arg)</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  {</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <a class="code" href="classSVF_1_1FunEntryBlockNode.html">FunEntryBlockNode</a>* funEntryBlockNode = icfg-><a class="code" href="classSVF_1_1ICFG.html#ae1ef14cdda27a2062c4c454750444108">getFunEntryBlockNode</a>(fun);</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  funEntryBlockNode-><a class="code" href="classSVF_1_1FunEntryBlockNode.html#ae6ebc073885c5d47f685c61097dadf20">addFormalParms</a>(arg);</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  funArgsListMap[fun].push_back(arg);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  }</div><div class="line"><a name="l00501"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a53774463f34bb8b528b179b72b48fd69"> 501</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a53774463f34bb8b528b179b72b48fd69">addFunRet</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* ret)</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  {</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <a class="code" href="classSVF_1_1FunExitBlockNode.html">FunExitBlockNode</a>* funExitBlockNode = icfg-><a class="code" href="classSVF_1_1ICFG.html#aa33426d57dc150956902945a17a29bcb">getFunExitBlockNode</a>(fun);</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  funExitBlockNode-><a class="code" href="classSVF_1_1FunExitBlockNode.html#ae1499a3ea7d5bb90dccd5d04a8b97dfc">addFormalRet</a>(ret);</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  funRetMap[fun] = ret;</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  }</div><div class="line"><a name="l00508"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a5fafbfd6a30b8796b92a3a1f3409767f"> 508</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a5fafbfd6a30b8796b92a3a1f3409767f">addCallSiteArgs</a>(<a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* callBlockNode,<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* arg)</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  {</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  callBlockNode-><a class="code" href="classSVF_1_1CallBlockNode.html#a6d819186e239e68c117af16ed405da84">addActualParms</a>(arg);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  callSiteArgsListMap[callBlockNode].push_back(arg);</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  }</div><div class="line"><a name="l00514"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a3c8070a1d7a6a705433b05dd633185b1"> 514</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a3c8070a1d7a6a705433b05dd633185b1">addCallSiteRets</a>(<a class="code" href="classSVF_1_1RetBlockNode.html">RetBlockNode</a>* retBlockNode,<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* arg)</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  {</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  retBlockNode-><a class="code" href="classSVF_1_1RetBlockNode.html#ad2cd6f6589ce5464d6fbcac49f115714">addActualRet</a>(arg);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  callSiteRetMap[retBlockNode]= arg;</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  }</div><div class="line"><a name="l00520"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aa91db3ebf92eacf077ae7b4d0735635b"> 520</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#aa91db3ebf92eacf077ae7b4d0735635b">addIndirectCallsites</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> funPtr)</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  {</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="keywordtype">bool</span> added = indCallSiteToFunPtrMap.insert(std::make_pair(cs,funPtr)).second;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  funPtrToCallSitesMap[funPtr].insert(cs);</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(added && <span class="stringliteral">"adding the same indirect callsite twice?"</span>);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  }</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span> </div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a93bc14960cdd4eb345c64e9b79757ccf">addValNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i)</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  {</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a> *node = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ValVar.html">ValVar</a>(val,i);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a93bc14960cdd4eb345c64e9b79757ccf">addValNode</a>(val, node, i);</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  }</div><div class="line"><a name="l00536"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d"> 536</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">addObjNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i)</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  {</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* mem = <a class="code" href="classSVF_1_1IRGraph.html#a4f5792216c6f38c32dac5074862ffc50">getMemObj</a>(val);</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(((mem-><a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>() == i)) && <span class="stringliteral">"not same object id?"</span>);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a06465449e58e14bfb1c3eee2c97d3242">addFIObjNode</a>(mem);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  }</div><div class="line"><a name="l00543"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a38f6d0c7db935fd4e556761f96f1fa09"> 543</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a38f6d0c7db935fd4e556761f96f1fa09">addRetNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* val, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i)</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  {</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a> *node = <span class="keyword">new</span> <a class="code" href="classSVF_1_1RetPN.html">RetPN</a>(val,i);</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a38f6d0c7db935fd4e556761f96f1fa09">addRetNode</a>(val, node, i);</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  }</div><div class="line"><a name="l00549"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a6ade5bf3edc7b6c3faafc3e5ff3d0538"> 549</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a6ade5bf3edc7b6c3faafc3e5ff3d0538">addVarargNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* val, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i)</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  {</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a> *node = <span class="keyword">new</span> <a class="code" href="classSVF_1_1VarArgPN.html">VarArgPN</a>(val,i);</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IRGraph.html#a685f1a8a35aa5dc9c298e3b0e2ccf007">addNode</a>(node,i);</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  }</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> </div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a9a702ceb8ba3851daef444f1ece3a2f8">addGepValNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* curInst,<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *type, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> fieldidx);</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a1ac1e7752e98abff7054f4caa709260d">addGepObjNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls);</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a06465449e58e14bfb1c3eee2c97d3242">addFIObjNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span> </div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span> </div><div class="line"><a name="l00565"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a6b1bb039f068ff2ab486214354df4684"> 565</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a6b1bb039f068ff2ab486214354df4684">addDummyValNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i)</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a93bc14960cdd4eb345c64e9b79757ccf">addValNode</a>(<span class="keyword">nullptr</span>, <span class="keyword">new</span> <a class="code" href="classSVF_1_1DummyValVar.html">DummyValVar</a>(i), i);</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  }</div><div class="line"><a name="l00569"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a3071c94ea72048d74a65a409a906af35"> 569</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a3071c94ea72048d74a65a409a906af35">addDummyObjNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  {</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* mem = <a class="code" href="classSVF_1_1SVFIR.html#a4ee79c74a7a2cea5c063fa598ab89532">addDummyMemObj</a>(i, type);</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">addObjNode</a>(<span class="keyword">nullptr</span>, <span class="keyword">new</span> <a class="code" href="classSVF_1_1DummyObjVar.html">DummyObjVar</a>(i,mem), i);</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  }</div><div class="line"><a name="l00574"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a4ee79c74a7a2cea5c063fa598ab89532"> 574</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* <a class="code" href="classSVF_1_1SVFIR.html#a4ee79c74a7a2cea5c063fa598ab89532">addDummyMemObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a>* type)</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  {</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-><a class="code" href="classSVF_1_1SymbolTableInfo.html#a8e40c578ccdd3a108a10a191a309bd18">createDummyObj</a>(i,type);</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  }</div><div class="line"><a name="l00578"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a2b532a5db0197c579b512fbcdb4d6220"> 578</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a2b532a5db0197c579b512fbcdb4d6220">addBlackholeObjNode</a>()</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  {</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">addObjNode</a>(<span class="keyword">nullptr</span>, <span class="keyword">new</span> <a class="code" href="classSVF_1_1DummyObjVar.html">DummyObjVar</a>(<a class="code" href="classSVF_1_1IRGraph.html#a3ce34b9fcb651689bce44ab48fbcdff0">getBlackHoleNode</a>(),<a class="code" href="classSVF_1_1IRGraph.html#aafe9544b07a8c40bf915613df11df48e">getBlackHoleObj</a>()), <a class="code" href="classSVF_1_1IRGraph.html#a3ce34b9fcb651689bce44ab48fbcdff0">getBlackHoleNode</a>());</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  }</div><div class="line"><a name="l00582"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aff3f3ff198e7511576484dfda7bf051b"> 582</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#aff3f3ff198e7511576484dfda7bf051b">addConstantObjNode</a>()</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  {</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">addObjNode</a>(<span class="keyword">nullptr</span>, <span class="keyword">new</span> <a class="code" href="classSVF_1_1DummyObjVar.html">DummyObjVar</a>(<a class="code" href="classSVF_1_1IRGraph.html#ac5da3a0cbe040a45d719b6f6a23aed91">getConstantNode</a>(),<a class="code" href="classSVF_1_1IRGraph.html#aceae1e4e49a1d2e63ef3d71a7e5ef3eb">getConstantObj</a>()), <a class="code" href="classSVF_1_1IRGraph.html#ac5da3a0cbe040a45d719b6f6a23aed91">getConstantNode</a>());</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  }</div><div class="line"><a name="l00586"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a2b1de62f88588b068d4eed125049ed8d"> 586</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a2b1de62f88588b068d4eed125049ed8d">addBlackholePtrNode</a>()</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  {</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>(<a class="code" href="classSVF_1_1IRGraph.html#a3b417ee79560fd00f4cf80906044c198">getBlkPtr</a>());</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  }</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div><div class="line"><a name="l00593"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a3face8a526a33d82ef7cde7602030bc9"> 593</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a3face8a526a33d82ef7cde7602030bc9">addValNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*, <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a> *node, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i)</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  {</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1GenericGraph.html#a6885064afa211958af7b73f0233284e5">hasGNode</a>(i) == <span class="keyword">false</span> && <span class="stringliteral">"This NodeID clashes here. Please check NodeIDAllocator. Switch Strategy::DEBUG to SEQ or DENSE"</span>);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IRGraph.html#a685f1a8a35aa5dc9c298e3b0e2ccf007">addNode</a>(node,i);</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  }</div><div class="line"><a name="l00599"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a3a5d8b7f6286ec31b5a9038c88779151"> 599</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a3a5d8b7f6286ec31b5a9038c88779151">addObjNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>*, <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a> *node, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i)</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  {</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1GenericGraph.html#a6885064afa211958af7b73f0233284e5">hasGNode</a>(i) == <span class="keyword">false</span> && <span class="stringliteral">"This NodeID clashes here. Please check NodeIDAllocator. Switch Strategy::DEBUG to SEQ or DENSE"</span>);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IRGraph.html#a685f1a8a35aa5dc9c298e3b0e2ccf007">addNode</a>(node,i);</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  }</div><div class="line"><a name="l00605"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a1f63adcd679596996ee2eabf0179462f"> 605</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a1f63adcd679596996ee2eabf0179462f">addRetNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>*, <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a> *node, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i)</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  {</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IRGraph.html#a685f1a8a35aa5dc9c298e3b0e2ccf007">addNode</a>(node,i);</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  }</div><div class="line"><a name="l00610"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a078c01295f47bf12f1a2b8abfab8b28d"> 610</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a078c01295f47bf12f1a2b8abfab8b28d">addVarargNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>*, <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a> *node, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i)</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  {</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1IRGraph.html#a685f1a8a35aa5dc9c298e3b0e2ccf007">addNode</a>(node,i);</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  }</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span> </div><div class="line"><a name="l00616"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ae3d9b4acb63a7dbe316e87bad4e3987a"> 616</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#ae3d9b4acb63a7dbe316e87bad4e3987a">addGlobalPAGEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge)</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  {</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  globSVFStmtSet.insert(edge);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  }</div><div class="line"><a name="l00621"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a51f28f03a236b244b636ca88c5511a30"> 621</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a51f28f03a236b244b636ca88c5511a30">addCallSite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* call)</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  {</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  callSiteSet.insert(call);</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  }</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span> </div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  <a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a8436a7eede7b5ff5d9b80a0c951ea729">addAddrStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst);</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <a class="code" href="classSVF_1_1CopyStmt.html">CopyStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#aa54b93ebf36944b548aaa74dbf8a144f">addCopyStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst);</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <a class="code" href="classSVF_1_1PhiStmt.html">PhiStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#af6b4b35214d0e526dee13dadbb6326d0">addPhiStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> res, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> opnd);</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  <a class="code" href="classSVF_1_1CmpStmt.html">CmpStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a7eb14738f0cf08cc8b5c623c953db4ba">addCmpStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> predict);</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <a class="code" href="classSVF_1_1BinaryOPStmt.html">BinaryOPStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a955a2f93cf9eef857e40f19bc24edb2f">addBinaryOPStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode);</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <a class="code" href="classSVF_1_1UnaryOPStmt.html">UnaryOPStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a8abc436992aa3b6b636084ff5f9a8ef2">addUnaryOPStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode);</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <a class="code" href="classSVF_1_1BranchStmt.html">BranchStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a4f0d318deff3b97a4bd5e7b9d53e42fd">addBranchStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> br, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond, std::vector<const ICFGNode*> succs);</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a3837804b2622baf7e6991aa993286e9e">addLoadStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst);</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a4b491e2d3eb5e041677decd73136c870">addStoreStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1IntraBlockNode.html">IntraBlockNode</a>* val);</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* <a class="code" href="classSVF_1_1SVFIR.html#a9e99fcf29016ef401f53491ec54a4053">addCallPE</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs);</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>* <a class="code" href="classSVF_1_1SVFIR.html#a12fef4ec0537b26947eb0ab10799f29f">addRetPE</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs);</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a9eeab593b2f161ad268d27a7031aedbe">addGepStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls, <span class="keywordtype">bool</span> constGep);</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <a class="code" href="classSVF_1_1NormalGepStmt.html">NormalGepStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a2a851ff7011e3bd71c36be5c7198a1f4">addNormalGepStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <a class="code" href="classSVF_1_1VariantGepStmt.html">VariantGepStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#abbd4b6430444a91e991636abf189c00b">addVariantGepStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>& ls);</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <a class="code" href="classSVF_1_1TDForkPE.html">TDForkPE</a>* <a class="code" href="classSVF_1_1SVFIR.html#a787dc5aff6f7a7d8ec3a7a23d9f40a7e">addThreadForkPE</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs);</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <a class="code" href="classSVF_1_1TDJoinPE.html">TDJoinPE</a>* <a class="code" href="classSVF_1_1SVFIR.html#a4f64a1a266838ac72b66cca138ec57ca">addThreadJoinPE</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span> </div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a33df5f5d9b7de3846cf973135b04f513">addBlackHoleAddrStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span> };</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span> </div><div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="namespaceSVF.html#ac47d39fb505e8ed8d2c6b6b318be5f4d"> 665</a></span> <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a> <a class="code" href="namespaceSVF.html#ac47d39fb505e8ed8d2c6b6b318be5f4d">PAG</a>;</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span> </div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span> } <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span> </div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span> </div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span> </div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="preprocessor">#endif </span><span class="comment">/* SVFIR_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1SVFIR_html_aa5b08d987b37d35e73de88da10a97bc4"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa5b08d987b37d35e73de88da10a97bc4">SVF::SVFIR::NodeLocationSetMap</a></div><div class="ttdeci">Map< NodeLocationSet, NodeID > NodeLocationSetMap</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00069">SVFIR.h:69</a></div></div>
|
|
70
70
|
<div class="ttc" id="classSVF_1_1IRGraph_html_a3ce34b9fcb651689bce44ab48fbcdff0"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a3ce34b9fcb651689bce44ab48fbcdff0">SVF::IRGraph::getBlackHoleNode</a></div><div class="ttdeci">NodeID getBlackHoleNode() const</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00144">IRGraph.h:144</a></div></div>
|
|
71
71
|
<div class="ttc" id="classSVF_1_1AddrStmt_html"><div class="ttname"><a href="classSVF_1_1AddrStmt.html">SVF::AddrStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00269">SVFStatements.h:269</a></div></div>
|
|
72
72
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a64939d7ecfd8e2cf862782954a56596b"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVF::SVFIR::SVFVarList</a></div><div class="ttdeci">std::vector< const SVFVar * > SVFVarList</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00057">SVFIR.h:57</a></div></div>
|
|
@@ -235,7 +235,6 @@ $(function() {
|
|
|
235
235
|
<div class="ttc" id="classSVF_1_1FunEntryBlockNode_html_ae6ebc073885c5d47f685c61097dadf20"><div class="ttname"><a href="classSVF_1_1FunEntryBlockNode.html#ae6ebc073885c5d47f685c61097dadf20">SVF::FunEntryBlockNode::addFormalParms</a></div><div class="ttdeci">void addFormalParms(const SVFVar *fp)</div><div class="ttdoc">Add formal parameters. </div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00274">ICFGNode.h:274</a></div></div>
|
|
236
236
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a9e99fcf29016ef401f53491ec54a4053"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a9e99fcf29016ef401f53491ec54a4053">SVF::SVFIR::addCallPE</a></div><div class="ttdeci">CallPE * addCallPE(NodeID src, NodeID dst, const CallBlockNode *cs)</div><div class="ttdoc">Add Call edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00222">SVFIR.cpp:222</a></div></div>
|
|
237
237
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a650b3931af337a92ffcb5dad5ab47b22"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a650b3931af337a92ffcb5dad5ab47b22">SVF::SVFIR::getCallSiteRets</a></div><div class="ttdeci">CSToRetMap & getCallSiteRets()</div><div class="ttdoc">Get callsite return. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00249">SVFIR.h:249</a></div></div>
|
|
238
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_a3f429b085f749ed0c8269517eb9094ae"><div class="ttname"><a href="classSVF_1_1MemObj.html#a3f429b085f749ed0c8269517eb9094ae">SVF::MemObj::isConstant</a></div><div class="ttdeci">bool isConstant() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00715">SymbolTableInfo.cpp:715</a></div></div>
|
|
239
238
|
<div class="ttc" id="classSVF_1_1SVFIR_html_ac6c537688366e73bb0ae5db49c0b2450"><div class="ttname"><a href="classSVF_1_1SVFIR.html#ac6c537688366e73bb0ae5db49c0b2450">SVF::SVFIR::callSiteSet</a></div><div class="ttdeci">CallSiteSet callSiteSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00094">SVFIR.h:94</a></div></div>
|
|
240
239
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a864c465fbfdbbbdcc7fc8bbe26737903"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a864c465fbfdbbbdcc7fc8bbe26737903">SVF::SVFIR::funArgsListMap</a></div><div class="ttdeci">FunToArgsListMap funArgsListMap</div><div class="ttdoc">Map a function to a list of all its formal parameters. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00083">SVFIR.h:83</a></div></div>
|
|
241
240
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a77e3c407ea3990413e371589aa468963"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a77e3c407ea3990413e371589aa468963">SVF::SVFIR::getGepObjNodeMap</a></div><div class="ttdeci">NodeLocationSetMap & getGepObjNodeMap()</div><div class="ttdoc">Return GepObjVarMap. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00127">SVFIR.h:127</a></div></div>
|
|
@@ -295,6 +294,7 @@ $(function() {
|
|
|
295
294
|
<div class="ttc" id="classSVF_1_1SVFIR_html_ae2006820c0d00482b85e7ae3adcb5744"><div class="ttname"><a href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">SVF::SVFIR::getSVFStmtSet</a></div><div class="ttdeci">SVFStmt::SVFStmtSetTy & getSVFStmtSet(SVFStmt::PEDGEK kind)</div><div class="ttdoc">Get/set methods to get SVFStmts based on their kinds and ICFGNodes. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00162">SVFIR.h:162</a></div></div>
|
|
296
295
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a4cef56f7fc77b47dc6e65c59c98551c5"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a4cef56f7fc77b47dc6e65c59c98551c5">SVF::SVFIR::funRetMap</a></div><div class="ttdeci">FunToRetMap funRetMap</div><div class="ttdoc">Map a function to its unique function return PAGNodes. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00086">SVFIR.h:86</a></div></div>
|
|
297
296
|
<div class="ttc" id="classSVF_1_1CopyStmt_html"><div class="ttname"><a href="classSVF_1_1CopyStmt.html">SVF::CopyStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00305">SVFStatements.h:305</a></div></div>
|
|
297
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a1a4ff4aaaf2573240a318e1b79328cd0"><div class="ttname"><a href="classSVF_1_1MemObj.html#a1a4ff4aaaf2573240a318e1b79328cd0">SVF::MemObj::isConstDataOrConstGlobal</a></div><div class="ttdeci">bool isConstDataOrConstGlobal() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00715">SymbolTableInfo.cpp:715</a></div></div>
|
|
298
298
|
<div class="ttc" id="classSVF_1_1SVFIR_html_aa54b93ebf36944b548aaa74dbf8a144f"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa54b93ebf36944b548aaa74dbf8a144f">SVF::SVFIR::addCopyStmt</a></div><div class="ttdeci">CopyStmt * addCopyStmt(NodeID src, NodeID dst)</div><div class="ttdoc">Add Copy edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00069">SVFIR.cpp:69</a></div></div>
|
|
299
299
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a25b86c16d11b4d50ccc28ead525687ae"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a25b86c16d11b4d50ccc28ead525687ae">SVF::SVFIR::getObject</a></div><div class="ttdeci">const MemObj * getObject(const ObjVar *node) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00365">SVFIR.h:365</a></div></div>
|
|
300
300
|
<div class="ttc" id="classSVF_1_1SVFStmt_html"><div class="ttname"><a href="classSVF_1_1SVFStmt.html">SVF::SVFStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00047">SVFStatements.h:47</a></div></div>
|