svf-tools 1.0.548 → 1.0.549
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/AndersenStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ConsG_8h_source.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +12 -13
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1ConstraintNode_01_5_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintNode_01_5_01_4.html +1 -1
- package/include/Graphs/ConsG.h +2 -3
- package/package.json +1 -1
|
@@ -114,7 +114,7 @@ $(function() {
|
|
|
114
114
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a077caa1b10ab84d101d79fc7ea50db2d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">SVF::SVFUtil::writeWrnMsg</a></div><div class="ttdeci">void writeWrnMsg(std::string msg)</div><div class="ttdoc">Writes a message run through wrnMsg. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00067">SVFUtil.cpp:67</a></div></div>
|
|
115
115
|
<div class="ttc" id="classSVF_1_1AndersenBase_html_a25b00d9ca71cbdd27530fc5d0dc84ee5"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a25b00d9ca71cbdd27530fc5d0dc84ee5">SVF::AndersenBase::numOfSfrs</a></div><div class="ttdeci">static u32_t numOfSfrs</div><div class="ttdoc">Number of processed Store edge. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00123">Andersen.h:123</a></div></div>
|
|
116
116
|
<div class="ttc" id="classSVF_1_1AndersenBase_html_a2b763519509ce21cf40893c01f8357b6"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a2b763519509ce21cf40893c01f8357b6">SVF::AndersenBase::numOfProcessedStore</a></div><div class="ttdeci">static u32_t numOfProcessedStore</div><div class="ttdoc">Number of processed Load edge. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00122">Andersen.h:122</a></div></div>
|
|
117
|
-
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a84468bc9355d31e8c3e18369036ddf5c"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c">SVF::ConstraintGraph::isPWCNode</a></div><div class="ttdeci">bool isPWCNode(NodeID nodeId)</div><div class="ttdoc">Check/Set PWC (positive weight cycle) flag. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#
|
|
117
|
+
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a84468bc9355d31e8c3e18369036ddf5c"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c">SVF::ConstraintGraph::isPWCNode</a></div><div class="ttdeci">bool isPWCNode(NodeID nodeId)</div><div class="ttdoc">Check/Set PWC (positive weight cycle) flag. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00348">ConsG.h:348</a></div></div>
|
|
118
118
|
<div class="ttc" id="classSVF_1_1PTAStat_html_a17531fa1df42df0b19191d61853380d9"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a17531fa1df42df0b19191d61853380d9">SVF::PTAStat::NumOfProcessedLoads</a></div><div class="ttdeci">static const char * NumOfProcessedLoads</div><div class="ttdoc">SVFIR processed load edge. </div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8h_source.html#l00075">PTAStat.h:75</a></div></div>
|
|
119
119
|
<div class="ttc" id="classSVF_1_1PTAStat_html_a267ba4aac2e7ceb65f008f9486d3d9f7"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a267ba4aac2e7ceb65f008f9486d3d9f7">SVF::PTAStat::endTime</a></div><div class="ttdeci">double endTime</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8h_source.html#l00153">PTAStat.h:153</a></div></div>
|
|
120
120
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a3bbaafd80dfcae6ccc82c3d8b9d303ea"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a3bbaafd80dfcae6ccc82c3d8b9d303ea">SVF::SVFIR::getFieldObjNodeNum</a></div><div class="ttdeci">u32_t getFieldObjNodeNum() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00288">SVFIR.h:288</a></div></div>
|
|
@@ -66,7 +66,7 @@ $(function() {
|
|
|
66
66
|
<div class="title">ConsG.h</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="ConsG_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">//===- ConsG.h -- Constraint graph representation-----------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-2017> <Yulei Sui></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// along with this program. If not, see <http://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * ConstraintGraph.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: Oct 14, 2013</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 CONSG_H_</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#define CONSG_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="ConsGEdge_8h.html">Graphs/ConsGEdge.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="ConsGNode_8h.html">Graphs/ConsGNode.h</a>"</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html"> 44</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1GenericGraph.html">GenericGraph</a><ConstraintNode,ConstraintEdge></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#af2dcf9fd0bc3d353c8582849cdabdf54"> 48</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID, ConstraintNode *></a> <a class="code" href="classSVF_1_1ConstraintGraph.html#af2dcf9fd0bc3d353c8582849cdabdf54">ConstraintNodeIDToNodeMapTy</a>;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a15bc278f76cdfcf38e623cedbc80d025"> 49</a></span>  <span class="keyword">typedef</span> ConstraintEdge::ConstraintEdgeSetTy::iterator <a class="code" href="classSVF_1_1ConstraintGraph.html#a15bc278f76cdfcf38e623cedbc80d025">ConstraintNodeIter</a>;</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#afe34ca6bdbb22b188799a4297fd19004"> 50</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID, NodeID></a> <a class="code" href="classSVF_1_1ConstraintGraph.html#afe34ca6bdbb22b188799a4297fd19004">NodeToRepMap</a>;</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#ac7d24753491a9bab39a13b32bb65f139"> 51</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID, NodeBS></a> <a class="code" href="classSVF_1_1ConstraintGraph.html#ac7d24753491a9bab39a13b32bb65f139">NodeToSubsMap</a>;</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#ae80fc7e5d68e103d8f3a82bc9ffb0f00"> 52</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList<NodeID></a> <a class="code" href="classSVF_1_1ConstraintGraph.html#ae80fc7e5d68e103d8f3a82bc9ffb0f00">WorkList</a>;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aa8b09f64c6e4bbd081c6062a1a0e8948"> 55</a></span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>*<a class="code" href="classSVF_1_1ConstraintGraph.html#aa8b09f64c6e4bbd081c6062a1a0e8948">pag</a>;</div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#ab1b5ee9202bd9f5d738f9850b42a45d2"> 56</a></span>  NodeToRepMap <a class="code" href="classSVF_1_1ConstraintGraph.html#ab1b5ee9202bd9f5d738f9850b42a45d2">nodeToRepMap</a>;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#af91f1027cd5de591ae40865f691c5f60"> 57</a></span>  NodeToSubsMap <a class="code" href="classSVF_1_1ConstraintGraph.html#af91f1027cd5de591ae40865f691c5f60">nodeToSubsMap</a>;</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#af3406f1e191d9d6d9c33d23bdd2d564b"> 58</a></span>  WorkList <a class="code" href="classSVF_1_1ConstraintGraph.html#af3406f1e191d9d6d9c33d23bdd2d564b">nodesToBeCollapsed</a>;</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#ac246dc91562d4b1e168b7c39b2c2720f"> 59</a></span>  <a class="code" href="namespaceSVF.html#ae71551d6a1fc300e0403297aa25ddf94">EdgeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#ac246dc91562d4b1e168b7c39b2c2720f">edgeIndex</a>;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a5bbd6df25027d26911f5d8d6a10881dc"> 61</a></span>  <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a5bbd6df25027d26911f5d8d6a10881dc">AddrCGEdgeSet</a>;</div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a1be3ebb84b3d334daf98f7e6f5b82256"> 62</a></span>  <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a1be3ebb84b3d334daf98f7e6f5b82256">directEdgeSet</a>;</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a1cb9124b29720e7a5b39d83419f9cc17"> 63</a></span>  <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a1cb9124b29720e7a5b39d83419f9cc17">LoadCGEdgeSet</a>;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a0f9d5eef25827ac1d380e5d8bd225025"> 64</a></span>  <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a0f9d5eef25827ac1d380e5d8bd225025">StoreCGEdgeSet</a>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a1973126243ff619033a78a3782944278">buildCG</a>();</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a77ba38543b1ee164f1ae95589d5dbc44">destroy</a>();</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a4dd7feb1ed62883dd35ced962ba6b59e"> 70</a></span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& <a class="code" href="classSVF_1_1ConstraintGraph.html#a4dd7feb1ed62883dd35ced962ba6b59e">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9">SVFStmt::PEDGEK</a> kind)</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1SVFIR.html#a65a4af3d6f0bfc11e31f020bb2966576">getPTASVFStmtSet</a>(kind);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  }</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a00242eb1c1204abf1f5eb0cae759a38c"> 77</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a00242eb1c1204abf1f5eb0cae759a38c">getValueNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* value)<span class="keyword"> const</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">sccRepNode</a>(pag-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(value));</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a802d7aa5c5bdc5c8720120f71d316b68"> 82</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a802d7aa5c5bdc5c8720120f71d316b68">getReturnNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* value)<span class="keyword"> const</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1IRGraph.html#a96010999a4e5013beb1c37ef753ff910">getReturnNode</a>(value);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a527342ce5ac3b9491d7ad4302145cec5"> 87</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a527342ce5ac3b9491d7ad4302145cec5">getVarargNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* value)<span class="keyword"> const</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1IRGraph.html#a8b10c318674a47035d617b3ade4f069b">getVarargNode</a>(value);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a7e4c0c3e6e3c64d2729abd0f161cf550"> 95</a></span>  <a class="code" href="classSVF_1_1ConstraintGraph.html#a7e4c0c3e6e3c64d2729abd0f161cf550">ConstraintGraph</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* <a class="code" href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a>): pag(p), edgeIndex(0)</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="classSVF_1_1ConstraintGraph.html#a1973126243ff619033a78a3782944278">buildCG</a>();</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a171331edb83de1fd118eebb3a0fa1662"> 100</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a171331edb83de1fd118eebb3a0fa1662">~ConstraintGraph</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>  <a class="code" href="classSVF_1_1ConstraintGraph.html#a77ba38543b1ee164f1ae95589d5dbc44">destroy</a>();</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87"> 107</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">getConstraintNode</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="l00108"></a><span class="lineno"> 108</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordtype">id</span> = <a class="code" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">sccRepNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div><div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a5ea9c47d232f36b66d985f979f33293b"> 112</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a5ea9c47d232f36b66d985f979f33293b">addConstraintNode</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <a class="code" href="classSVF_1_1GenericGraph.html#a0a8831a5429005ff9d71adbd6bf3994f">addGNode</a>(<span class="keywordtype">id</span>,node);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  }</div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aad6c37476edfd9ae92dc8c0d004d782d"> 116</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aad6c37476edfd9ae92dc8c0d004d782d">hasConstraintNode</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="l00117"></a><span class="lineno"> 117</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordtype">id</span> = <a class="code" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">sccRepNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1GenericGraph.html#a6885064afa211958af7b73f0233284e5">hasGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a9e21bc9b86080b4059f0907e9a7b33f3"> 121</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a9e21bc9b86080b4059f0907e9a7b33f3">removeConstraintNode</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node)</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  {</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <a class="code" href="classSVF_1_1GenericGraph.html#a1817b65e76052f11e36a67d6b9efd915">removeGNode</a>(node);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a5f57823a4918f6c6bfee9c18beddda51"> 128</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a5f57823a4918f6c6bfee9c18beddda51">hasEdge</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* src, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* dst, <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375">ConstraintEdge::ConstraintEdgeK</a> kind)</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a> edge(src,dst,kind);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">if</span>(kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a29b0aa3353f866ef1655ab6d4716feb9">ConstraintEdge::Copy</a> ||</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375acfd0a194af0da66162545f0089eb4baa">ConstraintEdge::NormalGep</a> || kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375ae5df3ce07dd670b48916f7b8ab33ae5a">ConstraintEdge::VariantGep</a>)</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">return</span> directEdgeSet.find(&edge) != directEdgeSet.end();</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375aed68bc43e8aae49e8590e140eb0ffaf3">ConstraintEdge::Addr</a>)</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">return</span> AddrCGEdgeSet.find(&edge) != AddrCGEdgeSet.end();</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a20d6a102ddc06257a822ffffcc5a3b47">ConstraintEdge::Store</a>)</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">return</span> StoreCGEdgeSet.find(&edge) != StoreCGEdgeSet.end();</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a1bdeb9a06641d16b43391120812b40b2">ConstraintEdge::Load</a>)</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">return</span> LoadCGEdgeSet.find(&edge) != LoadCGEdgeSet.end();</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"no other kind!"</span>);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a04a57ef9803917346cb966e05ecd0de4"> 146</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a04a57ef9803917346cb966e05ecd0de4">getEdge</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* src, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* dst, <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375">ConstraintEdge::ConstraintEdgeK</a> kind)</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a> edge(src,dst,kind);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">if</span>(kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a29b0aa3353f866ef1655ab6d4716feb9">ConstraintEdge::Copy</a> || kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375acfd0a194af0da66162545f0089eb4baa">ConstraintEdge::NormalGep</a> || kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375ae5df3ce07dd670b48916f7b8ab33ae5a">ConstraintEdge::VariantGep</a>)</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">auto</span> eit = directEdgeSet.find(&edge);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">return</span> *eit;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375aed68bc43e8aae49e8590e140eb0ffaf3">ConstraintEdge::Addr</a>)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keyword">auto</span> eit = AddrCGEdgeSet.find(&edge);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">return</span> *eit;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a20d6a102ddc06257a822ffffcc5a3b47">ConstraintEdge::Store</a>)</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">auto</span> eit = StoreCGEdgeSet.find(&edge);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">return</span> *eit;</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">else</span> <span class="keywordflow">if</span>(kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a1bdeb9a06641d16b43391120812b40b2">ConstraintEdge::Load</a>)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keyword">auto</span> eit = LoadCGEdgeSet.find(&edge);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">return</span> *eit;</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">else</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  {</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"no other kind!"</span>);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  }</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a56cfcc39637cf5208f65297a63dde266">addAddrCGEdge</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="l00181"></a><span class="lineno"> 181</span>  <a class="code" href="classSVF_1_1CopyCGEdge.html">CopyCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a60bb27100e8c264be2add004069d1758">addCopyCGEdge</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="l00183"></a><span class="lineno"> 183</span>  <a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a5aac453464955185ca0d47e91db9df7b">addNormalGepCGEdge</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="l00184"></a><span class="lineno"> 184</span>  <a class="code" href="classSVF_1_1VariantGepCGEdge.html">VariantGepCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a6902cabb252b1eaadb3c8220b4581a2f">addVariantGepCGEdge</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="l00186"></a><span class="lineno"> 186</span>  <a class="code" href="classSVF_1_1LoadCGEdge.html">LoadCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a1e5a23fbd08cf4186775baffbd6a7934">addLoadCGEdge</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="l00188"></a><span class="lineno"> 188</span>  <a class="code" href="classSVF_1_1StoreCGEdge.html">StoreCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a633666953f8d6675961981c4eab1adb0">addStoreCGEdge</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="l00190"></a><span class="lineno"> 190</span> </div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a>& <a class="code" href="classSVF_1_1ConstraintGraph.html#adee52f15f5ff58dd455e419c2643f89b">getAddrCGEdges</a>()</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a5bbd6df25027d26911f5d8d6a10881dc">AddrCGEdgeSet</a>;</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_1ConstraintGraph.html#ad7196d5f05192d9468ee0ca93b6b66ee"> 199</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a>& <a class="code" href="classSVF_1_1ConstraintGraph.html#ad7196d5f05192d9468ee0ca93b6b66ee">getDirectCGEdges</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_1ConstraintGraph.html#a1be3ebb84b3d334daf98f7e6f5b82256">directEdgeSet</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_1ConstraintGraph.html#afb849d8f3425ff36497d062ecefd2cc1"> 204</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a>& <a class="code" href="classSVF_1_1ConstraintGraph.html#afb849d8f3425ff36497d062ecefd2cc1">getLoadCGEdges</a>()</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</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_1ConstraintGraph.html#a1cb9124b29720e7a5b39d83419f9cc17">LoadCGEdgeSet</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_1ConstraintGraph.html#a61ef90be6ccc01634e5440f22a0f746e"> 209</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a>& <a class="code" href="classSVF_1_1ConstraintGraph.html#a61ef90be6ccc01634e5440f22a0f746e">getStoreCGEdges</a>()</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a0f9d5eef25827ac1d380e5d8bd225025">StoreCGEdgeSet</a>;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a4db3484e3710c3f5cc86ec32dd643722">reTargetDstOfEdge</a>(<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* newDstNode);</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aaae56afed424f7cd59fddb3fcb2f7214">reTargetSrcOfEdge</a>(<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* newSrcNode);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#acc23df2db1fa7b8e0270d8a04f08f2ee">removeAddrEdge</a>(<a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* edge);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a9fc73676ea133651604e2528fe1d8244">removeDirectEdge</a>(<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aa4bca2422049413439cb0c3400f2ce28">removeLoadEdge</a>(<a class="code" href="classSVF_1_1LoadCGEdge.html">LoadCGEdge</a>* edge);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aad3d05c949c33a587b3ac6d627f5a0a2">removeStoreEdge</a>(<a class="code" href="classSVF_1_1StoreCGEdge.html">StoreCGEdge</a>* edge);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div><div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f"> 233</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">sccRepNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  NodeToRepMap::const_iterator it = nodeToRepMap.find(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">if</span>(it==nodeToRepMap.end())</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordflow">return</span> <span class="keywordtype">id</span>;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  }</div><div class="line"><a name="l00241"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aed605b010e313f4b11e95b83fe50e3b3"> 241</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>& <a class="code" href="classSVF_1_1ConstraintGraph.html#aed605b010e313f4b11e95b83fe50e3b3">sccSubNodes</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  {</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  nodeToSubsMap[id].<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">return</span> nodeToSubsMap[id];</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  }</div><div class="line"><a name="l00246"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#abea65bf6dd43aa312082f8d4c7c3e3cb"> 246</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#abea65bf6dd43aa312082f8d4c7c3e3cb">setRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rep)</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  {</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  nodeToRepMap[node] = rep;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  }</div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a148235bd1355a700d3ce187702e89bc8"> 250</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a148235bd1355a700d3ce187702e89bc8">setSubs</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>& subs)</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  {</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  nodeToSubsMap[node] |= subs;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  }</div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a5fe3815a7990e16b99cf46e90529f8b3"> 254</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a5fe3815a7990e16b99cf46e90529f8b3">resetSubs</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  {</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  nodeToSubsMap.erase(node);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  }</div><div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#ade6a90ed5e0a9e8615bafec54d9d1d73"> 258</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>& <a class="code" href="classSVF_1_1ConstraintGraph.html#ade6a90ed5e0a9e8615bafec54d9d1d73">getSubs</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">return</span> nodeToSubsMap[node];</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  }</div><div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#acd1f0ce7936ced59bfaf04956a0f8214"> 262</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#acd1f0ce7936ced59bfaf04956a0f8214">getRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  {</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">return</span> nodeToRepMap[node];</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  }</div><div class="line"><a name="l00266"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aa30231dab5b7c759e4e5d76422a5eb8e"> 266</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aa30231dab5b7c759e4e5d76422a5eb8e">resetRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  {</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  nodeToRepMap.erase(node);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  }</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a081bf1238121eb52a0c9ad60f77ecbcd">moveInEdgesToRepNode</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>*node, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* rep );</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aa436aac95be84d1946169f4984deae59">moveOutEdgesToRepNode</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>*node, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* rep );</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aabe2861fcbc364e2c8aa8114d4879c39"> 284</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aabe2861fcbc364e2c8aa8114d4879c39">moveEdgesToRepNode</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>*node, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* rep )</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  {</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keywordtype">bool</span> gepIn = <a class="code" href="classSVF_1_1ConstraintGraph.html#a081bf1238121eb52a0c9ad60f77ecbcd">moveInEdgesToRepNode</a>(node, rep);</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordtype">bool</span> gepOut = <a class="code" href="classSVF_1_1ConstraintGraph.html#aa436aac95be84d1946169f4984deae59">moveOutEdgesToRepNode</a>(node, rep);</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordflow">return</span> (gepIn || gepOut);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  }</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div><div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#af790af4146197682dd4f9abfad1434f6"> 292</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#af790af4146197682dd4f9abfad1434f6">isZeroOffsettedGepCGEdge</a>(<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a> *edge)<span class="keyword"> const</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a> *normalGepCGEdge = SVFUtil::dyn_cast<NormalGepCGEdge>(edge))</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keywordflow">if</span> (0 == normalGepCGEdge->getConstantFieldIdx())</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div><div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a48a71f212e368769218a6f332822c976"> 302</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFIR.html#a51bf00bfd1d32ea8a4a280cf99725d7d">SVFIR::CallSiteToFunPtrMap</a>& <a class="code" href="classSVF_1_1ConstraintGraph.html#a48a71f212e368769218a6f332822c976">getIndirectCallsites</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1SVFIR.html#a2d2131128ceb3362b5dc89317cfd88a0">getIndirectCallsites</a>();</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  }</div><div class="line"><a name="l00306"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#ab2b4725a8fcae8a1bc3c026d236005b8"> 306</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#ab2b4725a8fcae8a1bc3c026d236005b8">getBlackHoleNode</a>()</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>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1IRGraph.html#a3ce34b9fcb651689bce44ab48fbcdff0">getBlackHoleNode</a>();</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  }</div><div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a8ba74f82c1e796f2888ba34bc8355ce9"> 310</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a8ba74f82c1e796f2888ba34bc8355ce9">isBlkObjOrConstantObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</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"> 312</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1SVFIR.html#ad9895f2d075eb402390e3b01ed68e001">isBlkObjOrConstantObj</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  }</div><div class="line"><a name="l00314"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#afd200919cf8742bb62bb0bde279a558a"> 314</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>& <a class="code" href="classSVF_1_1ConstraintGraph.html#afd200919cf8742bb62bb0bde279a558a">getAllFieldsObjVars</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  {</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">getAllFieldsObjVars</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  }</div><div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a6e8c46641da751fe3369c9d5407ce415"> 318</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a6e8c46641da751fe3369c9d5407ce415">getBaseObjVar</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  {</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(<span class="keywordtype">id</span>);</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_1ConstraintGraph.html#a38fd07dd86f6187a7671f9f85565fccc"> 322</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a38fd07dd86f6187a7671f9f85565fccc">isSingleFieldObj</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="l00323"></a><span class="lineno"> 323</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* mem = pag-><a class="code" href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749">getBaseObj</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="keywordflow">return</span> (mem-><a class="code" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">getMaxFieldOffsetLimit</a>() == 1);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  }</div><div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a3f727a2822fb18a14ce9e10c6534cf5a"> 328</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a3f727a2822fb18a14ce9e10c6534cf5a">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="l00329"></a><span class="lineno"> 329</span>  {</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gep = pag-><a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(<span class="keywordtype">id</span>,ls);</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">sccRepNode</a>(gep)==gep && <a class="code" href="classSVF_1_1ConstraintGraph.html#aad6c37476edfd9ae92dc8c0d004d782d">hasConstraintNode</a>(gep)==<span class="keyword">false</span>)</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <a class="code" href="classSVF_1_1ConstraintGraph.html#a5ea9c47d232f36b66d985f979f33293b">addConstraintNode</a>(<span class="keyword">new</span> <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>(gep),gep);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">return</span> gep;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  }</div><div class="line"><a name="l00337"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a7c8a29ad1d270fca745f233bb4800731"> 337</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a7c8a29ad1d270fca745f233bb4800731">getFIObjVar</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fi = pag-><a class="code" href="classSVF_1_1SVFIR.html#a2878e202045b7f2c817185e8bf95d354">getFIObjVar</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">sccRepNode</a>(fi) == fi && <a class="code" href="classSVF_1_1ConstraintGraph.html#aad6c37476edfd9ae92dc8c0d004d782d">hasConstraintNode</a>(fi)==<span class="keyword">false</span>)</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <a class="code" href="classSVF_1_1ConstraintGraph.html#a5ea9c47d232f36b66d985f979f33293b">addConstraintNode</a>(<span class="keyword">new</span> <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>(fi),fi);</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keywordflow">return</span> fi;</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  }</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div><div class="line"><a name="l00349"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c"> 349</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c">isPWCNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  {</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">getConstraintNode</a>(nodeId)-><a class="code" href="classSVF_1_1ConstraintNode.html#a0ffe4f1ca1a6f70466cc1c6b3b12c90d">isPWCNode</a>();</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  }</div><div class="line"><a name="l00353"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a03f9fe8ae7094c39937f47f422276724"> 353</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a03f9fe8ae7094c39937f47f422276724">setPWCNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  {</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <a class="code" href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">getConstraintNode</a>(nodeId)-><a class="code" href="classSVF_1_1ConstraintNode.html#ad8701df90d93c5dfed26cff8f0b2fbb3">setPWCNode</a>();</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  }</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span> </div><div class="line"><a name="l00361"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aa867ffe0f3639a0ef5b5c36696e733be"> 361</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aa867ffe0f3639a0ef5b5c36696e733be">hasNodesToBeCollapsed</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordflow">return</span> (!nodesToBeCollapsed.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>());</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_1ConstraintGraph.html#a19e69dabc1f5d16129bfedc81e6e7ceb"> 365</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a19e69dabc1f5d16129bfedc81e6e7ceb">addNodeToBeCollapsed</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  {</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  nodesToBeCollapsed.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  }</div><div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a006667ed55132ca0909c0e9118fea704"> 369</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a006667ed55132ca0909c0e9118fea704">getNextCollapseNode</a>()</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  {</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keywordflow">return</span> nodesToBeCollapsed.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  }</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#af9fc8308845628fe8900528573e30462">dump</a>(<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>);</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aa87bf07fc538c2cf425138727e7acbce">print</a>();</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a27d8078577d479c84f2a87b44f015d1c">view</a>();</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span> };</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span> } <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="keyword">namespace </span><a class="code" href="namespacellvm.html">llvm</a></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> {</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="comment">/* !</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="comment"> * GraphTraits specializations for the generic graph algorithms.</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="comment"> * Provide graph traits for traversing from a constraint node using standard graph traversals.</span></div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="comment"> */</span></div><div class="line"><a name="l00392"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintNode_01_5_01_4.html"> 392</a></span> <span class="keyword">template</span><> <span class="keyword">struct </span>GraphTraits<<a class="code" href="namespaceSVF.html">SVF</a>::ConstraintNode*> : <span class="keyword">public</span> GraphTraits<SVF::GenericNode<SVF::ConstraintNode,SVF::ConstraintEdge>* ></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> {</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> };</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> </div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keyword">template</span><></div><div class="line"><a name="l00398"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1ConstraintNode_01_5_01_4_01_4.html"> 398</a></span> <span class="keyword">struct </span>GraphTraits<Inverse<SVF::ConstraintNode *> > : <span class="keyword">public</span> GraphTraits<Inverse<SVF::GenericNode<SVF::ConstraintNode,SVF::ConstraintEdge>* > ></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span> {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span> };</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> </div><div class="line"><a name="l00402"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintGraph_01_5_01_4.html"> 402</a></span> <span class="keyword">template</span><> <span class="keyword">struct </span>GraphTraits<SVF::<a class="code" href="classSVF_1_1ConstraintGraph.html#a7e4c0c3e6e3c64d2729abd0f161cf550">ConstraintGraph</a>*> : <span class="keyword">public</span> GraphTraits<SVF::GenericGraph<SVF::ConstraintNode,SVF::ConstraintEdge>* ></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="structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintGraph_01_5_01_4.html#a3f34a804842ca97e422cb255ff670b5c"> 404</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1ConstraintNode.html">SVF::ConstraintNode</a> *<a class="code" href="structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintGraph_01_5_01_4.html#a3f34a804842ca97e422cb255ff670b5c">NodeRef</a>;</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> };</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span> </div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span> } <span class="comment">// End namespace llvm</span></div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="preprocessor">#endif </span><span class="comment">/* CONSG_H_ */</span><span class="preprocessor"></span></div><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#l00148">IRGraph.h:148</a></div></div>
|
|
69
|
+
<a href="ConsG_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">//===- ConsG.h -- Constraint graph representation-----------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-2017> <Yulei Sui></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// along with this program. If not, see <http://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * ConstraintGraph.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: Oct 14, 2013</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 CONSG_H_</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#define CONSG_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="ConsGEdge_8h.html">Graphs/ConsGEdge.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="ConsGNode_8h.html">Graphs/ConsGNode.h</a>"</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html"> 44</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1GenericGraph.html">GenericGraph</a><ConstraintNode,ConstraintEdge></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#af2dcf9fd0bc3d353c8582849cdabdf54"> 48</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID, ConstraintNode *></a> <a class="code" href="classSVF_1_1ConstraintGraph.html#af2dcf9fd0bc3d353c8582849cdabdf54">ConstraintNodeIDToNodeMapTy</a>;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a15bc278f76cdfcf38e623cedbc80d025"> 49</a></span>  <span class="keyword">typedef</span> ConstraintEdge::ConstraintEdgeSetTy::iterator <a class="code" href="classSVF_1_1ConstraintGraph.html#a15bc278f76cdfcf38e623cedbc80d025">ConstraintNodeIter</a>;</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#afe34ca6bdbb22b188799a4297fd19004"> 50</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID, NodeID></a> <a class="code" href="classSVF_1_1ConstraintGraph.html#afe34ca6bdbb22b188799a4297fd19004">NodeToRepMap</a>;</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#ac7d24753491a9bab39a13b32bb65f139"> 51</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID, NodeBS></a> <a class="code" href="classSVF_1_1ConstraintGraph.html#ac7d24753491a9bab39a13b32bb65f139">NodeToSubsMap</a>;</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#ae80fc7e5d68e103d8f3a82bc9ffb0f00"> 52</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList<NodeID></a> <a class="code" href="classSVF_1_1ConstraintGraph.html#ae80fc7e5d68e103d8f3a82bc9ffb0f00">WorkList</a>;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aa8b09f64c6e4bbd081c6062a1a0e8948"> 55</a></span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>*<a class="code" href="classSVF_1_1ConstraintGraph.html#aa8b09f64c6e4bbd081c6062a1a0e8948">pag</a>;</div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#ab1b5ee9202bd9f5d738f9850b42a45d2"> 56</a></span>  NodeToRepMap <a class="code" href="classSVF_1_1ConstraintGraph.html#ab1b5ee9202bd9f5d738f9850b42a45d2">nodeToRepMap</a>;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#af91f1027cd5de591ae40865f691c5f60"> 57</a></span>  NodeToSubsMap <a class="code" href="classSVF_1_1ConstraintGraph.html#af91f1027cd5de591ae40865f691c5f60">nodeToSubsMap</a>;</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#af3406f1e191d9d6d9c33d23bdd2d564b"> 58</a></span>  WorkList <a class="code" href="classSVF_1_1ConstraintGraph.html#af3406f1e191d9d6d9c33d23bdd2d564b">nodesToBeCollapsed</a>;</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#ac246dc91562d4b1e168b7c39b2c2720f"> 59</a></span>  <a class="code" href="namespaceSVF.html#ae71551d6a1fc300e0403297aa25ddf94">EdgeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#ac246dc91562d4b1e168b7c39b2c2720f">edgeIndex</a>;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a5bbd6df25027d26911f5d8d6a10881dc"> 61</a></span>  <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a5bbd6df25027d26911f5d8d6a10881dc">AddrCGEdgeSet</a>;</div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a1be3ebb84b3d334daf98f7e6f5b82256"> 62</a></span>  <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a1be3ebb84b3d334daf98f7e6f5b82256">directEdgeSet</a>;</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a1cb9124b29720e7a5b39d83419f9cc17"> 63</a></span>  <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a1cb9124b29720e7a5b39d83419f9cc17">LoadCGEdgeSet</a>;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a0f9d5eef25827ac1d380e5d8bd225025"> 64</a></span>  <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a0f9d5eef25827ac1d380e5d8bd225025">StoreCGEdgeSet</a>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a1973126243ff619033a78a3782944278">buildCG</a>();</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a77ba38543b1ee164f1ae95589d5dbc44">destroy</a>();</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a4dd7feb1ed62883dd35ced962ba6b59e"> 70</a></span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& <a class="code" href="classSVF_1_1ConstraintGraph.html#a4dd7feb1ed62883dd35ced962ba6b59e">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9">SVFStmt::PEDGEK</a> kind)</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1SVFIR.html#a65a4af3d6f0bfc11e31f020bb2966576">getPTASVFStmtSet</a>(kind);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  }</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a00242eb1c1204abf1f5eb0cae759a38c"> 77</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a00242eb1c1204abf1f5eb0cae759a38c">getValueNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* value)<span class="keyword"> const</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">sccRepNode</a>(pag-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(value));</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a802d7aa5c5bdc5c8720120f71d316b68"> 82</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a802d7aa5c5bdc5c8720120f71d316b68">getReturnNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* value)<span class="keyword"> const</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1IRGraph.html#a96010999a4e5013beb1c37ef753ff910">getReturnNode</a>(value);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a527342ce5ac3b9491d7ad4302145cec5"> 87</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a527342ce5ac3b9491d7ad4302145cec5">getVarargNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* value)<span class="keyword"> const</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1IRGraph.html#a8b10c318674a47035d617b3ade4f069b">getVarargNode</a>(value);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a7e4c0c3e6e3c64d2729abd0f161cf550"> 95</a></span>  <a class="code" href="classSVF_1_1ConstraintGraph.html#a7e4c0c3e6e3c64d2729abd0f161cf550">ConstraintGraph</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* <a class="code" href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a>): pag(p), edgeIndex(0)</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="classSVF_1_1ConstraintGraph.html#a1973126243ff619033a78a3782944278">buildCG</a>();</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a171331edb83de1fd118eebb3a0fa1662"> 100</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a171331edb83de1fd118eebb3a0fa1662">~ConstraintGraph</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>  <a class="code" href="classSVF_1_1ConstraintGraph.html#a77ba38543b1ee164f1ae95589d5dbc44">destroy</a>();</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87"> 107</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">getConstraintNode</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="l00108"></a><span class="lineno"> 108</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordtype">id</span> = <a class="code" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">sccRepNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div><div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a5ea9c47d232f36b66d985f979f33293b"> 112</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a5ea9c47d232f36b66d985f979f33293b">addConstraintNode</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <a class="code" href="classSVF_1_1GenericGraph.html#a0a8831a5429005ff9d71adbd6bf3994f">addGNode</a>(<span class="keywordtype">id</span>,node);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  }</div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aad6c37476edfd9ae92dc8c0d004d782d"> 116</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aad6c37476edfd9ae92dc8c0d004d782d">hasConstraintNode</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="l00117"></a><span class="lineno"> 117</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordtype">id</span> = <a class="code" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">sccRepNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1GenericGraph.html#a6885064afa211958af7b73f0233284e5">hasGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a9e21bc9b86080b4059f0907e9a7b33f3"> 121</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a9e21bc9b86080b4059f0907e9a7b33f3">removeConstraintNode</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node)</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  {</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <a class="code" href="classSVF_1_1GenericGraph.html#a1817b65e76052f11e36a67d6b9efd915">removeGNode</a>(node);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a5f57823a4918f6c6bfee9c18beddda51"> 128</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a5f57823a4918f6c6bfee9c18beddda51">hasEdge</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* src, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* dst, <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375">ConstraintEdge::ConstraintEdgeK</a> kind)</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a> edge(src,dst,kind);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">if</span>(kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a29b0aa3353f866ef1655ab6d4716feb9">ConstraintEdge::Copy</a> ||</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375acfd0a194af0da66162545f0089eb4baa">ConstraintEdge::NormalGep</a> || kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375ae5df3ce07dd670b48916f7b8ab33ae5a">ConstraintEdge::VariantGep</a>)</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">return</span> directEdgeSet.find(&edge) != directEdgeSet.end();</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375aed68bc43e8aae49e8590e140eb0ffaf3">ConstraintEdge::Addr</a>)</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">return</span> AddrCGEdgeSet.find(&edge) != AddrCGEdgeSet.end();</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a20d6a102ddc06257a822ffffcc5a3b47">ConstraintEdge::Store</a>)</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">return</span> StoreCGEdgeSet.find(&edge) != StoreCGEdgeSet.end();</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a1bdeb9a06641d16b43391120812b40b2">ConstraintEdge::Load</a>)</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">return</span> LoadCGEdgeSet.find(&edge) != LoadCGEdgeSet.end();</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"no other kind!"</span>);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a04a57ef9803917346cb966e05ecd0de4"> 146</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a04a57ef9803917346cb966e05ecd0de4">getEdge</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* src, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* dst, <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375">ConstraintEdge::ConstraintEdgeK</a> kind)</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a> edge(src,dst,kind);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">if</span>(kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a29b0aa3353f866ef1655ab6d4716feb9">ConstraintEdge::Copy</a> || kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375acfd0a194af0da66162545f0089eb4baa">ConstraintEdge::NormalGep</a> || kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375ae5df3ce07dd670b48916f7b8ab33ae5a">ConstraintEdge::VariantGep</a>)</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">auto</span> eit = directEdgeSet.find(&edge);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">return</span> *eit;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375aed68bc43e8aae49e8590e140eb0ffaf3">ConstraintEdge::Addr</a>)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keyword">auto</span> eit = AddrCGEdgeSet.find(&edge);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">return</span> *eit;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a20d6a102ddc06257a822ffffcc5a3b47">ConstraintEdge::Store</a>)</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">auto</span> eit = StoreCGEdgeSet.find(&edge);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">return</span> *eit;</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">else</span> <span class="keywordflow">if</span>(kind == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a1bdeb9a06641d16b43391120812b40b2">ConstraintEdge::Load</a>)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keyword">auto</span> eit = LoadCGEdgeSet.find(&edge);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">return</span> *eit;</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">else</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  {</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"no other kind!"</span>);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  }</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a56cfcc39637cf5208f65297a63dde266">addAddrCGEdge</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="l00181"></a><span class="lineno"> 181</span>  <a class="code" href="classSVF_1_1CopyCGEdge.html">CopyCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a60bb27100e8c264be2add004069d1758">addCopyCGEdge</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="l00183"></a><span class="lineno"> 183</span>  <a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a5aac453464955185ca0d47e91db9df7b">addNormalGepCGEdge</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="l00184"></a><span class="lineno"> 184</span>  <a class="code" href="classSVF_1_1VariantGepCGEdge.html">VariantGepCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a6902cabb252b1eaadb3c8220b4581a2f">addVariantGepCGEdge</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="l00186"></a><span class="lineno"> 186</span>  <a class="code" href="classSVF_1_1LoadCGEdge.html">LoadCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a1e5a23fbd08cf4186775baffbd6a7934">addLoadCGEdge</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="l00188"></a><span class="lineno"> 188</span>  <a class="code" href="classSVF_1_1StoreCGEdge.html">StoreCGEdge</a>* <a class="code" href="classSVF_1_1ConstraintGraph.html#a633666953f8d6675961981c4eab1adb0">addStoreCGEdge</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="l00190"></a><span class="lineno"> 190</span> </div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a>& <a class="code" href="classSVF_1_1ConstraintGraph.html#adee52f15f5ff58dd455e419c2643f89b">getAddrCGEdges</a>()</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a5bbd6df25027d26911f5d8d6a10881dc">AddrCGEdgeSet</a>;</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_1ConstraintGraph.html#ad7196d5f05192d9468ee0ca93b6b66ee"> 199</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a>& <a class="code" href="classSVF_1_1ConstraintGraph.html#ad7196d5f05192d9468ee0ca93b6b66ee">getDirectCGEdges</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_1ConstraintGraph.html#a1be3ebb84b3d334daf98f7e6f5b82256">directEdgeSet</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_1ConstraintGraph.html#afb849d8f3425ff36497d062ecefd2cc1"> 204</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a>& <a class="code" href="classSVF_1_1ConstraintGraph.html#afb849d8f3425ff36497d062ecefd2cc1">getLoadCGEdges</a>()</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</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_1ConstraintGraph.html#a1cb9124b29720e7a5b39d83419f9cc17">LoadCGEdgeSet</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_1ConstraintGraph.html#a61ef90be6ccc01634e5440f22a0f746e"> 209</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ConstraintEdge.html#ad155e1ed2473cc4f5f57128d282ac541">ConstraintEdge::ConstraintEdgeSetTy</a>& <a class="code" href="classSVF_1_1ConstraintGraph.html#a61ef90be6ccc01634e5440f22a0f746e">getStoreCGEdges</a>()</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a0f9d5eef25827ac1d380e5d8bd225025">StoreCGEdgeSet</a>;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a4db3484e3710c3f5cc86ec32dd643722">reTargetDstOfEdge</a>(<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* newDstNode);</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aaae56afed424f7cd59fddb3fcb2f7214">reTargetSrcOfEdge</a>(<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* newSrcNode);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#acc23df2db1fa7b8e0270d8a04f08f2ee">removeAddrEdge</a>(<a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* edge);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a9fc73676ea133651604e2528fe1d8244">removeDirectEdge</a>(<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aa4bca2422049413439cb0c3400f2ce28">removeLoadEdge</a>(<a class="code" href="classSVF_1_1LoadCGEdge.html">LoadCGEdge</a>* edge);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aad3d05c949c33a587b3ac6d627f5a0a2">removeStoreEdge</a>(<a class="code" href="classSVF_1_1StoreCGEdge.html">StoreCGEdge</a>* edge);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div><div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f"> 233</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">sccRepNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  NodeToRepMap::const_iterator it = nodeToRepMap.find(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">if</span>(it==nodeToRepMap.end())</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordflow">return</span> <span class="keywordtype">id</span>;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  }</div><div class="line"><a name="l00241"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aed605b010e313f4b11e95b83fe50e3b3"> 241</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>& <a class="code" href="classSVF_1_1ConstraintGraph.html#aed605b010e313f4b11e95b83fe50e3b3">sccSubNodes</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  {</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  nodeToSubsMap[id].<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">return</span> nodeToSubsMap[id];</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  }</div><div class="line"><a name="l00246"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#abea65bf6dd43aa312082f8d4c7c3e3cb"> 246</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#abea65bf6dd43aa312082f8d4c7c3e3cb">setRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rep)</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  {</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  nodeToRepMap[node] = rep;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  }</div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a148235bd1355a700d3ce187702e89bc8"> 250</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a148235bd1355a700d3ce187702e89bc8">setSubs</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>& subs)</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  {</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  nodeToSubsMap[node] |= subs;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  }</div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a5fe3815a7990e16b99cf46e90529f8b3"> 254</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a5fe3815a7990e16b99cf46e90529f8b3">resetSubs</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  {</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  nodeToSubsMap.erase(node);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  }</div><div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#ade6a90ed5e0a9e8615bafec54d9d1d73"> 258</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>& <a class="code" href="classSVF_1_1ConstraintGraph.html#ade6a90ed5e0a9e8615bafec54d9d1d73">getSubs</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">return</span> nodeToSubsMap[node];</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  }</div><div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#acd1f0ce7936ced59bfaf04956a0f8214"> 262</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#acd1f0ce7936ced59bfaf04956a0f8214">getRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  {</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">return</span> nodeToRepMap[node];</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  }</div><div class="line"><a name="l00266"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aa30231dab5b7c759e4e5d76422a5eb8e"> 266</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aa30231dab5b7c759e4e5d76422a5eb8e">resetRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  {</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  nodeToRepMap.erase(node);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  }</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a081bf1238121eb52a0c9ad60f77ecbcd">moveInEdgesToRepNode</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>*node, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* rep );</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aa436aac95be84d1946169f4984deae59">moveOutEdgesToRepNode</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>*node, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* rep );</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aabe2861fcbc364e2c8aa8114d4879c39"> 284</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aabe2861fcbc364e2c8aa8114d4879c39">moveEdgesToRepNode</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>*node, <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* rep )</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  {</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keywordtype">bool</span> gepIn = <a class="code" href="classSVF_1_1ConstraintGraph.html#a081bf1238121eb52a0c9ad60f77ecbcd">moveInEdgesToRepNode</a>(node, rep);</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordtype">bool</span> gepOut = <a class="code" href="classSVF_1_1ConstraintGraph.html#aa436aac95be84d1946169f4984deae59">moveOutEdgesToRepNode</a>(node, rep);</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordflow">return</span> (gepIn || gepOut);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  }</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div><div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#af790af4146197682dd4f9abfad1434f6"> 292</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#af790af4146197682dd4f9abfad1434f6">isZeroOffsettedGepCGEdge</a>(<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a> *edge)<span class="keyword"> const</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a> *normalGepCGEdge = SVFUtil::dyn_cast<NormalGepCGEdge>(edge))</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keywordflow">if</span> (0 == normalGepCGEdge->getConstantFieldIdx())</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div><div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a48a71f212e368769218a6f332822c976"> 302</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFIR.html#a51bf00bfd1d32ea8a4a280cf99725d7d">SVFIR::CallSiteToFunPtrMap</a>& <a class="code" href="classSVF_1_1ConstraintGraph.html#a48a71f212e368769218a6f332822c976">getIndirectCallsites</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1SVFIR.html#a2d2131128ceb3362b5dc89317cfd88a0">getIndirectCallsites</a>();</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  }</div><div class="line"><a name="l00306"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#ab2b4725a8fcae8a1bc3c026d236005b8"> 306</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#ab2b4725a8fcae8a1bc3c026d236005b8">getBlackHoleNode</a>()</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>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1IRGraph.html#a3ce34b9fcb651689bce44ab48fbcdff0">getBlackHoleNode</a>();</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  }</div><div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a8ba74f82c1e796f2888ba34bc8355ce9"> 310</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a8ba74f82c1e796f2888ba34bc8355ce9">isBlkObjOrConstantObj</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</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"> 312</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1SVFIR.html#ad9895f2d075eb402390e3b01ed68e001">isBlkObjOrConstantObj</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  }</div><div class="line"><a name="l00314"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#afd200919cf8742bb62bb0bde279a558a"> 314</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>& <a class="code" href="classSVF_1_1ConstraintGraph.html#afd200919cf8742bb62bb0bde279a558a">getAllFieldsObjVars</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  {</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">getAllFieldsObjVars</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  }</div><div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a6e8c46641da751fe3369c9d5407ce415"> 318</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a6e8c46641da751fe3369c9d5407ce415">getBaseObjVar</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  {</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(<span class="keywordtype">id</span>);</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_1ConstraintGraph.html#a38fd07dd86f6187a7671f9f85565fccc"> 322</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a38fd07dd86f6187a7671f9f85565fccc">isSingleFieldObj</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="l00323"></a><span class="lineno"> 323</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* mem = pag-><a class="code" href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749">getBaseObj</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="keywordflow">return</span> (mem-><a class="code" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">getMaxFieldOffsetLimit</a>() == 1);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  }</div><div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a3f727a2822fb18a14ce9e10c6534cf5a"> 328</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a3f727a2822fb18a14ce9e10c6534cf5a">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="l00329"></a><span class="lineno"> 329</span>  {</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gep = pag-><a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(<span class="keywordtype">id</span>,ls);</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">sccRepNode</a>(gep)==gep && <a class="code" href="classSVF_1_1ConstraintGraph.html#aad6c37476edfd9ae92dc8c0d004d782d">hasConstraintNode</a>(gep)==<span class="keyword">false</span>)</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <a class="code" href="classSVF_1_1ConstraintGraph.html#a5ea9c47d232f36b66d985f979f33293b">addConstraintNode</a>(<span class="keyword">new</span> <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>(gep),gep);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">return</span> gep;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  }</div><div class="line"><a name="l00337"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a7c8a29ad1d270fca745f233bb4800731"> 337</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a7c8a29ad1d270fca745f233bb4800731">getFIObjVar</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fi = pag-><a class="code" href="classSVF_1_1SVFIR.html#a2878e202045b7f2c817185e8bf95d354">getFIObjVar</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  assert((<a class="code" href="classSVF_1_1ConstraintGraph.html#aad6c37476edfd9ae92dc8c0d004d782d">hasConstraintNode</a>(fi) || <a class="code" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">sccRepNode</a>(fi) != fi) && <span class="stringliteral">"non-existing fi obj??"</span>);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keywordflow">return</span> fi;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  }</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div><div class="line"><a name="l00348"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c"> 348</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c">isPWCNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  {</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">getConstraintNode</a>(nodeId)-><a class="code" href="classSVF_1_1ConstraintNode.html#a0ffe4f1ca1a6f70466cc1c6b3b12c90d">isPWCNode</a>();</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  }</div><div class="line"><a name="l00352"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a03f9fe8ae7094c39937f47f422276724"> 352</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a03f9fe8ae7094c39937f47f422276724">setPWCNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  {</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <a class="code" href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">getConstraintNode</a>(nodeId)-><a class="code" href="classSVF_1_1ConstraintNode.html#ad8701df90d93c5dfed26cff8f0b2fbb3">setPWCNode</a>();</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  }</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div><div class="line"><a name="l00360"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#aa867ffe0f3639a0ef5b5c36696e733be"> 360</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aa867ffe0f3639a0ef5b5c36696e733be">hasNodesToBeCollapsed</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keywordflow">return</span> (!nodesToBeCollapsed.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>());</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  }</div><div class="line"><a name="l00364"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a19e69dabc1f5d16129bfedc81e6e7ceb"> 364</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a19e69dabc1f5d16129bfedc81e6e7ceb">addNodeToBeCollapsed</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  {</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  nodesToBeCollapsed.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  }</div><div class="line"><a name="l00368"></a><span class="lineno"><a class="line" href="classSVF_1_1ConstraintGraph.html#a006667ed55132ca0909c0e9118fea704"> 368</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1ConstraintGraph.html#a006667ed55132ca0909c0e9118fea704">getNextCollapseNode</a>()</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  {</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keywordflow">return</span> nodesToBeCollapsed.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  }</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#af9fc8308845628fe8900528573e30462">dump</a>(<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="cJSON_8h.html#a25d22ecc7e656d2c59332072684e8766">name</a>);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#aa87bf07fc538c2cf425138727e7acbce">print</a>();</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a27d8078577d479c84f2a87b44f015d1c">view</a>();</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span> };</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span> } <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span> </div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="keyword">namespace </span><a class="code" href="namespacellvm.html">llvm</a></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span> {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="comment">/* !</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="comment"> * GraphTraits specializations for the generic graph algorithms.</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="comment"> * Provide graph traits for traversing from a constraint node using standard graph traversals.</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="comment"> */</span></div><div class="line"><a name="l00391"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintNode_01_5_01_4.html"> 391</a></span> <span class="keyword">template</span><> <span class="keyword">struct </span>GraphTraits<<a class="code" href="namespaceSVF.html">SVF</a>::ConstraintNode*> : <span class="keyword">public</span> GraphTraits<SVF::GenericNode<SVF::ConstraintNode,SVF::ConstraintEdge>* ></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> {</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> };</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="keyword">template</span><></div><div class="line"><a name="l00397"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1ConstraintNode_01_5_01_4_01_4.html"> 397</a></span> <span class="keyword">struct </span>GraphTraits<Inverse<SVF::ConstraintNode *> > : <span class="keyword">public</span> GraphTraits<Inverse<SVF::GenericNode<SVF::ConstraintNode,SVF::ConstraintEdge>* > ></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</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"> 400</span> </div><div class="line"><a name="l00401"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintGraph_01_5_01_4.html"> 401</a></span> <span class="keyword">template</span><> <span class="keyword">struct </span>GraphTraits<SVF::<a class="code" href="classSVF_1_1ConstraintGraph.html#a7e4c0c3e6e3c64d2729abd0f161cf550">ConstraintGraph</a>*> : <span class="keyword">public</span> GraphTraits<SVF::GenericGraph<SVF::ConstraintNode,SVF::ConstraintEdge>* ></div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span> {</div><div class="line"><a name="l00403"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintGraph_01_5_01_4.html#a3f34a804842ca97e422cb255ff670b5c"> 403</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1ConstraintNode.html">SVF::ConstraintNode</a> *<a class="code" href="structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintGraph_01_5_01_4.html#a3f34a804842ca97e422cb255ff670b5c">NodeRef</a>;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span> };</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> </div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span> } <span class="comment">// End namespace llvm</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"> 408</span> <span class="preprocessor">#endif </span><span class="comment">/* CONSG_H_ */</span><span class="preprocessor"></span></div><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#l00148">IRGraph.h:148</a></div></div>
|
|
70
70
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_afb849d8f3425ff36497d062ecefd2cc1"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#afb849d8f3425ff36497d062ecefd2cc1">SVF::ConstraintGraph::getLoadCGEdges</a></div><div class="ttdeci">ConstraintEdge::ConstraintEdgeSetTy & getLoadCGEdges()</div><div class="ttdoc">Get Load edges. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00204">ConsG.h:204</a></div></div>
|
|
71
71
|
<div class="ttc" id="cJSON_8cpp_html_a009ef1d888ab6dbe77e6b42b0b39f1ae"><div class="ttname"><a href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a></div><div class="ttdeci">cJSON * p</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02559">cJSON.cpp:2559</a></div></div>
|
|
72
72
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a5f57823a4918f6c6bfee9c18beddda51"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a5f57823a4918f6c6bfee9c18beddda51">SVF::ConstraintGraph::hasEdge</a></div><div class="ttdeci">bool hasEdge(ConstraintNode *src, ConstraintNode *dst, ConstraintEdge::ConstraintEdgeK kind)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00128">ConsG.h:128</a></div></div>
|
|
@@ -114,12 +114,12 @@ $(function() {
|
|
|
114
114
|
<div class="ttc" id="classSVF_1_1LoadCGEdge_html"><div class="ttname"><a href="classSVF_1_1LoadCGEdge.html">SVF::LoadCGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00191">ConsGEdge.h:191</a></div></div>
|
|
115
115
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a171331edb83de1fd118eebb3a0fa1662"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a171331edb83de1fd118eebb3a0fa1662">SVF::ConstraintGraph::~ConstraintGraph</a></div><div class="ttdeci">virtual ~ConstraintGraph()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00100">ConsG.h:100</a></div></div>
|
|
116
116
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a5ea9c47d232f36b66d985f979f33293b"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a5ea9c47d232f36b66d985f979f33293b">SVF::ConstraintGraph::addConstraintNode</a></div><div class="ttdeci">void addConstraintNode(ConstraintNode *node, NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00112">ConsG.h:112</a></div></div>
|
|
117
|
-
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a19e69dabc1f5d16129bfedc81e6e7ceb"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a19e69dabc1f5d16129bfedc81e6e7ceb">SVF::ConstraintGraph::addNodeToBeCollapsed</a></div><div class="ttdeci">void addNodeToBeCollapsed(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#
|
|
117
|
+
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a19e69dabc1f5d16129bfedc81e6e7ceb"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a19e69dabc1f5d16129bfedc81e6e7ceb">SVF::ConstraintGraph::addNodeToBeCollapsed</a></div><div class="ttdeci">void addNodeToBeCollapsed(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00364">ConsG.h:364</a></div></div>
|
|
118
118
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_aa87bf07fc538c2cf425138727e7acbce"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#aa87bf07fc538c2cf425138727e7acbce">SVF::ConstraintGraph::print</a></div><div class="ttdeci">void print()</div><div class="ttdoc">Print CG into terminal. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8cpp_source.html#l00543">ConsG.cpp:543</a></div></div>
|
|
119
119
|
<div class="ttc" id="classSVF_1_1IRGraph_html_abffddd41cc308b9b3bd5ad4a7f8f1624"><div class="ttname"><a href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">SVF::IRGraph::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00124">IRGraph.h:124</a></div></div>
|
|
120
120
|
<div class="ttc" id="classSVF_1_1ConstraintEdge_html_a663af27955ba0c545f34fa1f076b7375aed68bc43e8aae49e8590e140eb0ffaf3"><div class="ttname"><a href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375aed68bc43e8aae49e8590e140eb0ffaf3">SVF::ConstraintEdge::Addr</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00056">ConsGEdge.h:56</a></div></div>
|
|
121
121
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a65a4af3d6f0bfc11e31f020bb2966576"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a65a4af3d6f0bfc11e31f020bb2966576">SVF::SVFIR::getPTASVFStmtSet</a></div><div class="ttdeci">SVFStmt::SVFStmtSetTy & getPTASVFStmtSet(SVFStmt::PEDGEK kind)</div><div class="ttdoc">Get PTA edges set according to its kind. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00167">SVFIR.h:167</a></div></div>
|
|
122
|
-
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a84468bc9355d31e8c3e18369036ddf5c"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c">SVF::ConstraintGraph::isPWCNode</a></div><div class="ttdeci">bool isPWCNode(NodeID nodeId)</div><div class="ttdoc">Check/Set PWC (positive weight cycle) flag. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#
|
|
122
|
+
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a84468bc9355d31e8c3e18369036ddf5c"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c">SVF::ConstraintGraph::isPWCNode</a></div><div class="ttdeci">bool isPWCNode(NodeID nodeId)</div><div class="ttdoc">Check/Set PWC (positive weight cycle) flag. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00348">ConsG.h:348</a></div></div>
|
|
123
123
|
<div class="ttc" id="ConsGEdge_8h_html"><div class="ttname"><a href="ConsGEdge_8h.html">ConsGEdge.h</a></div></div>
|
|
124
124
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a38fd07dd86f6187a7671f9f85565fccc"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a38fd07dd86f6187a7671f9f85565fccc">SVF::ConstraintGraph::isSingleFieldObj</a></div><div class="ttdeci">bool isSingleFieldObj(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00322">ConsG.h:322</a></div></div>
|
|
125
125
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a5bbd6df25027d26911f5d8d6a10881dc"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a5bbd6df25027d26911f5d8d6a10881dc">SVF::ConstraintGraph::AddrCGEdgeSet</a></div><div class="ttdeci">ConstraintEdge::ConstraintEdgeSetTy AddrCGEdgeSet</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00061">ConsG.h:61</a></div></div>
|
|
@@ -140,7 +140,7 @@ $(function() {
|
|
|
140
140
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a60bb27100e8c264be2add004069d1758"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a60bb27100e8c264be2add004069d1758">SVF::ConstraintGraph::addCopyCGEdge</a></div><div class="ttdeci">CopyCGEdge * addCopyCGEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add Copy edge. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8cpp_source.html#l00184">ConsG.cpp:184</a></div></div>
|
|
141
141
|
<div class="ttc" id="classSVF_1_1ConstraintNode_html_a0ffe4f1ca1a6f70466cc1c6b3b12c90d"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a0ffe4f1ca1a6f70466cc1c6b3b12c90d">SVF::ConstraintNode::isPWCNode</a></div><div class="ttdeci">bool isPWCNode() const</div><div class="ttdoc">Whether a node involves in PWC, if so, all its points-to elements should become field-insensitive. </div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00081">ConsGNode.h:81</a></div></div>
|
|
142
142
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_adee52f15f5ff58dd455e419c2643f89b"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#adee52f15f5ff58dd455e419c2643f89b">SVF::ConstraintGraph::getAddrCGEdges</a></div><div class="ttdeci">ConstraintEdge::ConstraintEdgeSetTy & getAddrCGEdges()</div><div class="ttdoc">Get SVFIR edge. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00194">ConsG.h:194</a></div></div>
|
|
143
|
-
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_aa867ffe0f3639a0ef5b5c36696e733be"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#aa867ffe0f3639a0ef5b5c36696e733be">SVF::ConstraintGraph::hasNodesToBeCollapsed</a></div><div class="ttdeci">bool hasNodesToBeCollapsed() const</div><div class="ttdoc">Add/get nodes to be collapsed. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#
|
|
143
|
+
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_aa867ffe0f3639a0ef5b5c36696e733be"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#aa867ffe0f3639a0ef5b5c36696e733be">SVF::ConstraintGraph::hasNodesToBeCollapsed</a></div><div class="ttdeci">bool hasNodesToBeCollapsed() const</div><div class="ttdoc">Add/get nodes to be collapsed. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00360">ConsG.h:360</a></div></div>
|
|
144
144
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a4db3484e3710c3f5cc86ec32dd643722"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a4db3484e3710c3f5cc86ec32dd643722">SVF::ConstraintGraph::reTargetDstOfEdge</a></div><div class="ttdeci">void reTargetDstOfEdge(ConstraintEdge *edge, ConstraintNode *newDstNode)</div><div class="ttdoc">Used for cycle elimination. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8cpp_source.html#l00282">ConsG.cpp:282</a></div></div>
|
|
145
145
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a39b973543acdcdc5493832cc9d0f586f"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">SVF::ConstraintGraph::sccRepNode</a></div><div class="ttdeci">NodeID sccRepNode(NodeID id) const</div><div class="ttdoc">SCC rep/sub nodes methods. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00233">ConsG.h:233</a></div></div>
|
|
146
146
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a77ba38543b1ee164f1ae95589d5dbc44"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a77ba38543b1ee164f1ae95589d5dbc44">SVF::ConstraintGraph::destroy</a></div><div class="ttdeci">void destroy()</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8cpp_source.html#l00148">ConsG.cpp:148</a></div></div>
|
|
@@ -153,7 +153,7 @@ $(function() {
|
|
|
153
153
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a7276e82b4648ed0e1b3d1b8b37b24089"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">SVF::SVFIR::getAllFieldsObjVars</a></div><div class="ttdeci">NodeBS & getAllFieldsObjVars(const MemObj *obj)</div><div class="ttdoc">Get all fields of an object. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00479">SVFIR.cpp:479</a></div></div>
|
|
154
154
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_ade6a90ed5e0a9e8615bafec54d9d1d73"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#ade6a90ed5e0a9e8615bafec54d9d1d73">SVF::ConstraintGraph::getSubs</a></div><div class="ttdeci">NodeBS & getSubs(NodeID node)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00258">ConsG.h:258</a></div></div>
|
|
155
155
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a9fc73676ea133651604e2528fe1d8244"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a9fc73676ea133651604e2528fe1d8244">SVF::ConstraintGraph::removeDirectEdge</a></div><div class="ttdeci">void removeDirectEdge(ConstraintEdge *edge)</div><div class="ttdoc">Remove direct edge from their src and dst edge sets. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8cpp_source.html#l00403">ConsG.cpp:403</a></div></div>
|
|
156
|
-
<div class="ttc" id="structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintGraph_01_5_01_4_html_a3f34a804842ca97e422cb255ff670b5c"><div class="ttname"><a href="structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintGraph_01_5_01_4.html#a3f34a804842ca97e422cb255ff670b5c">llvm::GraphTraits< SVF::ConstraintGraph * >::NodeRef</a></div><div class="ttdeci">SVF::ConstraintNode * NodeRef</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#
|
|
156
|
+
<div class="ttc" id="structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintGraph_01_5_01_4_html_a3f34a804842ca97e422cb255ff670b5c"><div class="ttname"><a href="structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintGraph_01_5_01_4.html#a3f34a804842ca97e422cb255ff670b5c">llvm::GraphTraits< SVF::ConstraintGraph * >::NodeRef</a></div><div class="ttdeci">SVF::ConstraintNode * NodeRef</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00403">ConsG.h:403</a></div></div>
|
|
157
157
|
<div class="ttc" id="classSVF_1_1ConstraintEdge_html_a663af27955ba0c545f34fa1f076b7375a20d6a102ddc06257a822ffffcc5a3b47"><div class="ttname"><a href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a20d6a102ddc06257a822ffffcc5a3b47">SVF::ConstraintEdge::Store</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00056">ConsGEdge.h:56</a></div></div>
|
|
158
158
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_af3406f1e191d9d6d9c33d23bdd2d564b"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#af3406f1e191d9d6d9c33d23bdd2d564b">SVF::ConstraintGraph::nodesToBeCollapsed</a></div><div class="ttdeci">WorkList nodesToBeCollapsed</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00058">ConsG.h:58</a></div></div>
|
|
159
159
|
<div class="ttc" id="classSVF_1_1FIFOWorkList_html"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html">SVF::FIFOWorkList< NodeID ></a></div></div>
|
|
@@ -184,11 +184,11 @@ $(function() {
|
|
|
184
184
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a1973126243ff619033a78a3782944278"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a1973126243ff619033a78a3782944278">SVF::ConstraintGraph::buildCG</a></div><div class="ttdeci">void buildCG()</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8cpp_source.html#l00040">ConsG.cpp:40</a></div></div>
|
|
185
185
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a2d2131128ceb3362b5dc89317cfd88a0"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2d2131128ceb3362b5dc89317cfd88a0">SVF::SVFIR::getIndirectCallsites</a></div><div class="ttdeci">const CallSiteToFunPtrMap & getIndirectCallsites() const</div><div class="ttdoc">Add/get indirect callsites. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00299">SVFIR.h:299</a></div></div>
|
|
186
186
|
<div class="ttc" id="classSVF_1_1ConstraintEdge_html"><div class="ttname"><a href="classSVF_1_1ConstraintEdge.html">SVF::ConstraintEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00048">ConsGEdge.h:48</a></div></div>
|
|
187
|
-
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a006667ed55132ca0909c0e9118fea704"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a006667ed55132ca0909c0e9118fea704">SVF::ConstraintGraph::getNextCollapseNode</a></div><div class="ttdeci">NodeID getNextCollapseNode()</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#
|
|
187
|
+
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a006667ed55132ca0909c0e9118fea704"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a006667ed55132ca0909c0e9118fea704">SVF::ConstraintGraph::getNextCollapseNode</a></div><div class="ttdeci">NodeID getNextCollapseNode()</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00368">ConsG.h:368</a></div></div>
|
|
188
188
|
<div class="ttc" id="classSVF_1_1SVFIR_html"><div class="ttname"><a href="classSVF_1_1SVFIR.html">SVF::SVFIR</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00043">SVFIR.h:43</a></div></div>
|
|
189
189
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a20c0c65af266ac876cb722aee6e87101"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">SVF::SVFIR::getGepObjVar</a></div><div class="ttdeci">NodeID getGepObjVar(const MemObj *obj, const LocationSet &ls)</div><div class="ttdoc">Get a field SVFIR Object node according to base mem obj and offset. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00426">SVFIR.cpp:426</a></div></div>
|
|
190
190
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a0f9d5eef25827ac1d380e5d8bd225025"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a0f9d5eef25827ac1d380e5d8bd225025">SVF::ConstraintGraph::StoreCGEdgeSet</a></div><div class="ttdeci">ConstraintEdge::ConstraintEdgeSetTy StoreCGEdgeSet</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00064">ConsG.h:64</a></div></div>
|
|
191
|
-
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a03f9fe8ae7094c39937f47f422276724"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a03f9fe8ae7094c39937f47f422276724">SVF::ConstraintGraph::setPWCNode</a></div><div class="ttdeci">void setPWCNode(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#
|
|
191
|
+
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a03f9fe8ae7094c39937f47f422276724"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a03f9fe8ae7094c39937f47f422276724">SVF::ConstraintGraph::setPWCNode</a></div><div class="ttdeci">void setPWCNode(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00352">ConsG.h:352</a></div></div>
|
|
192
192
|
<div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
|
|
193
193
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a1be3ebb84b3d334daf98f7e6f5b82256"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a1be3ebb84b3d334daf98f7e6f5b82256">SVF::ConstraintGraph::directEdgeSet</a></div><div class="ttdeci">ConstraintEdge::ConstraintEdgeSetTy directEdgeSet</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00062">ConsG.h:62</a></div></div>
|
|
194
194
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a9e21bc9b86080b4059f0907e9a7b33f3"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a9e21bc9b86080b4059f0907e9a7b33f3">SVF::ConstraintGraph::removeConstraintNode</a></div><div class="ttdeci">void removeConstraintNode(ConstraintNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00121">ConsG.h:121</a></div></div>
|
|
@@ -1085,7 +1085,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1085
1085
|
<div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00019">MTAResultValidator.h:19</a></div></div>
|
|
1086
1086
|
<div class="ttc" id="classSVF_1_1AndersenBase_html_a6c3d6b4c004d9e43690c3807502eed74"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a6c3d6b4c004d9e43690c3807502eed74">SVF::AndersenBase::redundantGepNodes</a></div><div class="ttdeci">NodeBS redundantGepNodes</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00114">Andersen.h:114</a></div></div>
|
|
1087
1087
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a4909696c946cf6aba12542ec51766b64"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a4909696c946cf6aba12542ec51766b64">SVF::BVDataPTAImpl::clearPts</a></div><div class="ttdeci">virtual void clearPts(NodeID id, NodeID element)</div><div class="ttdoc">Remove element from the points-to set of id. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00110">PointerAnalysisImpl.h:110</a></div></div>
|
|
1088
|
-
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a84468bc9355d31e8c3e18369036ddf5c"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c">SVF::ConstraintGraph::isPWCNode</a></div><div class="ttdeci">bool isPWCNode(NodeID nodeId)</div><div class="ttdoc">Check/Set PWC (positive weight cycle) flag. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#
|
|
1088
|
+
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a84468bc9355d31e8c3e18369036ddf5c"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c">SVF::ConstraintGraph::isPWCNode</a></div><div class="ttdeci">bool isPWCNode(NodeID nodeId)</div><div class="ttdoc">Check/Set PWC (positive weight cycle) flag. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00348">ConsG.h:348</a></div></div>
|
|
1089
1089
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_af68485a2208553579f9c2e4b2cb20cff"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">SVF::BVDataPTAImpl::addPts</a></div><div class="ttdeci">virtual bool addPts(NodeID id, NodeID ptd)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00132">PointerAnalysisImpl.h:132</a></div></div>
|
|
1090
1090
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ac5683fe2e24b393ccc5cb6d8bc92cf2b"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ac5683fe2e24b393ccc5cb6d8bc92cf2b">SVF::PointerAnalysis::setObjFieldInsensitive</a></div><div class="ttdeci">void setObjFieldInsensitive(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00349">PointerAnalysis.h:349</a></div></div>
|
|
1091
1091
|
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a1b5abe09fd0fcd337385653cb47343c1"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">SVF::SparseBitVector::end</a></div><div class="ttdeci">iterator end() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l01118">SparseBitVector.h:1118</a></div></div>
|
|
@@ -1137,9 +1137,9 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1137
1137
|
<div class="fragment"><div class="line"><a name="l00464"></a><span class="lineno"> 464</span> {</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="keywordflow">while</span> (<a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-><a class="code" href="classSVF_1_1ConstraintGraph.html#aa867ffe0f3639a0ef5b5c36696e733be">hasNodesToBeCollapsed</a>())</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>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-><a class="code" href="classSVF_1_1ConstraintGraph.html#a006667ed55132ca0909c0e9118fea704">getNextCollapseNode</a>();</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="comment">// collapseField() may change the points-to set of the nodes which have been processed</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="comment">// before, in this case, we may need to re-do the analysis.</span></div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#af4a0d960ef198047517bb32ee1e24a61">collapseField</a>(node))</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <a class="code" href="classSVF_1_1WPASolver.html#ac460772d9236a2fefe17b2557023b883">reanalyze</a> = <span class="keyword">true</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> }</div><div class="ttc" id="classSVF_1_1WPASolver_html_ac460772d9236a2fefe17b2557023b883"><div class="ttname"><a href="classSVF_1_1WPASolver.html#ac460772d9236a2fefe17b2557023b883">SVF::WPASolver::reanalyze</a></div><div class="ttdeci">bool reanalyze</div><div class="ttdoc">Reanalyze if any constraint value changed. </div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00175">WPASolver.h:175</a></div></div>
|
|
1138
1138
|
<div class="ttc" id="classSVF_1_1Andersen_html_af4a0d960ef198047517bb32ee1e24a61"><div class="ttname"><a href="classSVF_1_1Andersen.html#af4a0d960ef198047517bb32ee1e24a61">SVF::Andersen::collapseField</a></div><div class="ttdeci">bool collapseField(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00541">Andersen.cpp:541</a></div></div>
|
|
1139
1139
|
<div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00019">MTAResultValidator.h:19</a></div></div>
|
|
1140
|
-
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_aa867ffe0f3639a0ef5b5c36696e733be"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#aa867ffe0f3639a0ef5b5c36696e733be">SVF::ConstraintGraph::hasNodesToBeCollapsed</a></div><div class="ttdeci">bool hasNodesToBeCollapsed() const</div><div class="ttdoc">Add/get nodes to be collapsed. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#
|
|
1140
|
+
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_aa867ffe0f3639a0ef5b5c36696e733be"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#aa867ffe0f3639a0ef5b5c36696e733be">SVF::ConstraintGraph::hasNodesToBeCollapsed</a></div><div class="ttdeci">bool hasNodesToBeCollapsed() const</div><div class="ttdoc">Add/get nodes to be collapsed. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00360">ConsG.h:360</a></div></div>
|
|
1141
1141
|
<div class="ttc" id="classSVF_1_1AndersenBase_html_ae21e38a06a4397d11cdd17b0f8f282fd"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">SVF::AndersenBase::consCG</a></div><div class="ttdeci">ConstraintGraph * consCG</div><div class="ttdoc">Constraint Graph. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00139">Andersen.h:139</a></div></div>
|
|
1142
|
-
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a006667ed55132ca0909c0e9118fea704"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a006667ed55132ca0909c0e9118fea704">SVF::ConstraintGraph::getNextCollapseNode</a></div><div class="ttdeci">NodeID getNextCollapseNode()</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#
|
|
1142
|
+
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a006667ed55132ca0909c0e9118fea704"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a006667ed55132ca0909c0e9118fea704">SVF::ConstraintGraph::getNextCollapseNode</a></div><div class="ttdeci">NodeID getNextCollapseNode()</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00368">ConsG.h:368</a></div></div>
|
|
1143
1143
|
</div><!-- fragment -->
|
|
1144
1144
|
</div>
|
|
1145
1145
|
</div>
|
|
@@ -1209,7 +1209,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1209
1209
|
|
|
1210
1210
|
<p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00454">454</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
|
|
1211
1211
|
<div class="fragment"><div class="line"><a name="l00455"></a><span class="lineno"> 455</span> {</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="comment">// If a node is a PWC node, collapse all its points-to tarsget.</span></div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="comment">// collapseNodePts() may change the points-to set of the nodes which have been processed</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="comment">// before, in this case, we may need to re-do the analysis.</span></div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-><a class="code" href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c">isPWCNode</a>(nodeId) && <a class="code" href="classSVF_1_1Andersen.html#a3f0048155f0b3a6899dac6f30553aa9e">collapseNodePts</a>(nodeId))</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <a class="code" href="classSVF_1_1WPASolver.html#ac460772d9236a2fefe17b2557023b883">reanalyze</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> }</div><div class="ttc" id="classSVF_1_1WPASolver_html_ac460772d9236a2fefe17b2557023b883"><div class="ttname"><a href="classSVF_1_1WPASolver.html#ac460772d9236a2fefe17b2557023b883">SVF::WPASolver::reanalyze</a></div><div class="ttdeci">bool reanalyze</div><div class="ttdoc">Reanalyze if any constraint value changed. </div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00175">WPASolver.h:175</a></div></div>
|
|
1212
|
-
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a84468bc9355d31e8c3e18369036ddf5c"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c">SVF::ConstraintGraph::isPWCNode</a></div><div class="ttdeci">bool isPWCNode(NodeID nodeId)</div><div class="ttdoc">Check/Set PWC (positive weight cycle) flag. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#
|
|
1212
|
+
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a84468bc9355d31e8c3e18369036ddf5c"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c">SVF::ConstraintGraph::isPWCNode</a></div><div class="ttdeci">bool isPWCNode(NodeID nodeId)</div><div class="ttdoc">Check/Set PWC (positive weight cycle) flag. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00348">ConsG.h:348</a></div></div>
|
|
1213
1213
|
<div class="ttc" id="classSVF_1_1Andersen_html_a3f0048155f0b3a6899dac6f30553aa9e"><div class="ttname"><a href="classSVF_1_1Andersen.html#a3f0048155f0b3a6899dac6f30553aa9e">SVF::Andersen::collapseNodePts</a></div><div class="ttdeci">bool collapseNodePts(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00521">Andersen.cpp:521</a></div></div>
|
|
1214
1214
|
<div class="ttc" id="classSVF_1_1AndersenBase_html_ae21e38a06a4397d11cdd17b0f8f282fd"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">SVF::AndersenBase::consCG</a></div><div class="ttdeci">ConstraintGraph * consCG</div><div class="ttdoc">Constraint Graph. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00139">Andersen.h:139</a></div></div>
|
|
1215
1215
|
</div><!-- fragment -->
|
|
@@ -1735,7 +1735,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1735
1735
|
<p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00809">809</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
|
|
1736
1736
|
<div class="fragment"><div class="line"><a name="l00810"></a><span class="lineno"> 810</span> {</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span> </div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#ae6b1e54a389abc68994219e39539127e">mergeSrcToTgt</a>(nodeId,newRepId))</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-><a class="code" href="classSVF_1_1ConstraintGraph.html#a03f9fe8ae7094c39937f47f422276724">setPWCNode</a>(newRepId);</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span> }</div><div class="ttc" id="classSVF_1_1Andersen_html_ae6b1e54a389abc68994219e39539127e"><div class="ttname"><a href="classSVF_1_1Andersen.html#ae6b1e54a389abc68994219e39539127e">SVF::Andersen::mergeSrcToTgt</a></div><div class="ttdeci">virtual bool mergeSrcToTgt(NodeID srcId, NodeID tgtId)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00778">Andersen.cpp:778</a></div></div>
|
|
1737
1737
|
<div class="ttc" id="classSVF_1_1AndersenBase_html_ae21e38a06a4397d11cdd17b0f8f282fd"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">SVF::AndersenBase::consCG</a></div><div class="ttdeci">ConstraintGraph * consCG</div><div class="ttdoc">Constraint Graph. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00139">Andersen.h:139</a></div></div>
|
|
1738
|
-
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a03f9fe8ae7094c39937f47f422276724"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a03f9fe8ae7094c39937f47f422276724">SVF::ConstraintGraph::setPWCNode</a></div><div class="ttdeci">void setPWCNode(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#
|
|
1738
|
+
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a03f9fe8ae7094c39937f47f422276724"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a03f9fe8ae7094c39937f47f422276724">SVF::ConstraintGraph::setPWCNode</a></div><div class="ttdeci">void setPWCNode(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00352">ConsG.h:352</a></div></div>
|
|
1739
1739
|
</div><!-- fragment -->
|
|
1740
1740
|
</div>
|
|
1741
1741
|
</div>
|
|
@@ -2086,7 +2086,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2086
2086
|
<div class="ttc" id="classSVF_1_1GenericEdge_html_ad9edb45e74ae675d9da82f5acf02d56e"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">SVF::GenericEdge::getDstID</a></div><div class="ttdeci">NodeID getDstID() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00077">GenericGraph.h:77</a></div></div>
|
|
2087
2087
|
<div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00019">MTAResultValidator.h:19</a></div></div>
|
|
2088
2088
|
<div class="ttc" id="classSVF_1_1NormalGepCGEdge_html"><div class="ttname"><a href="classSVF_1_1NormalGepCGEdge.html">SVF::NormalGepCGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00265">ConsGEdge.h:265</a></div></div>
|
|
2089
|
-
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a19e69dabc1f5d16129bfedc81e6e7ceb"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a19e69dabc1f5d16129bfedc81e6e7ceb">SVF::ConstraintGraph::addNodeToBeCollapsed</a></div><div class="ttdeci">void addNodeToBeCollapsed(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#
|
|
2089
|
+
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a19e69dabc1f5d16129bfedc81e6e7ceb"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a19e69dabc1f5d16129bfedc81e6e7ceb">SVF::ConstraintGraph::addNodeToBeCollapsed</a></div><div class="ttdeci">void addNodeToBeCollapsed(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00364">ConsG.h:364</a></div></div>
|
|
2090
2090
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ac5683fe2e24b393ccc5cb6d8bc92cf2b"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ac5683fe2e24b393ccc5cb6d8bc92cf2b">SVF::PointerAnalysis::setObjFieldInsensitive</a></div><div class="ttdeci">void setObjFieldInsensitive(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00349">PointerAnalysis.h:349</a></div></div>
|
|
2091
2091
|
<div class="ttc" id="classSVF_1_1PointsTo_html_ab196d86cfb48d1c5d27a0c03c7497afa"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">SVF::PointsTo::set</a></div><div class="ttdeci">void set(u32_t n)</div><div class="ttdoc">Inserts n in the set. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00153">PointsTo.cpp:153</a></div></div>
|
|
2092
2092
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a3f727a2822fb18a14ce9e10c6534cf5a"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a3f727a2822fb18a14ce9e10c6534cf5a">SVF::ConstraintGraph::getGepObjVar</a></div><div class="ttdeci">NodeID getGepObjVar(NodeID id, const LocationSet &ls)</div><div class="ttdoc">Get a field of a memory object. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00328">ConsG.h:328</a></div></div>
|
|
@@ -420,7 +420,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
420
420
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_aed605b010e313f4b11e95b83fe50e3b3"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#aed605b010e313f4b11e95b83fe50e3b3">SVF::ConstraintGraph::sccSubNodes</a></div><div class="ttdeci">NodeBS & sccSubNodes(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00241">ConsG.h:241</a></div></div>
|
|
421
421
|
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a9f96e6a886fa69e07cda5dbfaed8b7c9"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a9f96e6a886fa69e07cda5dbfaed8b7c9">SVF::SparseBitVector::count</a></div><div class="ttdeci">unsigned count() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l01102">SparseBitVector.h:1102</a></div></div>
|
|
422
422
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
|
|
423
|
-
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a84468bc9355d31e8c3e18369036ddf5c"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c">SVF::ConstraintGraph::isPWCNode</a></div><div class="ttdeci">bool isPWCNode(NodeID nodeId)</div><div class="ttdoc">Check/Set PWC (positive weight cycle) flag. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#
|
|
423
|
+
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a84468bc9355d31e8c3e18369036ddf5c"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c">SVF::ConstraintGraph::isPWCNode</a></div><div class="ttdeci">bool isPWCNode(NodeID nodeId)</div><div class="ttdoc">Check/Set PWC (positive weight cycle) flag. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00348">ConsG.h:348</a></div></div>
|
|
424
424
|
<div class="ttc" id="classSVF_1_1GenericGraph_html_a4bef15157423cef48dc7333a803cd27d"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">SVF::GenericGraph::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00369">GenericGraph.h:369</a></div></div>
|
|
425
425
|
<div class="ttc" id="classSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph< ConstraintNode, ConstraintEdge >::iterator</a></div><div class="ttdeci">IDToNodeMapTy::iterator iterator</div><div class="ttdoc">Node Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00342">GenericGraph.h:342</a></div></div>
|
|
426
426
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a240219c2dc4f5cc5f85445e18c79b83b"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">SVF::PointerAnalysis::getPAG</a></div><div class="ttdeci">SVFIR * getPAG() const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00201">PointerAnalysis.h:201</a></div></div>
|
|
@@ -688,8 +688,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
688
688
|
</table>
|
|
689
689
|
</div><div class="memdoc">
|
|
690
690
|
|
|
691
|
-
<p class="definition">Definition at line <a class="el" href="ConsG_8h_source.html#
|
|
692
|
-
<div class="fragment"><div class="line"><a name="
|
|
691
|
+
<p class="definition">Definition at line <a class="el" href="ConsG_8h_source.html#l00364">364</a> of file <a class="el" href="ConsG_8h_source.html">ConsG.h</a>.</p>
|
|
692
|
+
<div class="fragment"><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  {</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <a class="code" href="classSVF_1_1ConstraintGraph.html#af3406f1e191d9d6d9c33d23bdd2d564b">nodesToBeCollapsed</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  }</div><div class="ttc" id="classSVF_1_1FIFOWorkList_html_ad4c6a48b60c870d63049fe7272cc7eb8"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">SVF::FIFOWorkList::push</a></div><div class="ttdeci">bool push(Data data)</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00159">WorkList.h:159</a></div></div>
|
|
693
693
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_af3406f1e191d9d6d9c33d23bdd2d564b"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#af3406f1e191d9d6d9c33d23bdd2d564b">SVF::ConstraintGraph::nodesToBeCollapsed</a></div><div class="ttdeci">WorkList nodesToBeCollapsed</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00058">ConsG.h:58</a></div></div>
|
|
694
694
|
</div><!-- fragment -->
|
|
695
695
|
</div>
|
|
@@ -1211,12 +1211,11 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1211
1211
|
</div><div class="memdoc">
|
|
1212
1212
|
|
|
1213
1213
|
<p>Get a field-insensitive node of a memory object. </p>
|
|
1214
|
-
<p>
|
|
1214
|
+
<p>The fi obj in PAG must be either an existing node or merged to another rep node in ConsG </p>
|
|
1215
1215
|
|
|
1216
1216
|
<p class="definition">Definition at line <a class="el" href="ConsG_8h_source.html#l00337">337</a> of file <a class="el" href="ConsG_8h_source.html">ConsG.h</a>.</p>
|
|
1217
|
-
<div class="fragment"><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fi = <a class="code" href="classSVF_1_1ConstraintGraph.html#aa8b09f64c6e4bbd081c6062a1a0e8948">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a2878e202045b7f2c817185e8bf95d354">getFIObjVar</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> 
|
|
1217
|
+
<div class="fragment"><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fi = <a class="code" href="classSVF_1_1ConstraintGraph.html#aa8b09f64c6e4bbd081c6062a1a0e8948">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a2878e202045b7f2c817185e8bf95d354">getFIObjVar</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  assert((<a class="code" href="classSVF_1_1ConstraintGraph.html#aad6c37476edfd9ae92dc8c0d004d782d">hasConstraintNode</a>(fi) || <a class="code" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">sccRepNode</a>(fi) != fi) && <span class="stringliteral">"non-existing fi obj??"</span>);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keywordflow">return</span> fi;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  }</div><div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00019">MTAResultValidator.h:19</a></div></div>
|
|
1218
1218
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_aad6c37476edfd9ae92dc8c0d004d782d"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#aad6c37476edfd9ae92dc8c0d004d782d">SVF::ConstraintGraph::hasConstraintNode</a></div><div class="ttdeci">bool hasConstraintNode(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00116">ConsG.h:116</a></div></div>
|
|
1219
|
-
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a5ea9c47d232f36b66d985f979f33293b"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a5ea9c47d232f36b66d985f979f33293b">SVF::ConstraintGraph::addConstraintNode</a></div><div class="ttdeci">void addConstraintNode(ConstraintNode *node, NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00112">ConsG.h:112</a></div></div>
|
|
1220
1219
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_a39b973543acdcdc5493832cc9d0f586f"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">SVF::ConstraintGraph::sccRepNode</a></div><div class="ttdeci">NodeID sccRepNode(NodeID id) const</div><div class="ttdoc">SCC rep/sub nodes methods. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00233">ConsG.h:233</a></div></div>
|
|
1221
1220
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a2878e202045b7f2c817185e8bf95d354"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2878e202045b7f2c817185e8bf95d354">SVF::SVFIR::getFIObjVar</a></div><div class="ttdeci">NodeID getFIObjVar(const MemObj *obj) const</div><div class="ttdoc">Get a field-insensitive obj SVFIR node according to a mem obj. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00364">SVFIR.h:364</a></div></div>
|
|
1222
1221
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_aa8b09f64c6e4bbd081c6062a1a0e8948"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#aa8b09f64c6e4bbd081c6062a1a0e8948">SVF::ConstraintGraph::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00055">ConsG.h:55</a></div></div>
|
|
@@ -1354,8 +1353,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1354
1353
|
</table>
|
|
1355
1354
|
</div><div class="memdoc">
|
|
1356
1355
|
|
|
1357
|
-
<p class="definition">Definition at line <a class="el" href="ConsG_8h_source.html#
|
|
1358
|
-
<div class="fragment"><div class="line"><a name="
|
|
1356
|
+
<p class="definition">Definition at line <a class="el" href="ConsG_8h_source.html#l00368">368</a> of file <a class="el" href="ConsG_8h_source.html">ConsG.h</a>.</p>
|
|
1357
|
+
<div class="fragment"><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  {</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#af3406f1e191d9d6d9c33d23bdd2d564b">nodesToBeCollapsed</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  }</div><div class="ttc" id="classSVF_1_1ConstraintGraph_html_af3406f1e191d9d6d9c33d23bdd2d564b"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#af3406f1e191d9d6d9c33d23bdd2d564b">SVF::ConstraintGraph::nodesToBeCollapsed</a></div><div class="ttdeci">WorkList nodesToBeCollapsed</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00058">ConsG.h:58</a></div></div>
|
|
1359
1358
|
<div class="ttc" id="classSVF_1_1FIFOWorkList_html_a8fa72918fce7e9c0b2dc34b683a797c6"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">SVF::FIFOWorkList::pop</a></div><div class="ttdeci">Data pop()</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00174">WorkList.h:174</a></div></div>
|
|
1360
1359
|
</div><!-- fragment -->
|
|
1361
1360
|
</div>
|
|
@@ -1680,8 +1679,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1680
1679
|
|
|
1681
1680
|
<p>Add/get nodes to be collapsed. </p>
|
|
1682
1681
|
|
|
1683
|
-
<p class="definition">Definition at line <a class="el" href="ConsG_8h_source.html#
|
|
1684
|
-
<div class="fragment"><div class="line"><a name="
|
|
1682
|
+
<p class="definition">Definition at line <a class="el" href="ConsG_8h_source.html#l00360">360</a> of file <a class="el" href="ConsG_8h_source.html">ConsG.h</a>.</p>
|
|
1683
|
+
<div class="fragment"><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  {</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keywordflow">return</span> (!<a class="code" href="classSVF_1_1ConstraintGraph.html#af3406f1e191d9d6d9c33d23bdd2d564b">nodesToBeCollapsed</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>());</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  }</div><div class="ttc" id="classSVF_1_1FIFOWorkList_html_a7056704c224dfb4b57287fe90c004aa8"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">SVF::FIFOWorkList::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00146">WorkList.h:146</a></div></div>
|
|
1685
1684
|
<div class="ttc" id="classSVF_1_1ConstraintGraph_html_af3406f1e191d9d6d9c33d23bdd2d564b"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#af3406f1e191d9d6d9c33d23bdd2d564b">SVF::ConstraintGraph::nodesToBeCollapsed</a></div><div class="ttdeci">WorkList nodesToBeCollapsed</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00058">ConsG.h:58</a></div></div>
|
|
1686
1685
|
</div><!-- fragment -->
|
|
1687
1686
|
</div>
|
|
@@ -1742,8 +1741,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1742
1741
|
|
|
1743
1742
|
<p>Check/Set PWC (positive weight cycle) flag. </p>
|
|
1744
1743
|
|
|
1745
|
-
<p class="definition">Definition at line <a class="el" href="ConsG_8h_source.html#
|
|
1746
|
-
<div class="fragment"><div class="line"><a name="
|
|
1744
|
+
<p class="definition">Definition at line <a class="el" href="ConsG_8h_source.html#l00348">348</a> of file <a class="el" href="ConsG_8h_source.html">ConsG.h</a>.</p>
|
|
1745
|
+
<div class="fragment"><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  {</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">getConstraintNode</a>(nodeId)-><a class="code" href="classSVF_1_1ConstraintNode.html#a0ffe4f1ca1a6f70466cc1c6b3b12c90d">isPWCNode</a>();</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  }</div><div class="ttc" id="classSVF_1_1ConstraintGraph_html_a26722666cc8f2fce61bed73f086a0e87"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">SVF::ConstraintGraph::getConstraintNode</a></div><div class="ttdeci">ConstraintNode * getConstraintNode(NodeID id) const</div><div class="ttdoc">Get/add/remove constraint node. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00107">ConsG.h:107</a></div></div>
|
|
1747
1746
|
<div class="ttc" id="classSVF_1_1ConstraintNode_html_a0ffe4f1ca1a6f70466cc1c6b3b12c90d"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a0ffe4f1ca1a6f70466cc1c6b3b12c90d">SVF::ConstraintNode::isPWCNode</a></div><div class="ttdeci">bool isPWCNode() const</div><div class="ttdoc">Whether a node involves in PWC, if so, all its points-to elements should become field-insensitive. </div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00081">ConsGNode.h:81</a></div></div>
|
|
1748
1747
|
</div><!-- fragment -->
|
|
1749
1748
|
</div>
|
|
@@ -2362,8 +2361,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2362
2361
|
</table>
|
|
2363
2362
|
</div><div class="memdoc">
|
|
2364
2363
|
|
|
2365
|
-
<p class="definition">Definition at line <a class="el" href="ConsG_8h_source.html#
|
|
2366
|
-
<div class="fragment"><div class="line"><a name="
|
|
2364
|
+
<p class="definition">Definition at line <a class="el" href="ConsG_8h_source.html#l00352">352</a> of file <a class="el" href="ConsG_8h_source.html">ConsG.h</a>.</p>
|
|
2365
|
+
<div class="fragment"><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  {</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <a class="code" href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">getConstraintNode</a>(nodeId)-><a class="code" href="classSVF_1_1ConstraintNode.html#ad8701df90d93c5dfed26cff8f0b2fbb3">setPWCNode</a>();</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  }</div><div class="ttc" id="classSVF_1_1ConstraintGraph_html_a26722666cc8f2fce61bed73f086a0e87"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">SVF::ConstraintGraph::getConstraintNode</a></div><div class="ttdeci">ConstraintNode * getConstraintNode(NodeID id) const</div><div class="ttdoc">Get/add/remove constraint node. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00107">ConsG.h:107</a></div></div>
|
|
2367
2366
|
<div class="ttc" id="classSVF_1_1ConstraintNode_html_ad8701df90d93c5dfed26cff8f0b2fbb3"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#ad8701df90d93c5dfed26cff8f0b2fbb3">SVF::ConstraintNode::setPWCNode</a></div><div class="ttdeci">void setPWCNode()</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00085">ConsGNode.h:85</a></div></div>
|
|
2368
2367
|
</div><!-- fragment -->
|
|
2369
2368
|
</div>
|
|
@@ -85,7 +85,7 @@ struct llvm::GraphTraits< Inverse< SVF::ConstraintNode * > ></h3>
|
|
|
85
85
|
|
|
86
86
|
<p>Inverse GraphTraits specializations for Value flow node, it is used for inverse traversal. </p>
|
|
87
87
|
|
|
88
|
-
<p class="definition">Definition at line <a class="el" href="ConsG_8h_source.html#
|
|
88
|
+
<p class="definition">Definition at line <a class="el" href="ConsG_8h_source.html#l00397">397</a> of file <a class="el" href="ConsG_8h_source.html">ConsG.h</a>.</p>
|
|
89
89
|
</div><hr/>The documentation for this struct was generated from the following file:<ul>
|
|
90
90
|
<li>/home/runner/work/SVF/SVF/include/Graphs/<a class="el" href="ConsG_8h_source.html">ConsG.h</a></li>
|
|
91
91
|
</ul>
|
package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintGraph_01_5_01_4.html
CHANGED
|
@@ -90,7 +90,7 @@ Public Types</h2></td></tr>
|
|
|
90
90
|
struct llvm::GraphTraits< SVF::ConstraintGraph * ></h3>
|
|
91
91
|
|
|
92
92
|
|
|
93
|
-
<p class="definition">Definition at line <a class="el" href="ConsG_8h_source.html#
|
|
93
|
+
<p class="definition">Definition at line <a class="el" href="ConsG_8h_source.html#l00401">401</a> of file <a class="el" href="ConsG_8h_source.html">ConsG.h</a>.</p>
|
|
94
94
|
</div><h2 class="groupheader">Member Typedef Documentation</h2>
|
|
95
95
|
<a id="a3f34a804842ca97e422cb255ff670b5c"></a>
|
|
96
96
|
<h2 class="memtitle"><span class="permalink"><a href="#a3f34a804842ca97e422cb255ff670b5c">◆ </a></span>NodeRef</h2>
|
|
@@ -104,7 +104,7 @@ struct llvm::GraphTraits< SVF::ConstraintGraph * ></h3>
|
|
|
104
104
|
</table>
|
|
105
105
|
</div><div class="memdoc">
|
|
106
106
|
|
|
107
|
-
<p class="definition">Definition at line <a class="el" href="ConsG_8h_source.html#
|
|
107
|
+
<p class="definition">Definition at line <a class="el" href="ConsG_8h_source.html#l00403">403</a> of file <a class="el" href="ConsG_8h_source.html">ConsG.h</a>.</p>
|
|
108
108
|
|
|
109
109
|
</div>
|
|
110
110
|
</div>
|
package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintNode_01_5_01_4.html
CHANGED
|
@@ -81,7 +81,7 @@ Inheritance diagram for llvm::GraphTraits< SVF::ConstraintNode * >:</div>
|
|
|
81
81
|
struct llvm::GraphTraits< SVF::ConstraintNode * ></h3>
|
|
82
82
|
|
|
83
83
|
|
|
84
|
-
<p class="definition">Definition at line <a class="el" href="ConsG_8h_source.html#
|
|
84
|
+
<p class="definition">Definition at line <a class="el" href="ConsG_8h_source.html#l00391">391</a> of file <a class="el" href="ConsG_8h_source.html">ConsG.h</a>.</p>
|
|
85
85
|
</div><hr/>The documentation for this struct was generated from the following file:<ul>
|
|
86
86
|
<li>/home/runner/work/SVF/SVF/include/Graphs/<a class="el" href="ConsG_8h_source.html">ConsG.h</a></li>
|
|
87
87
|
</ul>
|
package/include/Graphs/ConsG.h
CHANGED
|
@@ -337,9 +337,8 @@ public:
|
|
|
337
337
|
inline NodeID getFIObjVar(NodeID id)
|
|
338
338
|
{
|
|
339
339
|
NodeID fi = pag->getFIObjVar(id);
|
|
340
|
-
///
|
|
341
|
-
|
|
342
|
-
addConstraintNode(new ConstraintNode(fi),fi);
|
|
340
|
+
/// The fi obj in PAG must be either an existing node or merged to another rep node in ConsG
|
|
341
|
+
assert((hasConstraintNode(fi) || sccRepNode(fi) != fi) && "non-existing fi obj??");
|
|
343
342
|
return fi;
|
|
344
343
|
}
|
|
345
344
|
//@}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "svf-tools",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.549",
|
|
4
4
|
"description": "* <b>[TypeClone](https://github.com/SVF-tools/SVF/wiki/TypeClone) published in our [ECOOP paper](https://yuleisui.github.io/publications/ecoop20.pdf) is now available in SVF </b> * <b>SVF now uses a single script for its build. Just type [`source ./build.sh`](https://github.com/SVF-tools/SVF/blob/master/build.sh) in your terminal, that's it!</b> * <b>SVF now supports LLVM-10.0.0! </b> * <b>We thank [bsauce](https://github.com/bsauce) for writing a user manual of SVF ([link1](https://www.jianshu.com/p/068a08ec749c) and [link2](https://www.jianshu.com/p/777c30d4240e)) in Chinese </b> * <b>SVF now supports LLVM-9.0.0 (Thank [Byoungyoung Lee](https://github.com/SVF-tools/SVF/issues/142) for his help!). </b> * <b>SVF now supports a set of [field-sensitive pointer analyses](https://yuleisui.github.io/publications/sas2019a.pdf). </b> * <b>[Use SVF as an external lib](https://github.com/SVF-tools/SVF/wiki/Using-SVF-as-a-lib-in-your-own-tool) for your own project (Contributed by [Hongxu Chen](https://github.com/HongxuChen)). </b> * <b>SVF now supports LLVM-7.0.0. </b> * <b>SVF now supports Docker. [Try SVF in Docker](https://github.com/SVF-tools/SVF/wiki/Try-SVF-in-Docker)! </b> * <b>SVF now supports [LLVM-6.0.0](https://github.com/svf-tools/SVF/pull/38) (Contributed by [Jack Anthony](https://github.com/jackanth)). </b> * <b>SVF now supports [LLVM-4.0.0](https://github.com/svf-tools/SVF/pull/23) (Contributed by Jared Carlson. Thank [Jared](https://github.com/jcarlson23) and [Will](https://github.com/dtzWill) for their in-depth [discussions](https://github.com/svf-tools/SVF/pull/18) about updating SVF!) </b> * <b>SVF now supports analysis for C++ programs.</b> <br />",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|