svf-tools 1.0.292 → 1.0.293
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/ContextDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FileChecker_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +4 -12
- package/SVF-doxygen/html/html/ProgSlice_8h_source.html +33 -35
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +31 -36
- package/SVF-doxygen/html/html/SVFG_8h_source.html +19 -19
- package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +16 -10
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +2 -3
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +2 -3
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +2 -3
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +2 -3
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice-members.html +36 -37
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +121 -153
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +49 -49
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +8 -9
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +2 -2
- package/SVF-doxygen/html/html/functions_f.html +3 -3
- package/SVF-doxygen/html/html/functions_func_g.html +9 -12
- package/SVF-doxygen/html/html/functions_func_p.html +1 -1
- package/SVF-doxygen/html/html/functions_g.html +10 -13
- package/SVF-doxygen/html/html/functions_n.html +3 -3
- package/SVF-doxygen/html/html/functions_o.html +11 -11
- package/SVF-doxygen/html/html/functions_p.html +9 -5
- package/SVF-doxygen/html/html/functions_r.html +3 -5
- package/SVF-doxygen/html/html/functions_s.html +6 -6
- package/SVF-doxygen/html/html/functions_t.html +6 -6
- package/SVF-doxygen/html/html/functions_u.html +3 -3
- package/SVF-doxygen/html/html/functions_v.html +3 -3
- package/SVF-doxygen/html/html/functions_w.html +8 -6
- package/SVF-doxygen/html/html/search/all_10.js +6 -6
- package/SVF-doxygen/html/html/search/all_12.js +1 -1
- package/SVF-doxygen/html/html/search/all_13.js +2 -2
- package/SVF-doxygen/html/html/search/all_14.js +6 -6
- package/SVF-doxygen/html/html/search/all_15.js +1 -1
- package/SVF-doxygen/html/html/search/all_16.js +1 -1
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_6.js +1 -1
- package/SVF-doxygen/html/html/search/all_7.js +1 -2
- package/SVF-doxygen/html/html/search/all_d.js +1 -1
- package/SVF-doxygen/html/html/search/all_e.js +4 -4
- package/SVF-doxygen/html/html/search/all_f.js +1 -1
- package/SVF-doxygen/html/html/search/functions_6.js +1 -2
- package/SVF-doxygen/html/html/search/functions_e.js +1 -1
- package/SVF-doxygen/html/html/search/variables_14.js +3 -3
- package/SVF-doxygen/html/html/search/variables_d.js +1 -1
- package/SVF-doxygen/html/html/search/variables_e.js +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +20 -20
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +18 -18
- package/include/SABER/ProgSlice.h +0 -3
- package/lib/Graphs/SVFG.cpp +0 -20
- package/lib/Graphs/VFG.cpp +18 -0
- package/lib/SABER/ProgSlice.cpp +0 -37
- package/lib/SABER/SaberAnnotator.cpp +1 -1
- package/package.json +1 -1
|
@@ -66,7 +66,7 @@ $(function() {
|
|
|
66
66
|
<div class="title">VFG.cpp</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="VFG_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//===- VFG.cpp -- Sparse value-flow graph-----------------------------------//</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-2018> <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"> * VFG.cpp</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: Sep 11, 2018</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> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <<a class="code" href="SVFGNode_8h.html">Graphs/SVFGNode.h</a>></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="VFG_8h.html">Graphs/VFG.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>"</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "<a class="code" href="LLVMUtil_8h.html">SVF-FE/LLVMUtil.h</a>"</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classSVF_1_1VFGNode.html#a0342b5a6f270f4ff0e8e2a9b0082c6c5"> 40</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1VFGNode.html#a0342b5a6f270f4ff0e8e2a9b0082c6c5">VFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  std::string str;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  rawstr << <span class="stringliteral">"VFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">return</span> rawstr.str();</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"><a class="line" href="classSVF_1_1StmtVFGNode.html#aa5011ff12de490146ab106e90d0b6ad8"> 47</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1StmtVFGNode.html#aa5011ff12de490146ab106e90d0b6ad8">StmtVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  std::string str;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  rawstr << <span class="stringliteral">"StmtVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">return</span> rawstr.str();</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> </div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1LoadVFGNode.html#aad3591f38e30c5168d4accb76ac8dc04"> 55</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1LoadVFGNode.html#aad3591f38e30c5168d4accb76ac8dc04">LoadVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  std::string str;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  rawstr << <span class="stringliteral">"LoadVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> }</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classSVF_1_1StoreVFGNode.html#aba7e8b8329caf412a55f5880f68414fe"> 64</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1StoreVFGNode.html#aba7e8b8329caf412a55f5880f68414fe">StoreVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  std::string str;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  rawstr << <span class="stringliteral">"StoreVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1CopyVFGNode.html#ad86bbc5ec4a9ea226364a84e04724b37"> 72</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1CopyVFGNode.html#ad86bbc5ec4a9ea226364a84e04724b37">CopyVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  std::string str;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  rawstr << <span class="stringliteral">"CopyVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> }</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classSVF_1_1CmpVFGNode.html#aa08c4475c47beb0d026acab859d68117"> 80</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1CmpVFGNode.html#aa08c4475c47beb0d026acab859d68117">CmpVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  std::string str;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  rawstr << <span class="stringliteral">"CmpVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  rawstr << <span class="stringliteral">"PAGEdge: ["</span> << res->getId() << <span class="stringliteral">" = cmp("</span>;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">for</span>(CmpVFGNode::OPVers::const_iterator it = opVerBegin(), eit = opVerEnd();</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  it != eit; it++)</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  rawstr << it->second->getId() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  rawstr << <span class="stringliteral">")]\n"</span>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">if</span>(res->hasValue()){</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  rawstr << <span class="stringliteral">" "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(res->getValue());</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classSVF_1_1BinaryOPVFGNode.html#aa743cf19c5dc91dbb0c7b8981fecc6c4"> 95</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1BinaryOPVFGNode.html#aa743cf19c5dc91dbb0c7b8981fecc6c4">BinaryOPVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  std::string str;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  rawstr << <span class="stringliteral">"BinaryOPVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  rawstr << <span class="stringliteral">"PAGEdge: ["</span> << res->getId() << <span class="stringliteral">" = Binary("</span>;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">for</span>(BinaryOPVFGNode::OPVers::const_iterator it = opVerBegin(), eit = opVerEnd();</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  it != eit; it++)</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  rawstr << it->second->getId() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  rawstr << <span class="stringliteral">")]\t"</span>;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">if</span>(res->hasValue()){</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  rawstr << <span class="stringliteral">" "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(res->getValue());</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="classSVF_1_1UnaryOPVFGNode.html#ab748bb83004550944c6abca7150aec14"> 110</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1UnaryOPVFGNode.html#ab748bb83004550944c6abca7150aec14">UnaryOPVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  std::string str;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  rawstr << <span class="stringliteral">"UnaryOPVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  rawstr << <span class="stringliteral">"PAGEdge: ["</span> << res->getId() << <span class="stringliteral">" = Unary("</span>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">for</span>(UnaryOPVFGNode::OPVers::const_iterator it = opVerBegin(), eit = opVerEnd();</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  it != eit; it++)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  rawstr << it->second->getId() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  rawstr << <span class="stringliteral">")]\t"</span>;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">if</span>(res->hasValue()){</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  rawstr << <span class="stringliteral">" "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(res->getValue());</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> }</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classSVF_1_1GepVFGNode.html#ad27376633c939952878d5d73621ec638"> 125</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1GepVFGNode.html#ad27376633c939952878d5d73621ec638">GepVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  std::string str;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  rawstr << <span class="stringliteral">"GepVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="classSVF_1_1PHIVFGNode.html#a7fb9cbed3718922cd81b18d069c79aea"> 134</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PHIVFGNode.html#a7fb9cbed3718922cd81b18d069c79aea">PHIVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  std::string str;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  rawstr << <span class="stringliteral">"PHIVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  rawstr << <span class="stringliteral">"PAGNode: ["</span> << res->getId() << <span class="stringliteral">" = PHI("</span>;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">for</span>(PHIVFGNode::OPVers::const_iterator it = opVerBegin(), eit = opVerEnd();</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  it != eit; it++)</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  rawstr << it->second->getId() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  rawstr << <span class="stringliteral">")]\t"</span>;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">if</span>(res->hasValue()){</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  rawstr << <span class="stringliteral">" "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(res->getValue());</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">return</span> rawstr.str();</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> </div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="classSVF_1_1IntraPHIVFGNode.html#a145413d87e9174b5eb70b871b9dfa13e"> 150</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1IntraPHIVFGNode.html#a145413d87e9174b5eb70b871b9dfa13e">IntraPHIVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  std::string str;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  rawstr << <span class="stringliteral">"IntraPHIVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  rawstr << <span class="stringliteral">"PAGNode: ["</span> << res->getId() << <span class="stringliteral">" = PHI("</span>;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">for</span>(PHIVFGNode::OPVers::const_iterator it = opVerBegin(), eit = opVerEnd();</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  it != eit; it++)</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  rawstr << it->second->getId() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  rawstr << <span class="stringliteral">")]\t"</span>;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">if</span>(res->hasValue()){</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  rawstr << <span class="stringliteral">" "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(res->getValue());</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">return</span> rawstr.str();</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> </div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classSVF_1_1AddrVFGNode.html#ac26fbce400355f43fdc22ad88a8d9067"> 166</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1AddrVFGNode.html#ac26fbce400355f43fdc22ad88a8d9067">AddrVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  std::string str;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  rawstr << <span class="stringliteral">"AddrVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</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"><a class="line" href="classSVF_1_1ArgumentVFGNode.html#a3c10cd63e18f79ccc66f4687d05cb8c5"> 175</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1ArgumentVFGNode.html#a3c10cd63e18f79ccc66f4687d05cb8c5">ArgumentVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  std::string str;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  rawstr << <span class="stringliteral">"ArgumentVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  rawstr << param->toString();</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classSVF_1_1ActualParmVFGNode.html#a60d6ce4c4fe2cf54be45e58b2b93c9f6"> 184</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1ActualParmVFGNode.html#a60d6ce4c4fe2cf54be45e58b2b93c9f6">ActualParmVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  std::string str;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  rawstr << <span class="stringliteral">"ActualParmVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  rawstr << <span class="stringliteral">"CS["</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(getCallSite()->getCallSite()) << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  rawstr << param->toString();</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</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> </div><div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="classSVF_1_1FormalParmVFGNode.html#ac4e695d6ee7bb7c5ed4e273567e7c1cc"> 194</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1FormalParmVFGNode.html#ac4e695d6ee7bb7c5ed4e273567e7c1cc">FormalParmVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  std::string str;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  rawstr << <span class="stringliteral">"FormalParmVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  rawstr << <span class="stringliteral">"Fun["</span> << getFun()->getName() << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  rawstr << param->toString();</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div><div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classSVF_1_1ActualRetVFGNode.html#a4d1e7df32604becd2e2b60fe2e5cfbfa"> 203</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1ActualRetVFGNode.html#a4d1e7df32604becd2e2b60fe2e5cfbfa">ActualRetVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  std::string str;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  rawstr << <span class="stringliteral">"ActualRetVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  rawstr << <span class="stringliteral">"CS["</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(getCallSite()->getCallSite()) << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  rawstr << param->toString();</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">return</span> rawstr.str();</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> </div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div><div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="classSVF_1_1FormalRetVFGNode.html#ab1ae2339d7408d9156cdfe5ab4559e66"> 213</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1FormalRetVFGNode.html#ab1ae2339d7408d9156cdfe5ab4559e66">FormalRetVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  std::string str;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  rawstr << <span class="stringliteral">"FormalRetVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  rawstr << <span class="stringliteral">"Fun["</span> << getFun()->getName() << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  rawstr << param->toString();</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> }</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div><div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="classSVF_1_1InterPHIVFGNode.html#aff35aebdc8d955df160e51da7b666a7e"> 223</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1InterPHIVFGNode.html#aff35aebdc8d955df160e51da7b666a7e">InterPHIVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  std::string str;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">if</span>(isFormalParmPHI())</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  rawstr << <span class="stringliteral">"FormalParmPHI ID: "</span> << getId() << <span class="stringliteral">" PAGNode ID: "</span> << res->getId() << <span class="stringliteral">"\n"</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(res->getValue());</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  rawstr << <span class="stringliteral">"ActualRetPHI ID: "</span> << getId() << <span class="stringliteral">" PAGNode ID: "</span> << res->getId() << <span class="stringliteral">"\n"</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(res->getValue());</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</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_1NullPtrVFGNode.html#a75c8b89a34bfd89a4af2c699cdb626b9"> 233</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1NullPtrVFGNode.html#a75c8b89a34bfd89a4af2c699cdb626b9">NullPtrVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  std::string str;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  rawstr << <span class="stringliteral">"NullPtrVFGNode ID: "</span> << getId();</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  rawstr << <span class="stringliteral">" PAGNode ID: "</span> << node->getId() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div><div class="line"><a name="l00242"></a><span class="lineno"><a class="line" href="classSVF_1_1VFGEdge.html#a8f4bec008af7cd1a89870715eaa91a7b"> 242</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1VFGEdge.html#a8f4bec008af7cd1a89870715eaa91a7b">VFGEdge::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  std::string str;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  rawstr << <span class="stringliteral">"VFGEdge: ["</span> << getDstID() << <span class="stringliteral">"<--"</span> << getSrcID() << <span class="stringliteral">"]\t"</span>;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">return</span> rawstr.str();</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> </div><div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="classSVF_1_1DirectSVFGEdge.html#aa8d70214eb0242c3f2baaa506c12852c"> 249</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1DirectSVFGEdge.html#aa8d70214eb0242c3f2baaa506c12852c">DirectSVFGEdge::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  std::string str;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  rawstr << <span class="stringliteral">"DirectVFGEdge: ["</span> << getDstID() << <span class="stringliteral">"<--"</span> << getSrcID() << <span class="stringliteral">"]\t"</span>;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> }</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div><div class="line"><a name="l00256"></a><span class="lineno"><a class="line" href="classSVF_1_1IntraDirSVFGEdge.html#a1c8dc17717409aa42749181aafd155aa"> 256</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1IntraDirSVFGEdge.html#a1c8dc17717409aa42749181aafd155aa">IntraDirSVFGEdge::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  std::string str;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  rawstr << <span class="stringliteral">"IntraDirSVFGEdge: ["</span> << getDstID() << <span class="stringliteral">"<--"</span> << getSrcID() << <span class="stringliteral">"]\t"</span>;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> }</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div><div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="classSVF_1_1CallDirSVFGEdge.html#af07decd05375f56baa4a1c4fe70bc3f1"> 263</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1CallDirSVFGEdge.html#af07decd05375f56baa4a1c4fe70bc3f1">CallDirSVFGEdge::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  std::string str;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  rawstr << <span class="stringliteral">"CallDirSVFGEdge CallSite ID: "</span> << getCallSiteId() << <span class="stringliteral">" ["</span>;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  rawstr << getDstID() << <span class="stringliteral">"<--"</span> << getSrcID() << <span class="stringliteral">"]\t"</span>;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> }</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div><div class="line"><a name="l00271"></a><span class="lineno"><a class="line" href="classSVF_1_1RetDirSVFGEdge.html#a6282c2619d843cf90575886a0ef81edf"> 271</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1RetDirSVFGEdge.html#a6282c2619d843cf90575886a0ef81edf">RetDirSVFGEdge::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  std::string str;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  rawstr << <span class="stringliteral">"RetDirSVFGEdge CallSite ID: "</span> << getCallSiteId() << <span class="stringliteral">" ["</span>;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  rawstr << getDstID() << <span class="stringliteral">"<--"</span> << getSrcID() << <span class="stringliteral">"]\t"</span>;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div><div class="line"><a name="l00281"></a><span class="lineno"><a class="line" href="classSVF_1_1FormalRetVFGNode.html#a732fe0036d307a1dace2631219de38ef"> 281</a></span> <a class="code" href="classSVF_1_1FormalRetVFGNode.html#a0155a71f08dfb1fb43f054084b2380c6">FormalRetVFGNode::FormalRetVFGNode</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_1PAGNode.html">PAGNode</a>* n, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* f) :</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <a class="code" href="classSVF_1_1ArgumentVFGNode.html">ArgumentVFGNode</a>(id, n, FRet), fun(f)</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> {</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span> }</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div><div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="classSVF_1_1PHIVFGNode.html#add1ed5dfc7fbb095e2bdb7ff1e2658ef"> 286</a></span> <a class="code" href="classSVF_1_1PHIVFGNode.html#add1ed5dfc7fbb095e2bdb7ff1e2658ef">PHIVFGNode::PHIVFGNode</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_1PAGNode.html">PAGNode</a>* r,<a class="code" href="classSVF_1_1VFGNode.html#a99a54cf322b0eec3a1ef109ce5f2db75">VFGNodeK</a> k): <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>(id, k), res(r)</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div><div class="line"><a name="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="l00299"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a8ba98bb3d888ec5ff40f511da14b37bc"> 299</a></span> <a class="code" href="classSVF_1_1VFG.html#a8ba98bb3d888ec5ff40f511da14b37bc">VFG::VFG</a>(<a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* cg, <a class="code" href="classSVF_1_1VFG.html#ac2e2f555975063da3fa1932ac35802c6">VFGK</a> k): totalVFGNode(0), callgraph(cg), pag(<a class="code" href="classSVF_1_1PAG.html">PAG</a>::getPAG()), kind(k)</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span> {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"\tCreate VFG Top Level Node\n"</span>));</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <a class="code" href="classSVF_1_1VFG.html#a3544cc0380964f238c964a0e7b417862">addVFGNodes</a>();</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"\tCreate SVFG Direct Edge\n"</span>));</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <a class="code" href="classSVF_1_1VFG.html#adedaba0713164e10ce6273b2947535e0">connectDirectVFGEdges</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> </div><div class="line"><a name="l00312"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#af5005136743913d760d7402bbd308c69"> 312</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#af5005136743913d760d7402bbd308c69">VFG::destroy</a>()</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> {</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a> = <span class="keyword">nullptr</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> </div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div><div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a3544cc0380964f238c964a0e7b417862"> 321</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#a3544cc0380964f238c964a0e7b417862">VFG::addVFGNodes</a>()</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span> {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="comment">// initialize dummy definition null pointers in order to uniform the construction</span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="comment">// to be noted for black hole pointer it has already has address edge connected,</span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="comment">// and its definition will be set when processing addr PAG edge.</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <a class="code" href="classSVF_1_1VFG.html#a59bc855eb8591d88e0898e14d4f4b607">addNullPtrVFGNode</a>(<a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(<a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#a745eddbb75d513d9cbf76709e3d7057e">getNullPtr</a>()));</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="comment">// initialize address nodes</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <a class="code" href="classSVF_1_1PAGEdge.html#a59eb693c90848382efa1cccb56fe82d3">PAGEdge::PAGEdgeSetTy</a>& addrs = <a class="code" href="classSVF_1_1VFG.html#a37239391028cd313eab7110626444682">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6ac29bb583428e3c20d758bb9cf2d2d626">PAGEdge::Addr</a>);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = addrs.begin(), eiter =</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  addrs.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  {</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <a class="code" href="classSVF_1_1VFG.html#a7b0d533f3ccce8fc64deae6077f3d959">addAddrVFGNode</a>(SVFUtil::cast<AddrPE>(*iter));</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  }</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="comment">// initialize copy nodes</span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <a class="code" href="classSVF_1_1PAGEdge.html#a59eb693c90848382efa1cccb56fe82d3">PAGEdge::PAGEdgeSetTy</a>& copys = <a class="code" href="classSVF_1_1VFG.html#a37239391028cd313eab7110626444682">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6af447071283803d3aee763fe20783f4a4">PAGEdge::Copy</a>);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = copys.begin(), eiter =</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  copys.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  {</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyPE.html">CopyPE</a>* edge = SVFUtil::cast<CopyPE>(*iter);</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keywordflow">if</span>(!<a class="code" href="classSVF_1_1VFG.html#a8ddf15d89a1b11a7f7720b671f4f0295">isPhiCopyEdge</a>(edge))</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <a class="code" href="classSVF_1_1VFG.html#afd664fad8aec173f4ed6c4aa588e5c46">addCopyVFGNode</a>(edge);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  }</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="comment">// initialize gep nodes</span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <a class="code" href="classSVF_1_1PAGEdge.html#a59eb693c90848382efa1cccb56fe82d3">PAGEdge::PAGEdgeSetTy</a>& ngeps = <a class="code" href="classSVF_1_1VFG.html#a37239391028cd313eab7110626444682">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a4b8b2eb7125c259d8d550dd83c51147b">PAGEdge::NormalGep</a>);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = ngeps.begin(), eiter =</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  ngeps.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <a class="code" href="classSVF_1_1VFG.html#a51b3b232ddda0656bfe0c7d9527b4a84">addGepVFGNode</a>(SVFUtil::cast<NormalGepPE>(*iter));</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> </div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <a class="code" href="classSVF_1_1PAGEdge.html#a59eb693c90848382efa1cccb56fe82d3">PAGEdge::PAGEdgeSetTy</a>& vgeps = <a class="code" href="classSVF_1_1VFG.html#a37239391028cd313eab7110626444682">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6ad1f40a044008babd44bff30af846550c">PAGEdge::VariantGep</a>);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = vgeps.begin(), eiter =</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  vgeps.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  {</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <a class="code" href="classSVF_1_1VFG.html#a51b3b232ddda0656bfe0c7d9527b4a84">addGepVFGNode</a>(SVFUtil::cast<VariantGepPE>(*iter));</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="comment">// initialize load nodes</span></div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <a class="code" href="classSVF_1_1PAGEdge.html#a59eb693c90848382efa1cccb56fe82d3">PAGEdge::PAGEdgeSetTy</a>& loads = <a class="code" href="classSVF_1_1VFG.html#a37239391028cd313eab7110626444682">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a8fcebc849a231c3c87dddbf0ab5a2167">PAGEdge::Load</a>);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = loads.begin(), eiter =</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  loads.end(); iter != eiter; ++iter)</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>  <a class="code" href="classSVF_1_1VFG.html#adbd7966d18ab50da5a485ba6e043ba61">addLoadVFGNode</a>(SVFUtil::cast<LoadPE>(*iter));</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  }</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="comment">// initialize store nodes</span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <a class="code" href="classSVF_1_1PAGEdge.html#a59eb693c90848382efa1cccb56fe82d3">PAGEdge::PAGEdgeSetTy</a>& stores = <a class="code" href="classSVF_1_1VFG.html#a37239391028cd313eab7110626444682">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6aca20a2c4d9809736d43b18f3cb53e8cf">PAGEdge::Store</a>);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = stores.begin(), eiter =</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  stores.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  {</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <a class="code" href="classSVF_1_1VFG.html#aa21ad616306c111b77fb3ec8f16b19be">addStoreVFGNode</a>(SVFUtil::cast<StorePE>(*iter));</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> </div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <a class="code" href="classSVF_1_1PAGEdge.html#a59eb693c90848382efa1cccb56fe82d3">PAGEdge::PAGEdgeSetTy</a>& forks = <a class="code" href="classSVF_1_1VFG.html#a37239391028cd313eab7110626444682">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a1070b34fd19259725d752aa3b5adc73b">PAGEdge::ThreadFork</a>);</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = forks.begin(), eiter =</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  forks.end(); iter != eiter; ++iter)</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>  <a class="code" href="classSVF_1_1TDForkPE.html">TDForkPE</a>* forkedge = SVFUtil::cast<TDForkPE>(*iter);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <a class="code" href="classSVF_1_1VFG.html#a0fabca3c0f9bebe23f66a914dbb99e39">addActualParmVFGNode</a>(forkedge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>(),forkedge-><a class="code" href="classSVF_1_1CallPE.html#a6a7a917cd6f1235b9453c9672f38c0ef">getCallSite</a>());</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> </div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="comment">// initialize actual parameter nodes</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <span class="keywordflow">for</span>(PAG::CSToArgsListMap::iterator it = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#ae0151d49c9199a2899d8b872dc1ebcfc">getCallSiteArgsMap</a>().begin(), eit = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#ae0151d49c9199a2899d8b872dc1ebcfc">getCallSiteArgsMap</a>().end(); it !=eit; ++it)</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  {</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keywordflow">for</span>(PAG::PAGNodeList::iterator pit = it->second.begin(), epit = it->second.end(); pit!=epit; ++pit)</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  {</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* pagNode = *pit;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(pagNode))</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <a class="code" href="classSVF_1_1VFG.html#a0fabca3c0f9bebe23f66a914dbb99e39">addActualParmVFGNode</a>(pagNode,it->first);</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  }</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  }</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> </div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="comment">// initialize actual return nodes (callsite return)</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keywordflow">for</span>(PAG::CSToRetMap::iterator it = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#af46a20842683fbbc52ac554c0777fbdc">getCallSiteRets</a>().begin(), eit = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#af46a20842683fbbc52ac554c0777fbdc">getCallSiteRets</a>().end(); it !=eit; ++it)</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="l00405"></a><span class="lineno"> 405</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(it->second) == <span class="keyword">false</span> || <a class="code" href="classSVF_1_1VFG.html#ab5b63b4f6317bfb5875f2b977bcf26a4">hasDef</a>(it->second))</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">continue</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>  <a class="code" href="classSVF_1_1VFG.html#a71022c8953e89e21b017936286f12251">addActualRetVFGNode</a>(it->second,it->first->getCallBlockNode());</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  }</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> </div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="comment">// initialize formal parameter nodes</span></div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <span class="keywordflow">for</span>(PAG::FunToArgsListMap::iterator it = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#ab6779cc646bc50965722984f1a708811">getFunArgsMap</a>().begin(), eit = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#ab6779cc646bc50965722984f1a708811">getFunArgsMap</a>().end(); it !=eit; ++it)</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  {</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = it->first;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> </div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keywordflow">for</span>(PAG::PAGNodeList::iterator pit = it->second.begin(), epit = it->second.end(); pit!=epit; ++pit)</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  {</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* param = *pit;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(param) == <span class="keyword">false</span> || <a class="code" href="classSVF_1_1VFG.html#a88f6468b9b43bbb06ef757d884580a50">hasBlackHoleConstObjAddrAsDef</a>(param))</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <a class="code" href="classSVF_1_1VFG.html#ade3f735b3c7b1a53cab3d67cd9f7b874">CallPESet</a> callPEs;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="keywordflow">if</span> (param-><a class="code" href="classSVF_1_1PAGNode.html#a9e6775e06806c54ee016e28c1324604a">hasIncomingEdges</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a5f4c2c1ec167425622d40133ec15448d">PAGEdge::Call</a>))</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  {</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::const_iterator cit = param-><a class="code" href="classSVF_1_1PAGNode.html#a945d9b4c57dfab9baa33e6dbc333ceee">getIncomingEdgesBegin</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a5f4c2c1ec167425622d40133ec15448d">PAGEdge::Call</a>), ecit =</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  param-><a class="code" href="classSVF_1_1PAGNode.html#ac8d69ac849b697663b19db76b92053bc">getIncomingEdgesEnd</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a5f4c2c1ec167425622d40133ec15448d">PAGEdge::Call</a>); cit != ecit; ++cit)</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* callPE = SVFUtil::cast<CallPE>(*cit);</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(callPE-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()))</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  callPEs.insert(callPE);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  }</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  }</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <a class="code" href="classSVF_1_1VFG.html#afdb1560eecf692fb646d412dc760088d">addFormalParmVFGNode</a>(param,func,callPEs);</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span> </div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordflow">if</span> (func-><a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->getFunctionType()->isVarArg())</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* varParam = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(<a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#aa7b2e9e0b3386e27af8413be4c36f519">getVarargNode</a>(func));</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(varParam) == <span class="keyword">false</span> || <a class="code" href="classSVF_1_1VFG.html#a88f6468b9b43bbb06ef757d884580a50">hasBlackHoleConstObjAddrAsDef</a>(varParam))</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span> </div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <a class="code" href="classSVF_1_1VFG.html#ade3f735b3c7b1a53cab3d67cd9f7b874">CallPESet</a> callPEs;</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="keywordflow">if</span> (varParam-><a class="code" href="classSVF_1_1PAGNode.html#a9e6775e06806c54ee016e28c1324604a">hasIncomingEdges</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a5f4c2c1ec167425622d40133ec15448d">PAGEdge::Call</a>))</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  {</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keywordflow">for</span>(PAGEdge::PAGEdgeSetTy::const_iterator cit = varParam-><a class="code" href="classSVF_1_1PAGNode.html#a945d9b4c57dfab9baa33e6dbc333ceee">getIncomingEdgesBegin</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a5f4c2c1ec167425622d40133ec15448d">PAGEdge::Call</a>),</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  ecit = varParam-><a class="code" href="classSVF_1_1PAGNode.html#ac8d69ac849b697663b19db76b92053bc">getIncomingEdgesEnd</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a5f4c2c1ec167425622d40133ec15448d">PAGEdge::Call</a>); cit!=ecit; ++cit)</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  {</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* callPE = SVFUtil::cast<CallPE>(*cit);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(callPE-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()))</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  callPEs.insert(callPE);</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  }</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  }</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <a class="code" href="classSVF_1_1VFG.html#afdb1560eecf692fb646d412dc760088d">addFormalParmVFGNode</a>(varParam,func,callPEs);</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  }</div><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> </div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="comment">// initialize formal return nodes (callee return)</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="keywordflow">for</span> (PAG::FunToRetMap::iterator it = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#ac0835eaa3f23a53eb56a122bebe2ac6c">getFunRets</a>().begin(), eit = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#ac0835eaa3f23a53eb56a122bebe2ac6c">getFunRets</a>().end(); it != eit; ++it)</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  {</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = it->first;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> </div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* uniqueFunRetNode = it->second;</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span> </div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <a class="code" href="classSVF_1_1VFG.html#abf966182c28f0521dcd161aa299e453d">RetPESet</a> retPEs;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="keywordflow">if</span> (uniqueFunRetNode-><a class="code" href="classSVF_1_1PAGNode.html#aa311aaac0f8fbb8650fac9d7662ec795">hasOutgoingEdges</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a99fe431c7a635d39b5558d1048a94c05">PAGEdge::Ret</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>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::const_iterator cit = uniqueFunRetNode-><a class="code" href="classSVF_1_1PAGNode.html#a3db180378695da64a50a83bd8d8a7e47">getOutgoingEdgesBegin</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a99fe431c7a635d39b5558d1048a94c05">PAGEdge::Ret</a>),</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  ecit = uniqueFunRetNode-><a class="code" href="classSVF_1_1PAGNode.html#ad57a4d81a77520c773bee35d294a7ed3">getOutgoingEdgesEnd</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a99fe431c7a635d39b5558d1048a94c05">PAGEdge::Ret</a>);</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  cit != ecit; ++cit)</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  {</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>* retPE = SVFUtil::cast<RetPE>(*cit);</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(retPE-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()))</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  retPEs.insert(retPE);</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  }</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  }</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span> </div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(uniqueFunRetNode))</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <a class="code" href="classSVF_1_1VFG.html#aae3bddc73e39d96fcc97d56ea3dec373">addFormalRetVFGNode</a>(uniqueFunRetNode, func, retPEs);</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  }</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span> </div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="comment">// initialize llvm phi nodes (phi of top level pointers)</span></div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <a class="code" href="classSVF_1_1PAG.html#aaf91fa0a5807355e276eeaeee0638aea">PAG::PHINodeMap</a>& phiNodeMap = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#ad81e9de87891387c6fc860d964316d4f">getPhiNodeMap</a>();</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordflow">for</span> (PAG::PHINodeMap::iterator pit = phiNodeMap.begin(), epit = phiNodeMap.end(); pit != epit; ++pit)</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  {</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(pit->first))</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <a class="code" href="classSVF_1_1VFG.html#a85dc35e83a5699382ead67728e94273c">addIntraPHIVFGNode</a>(pit->first, pit->second);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  }</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="comment">// initialize llvm binary nodes (binary operators)</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <a class="code" href="classSVF_1_1PAG.html#aa9479778e9fe166b17bb765a7a1668a2">PAG::BinaryNodeMap</a>& binaryNodeMap = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#a6931eafe066036139d2538340ef9b95b">getBinaryNodeMap</a>();</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keywordflow">for</span> (PAG::BinaryNodeMap::iterator pit = binaryNodeMap.begin(), epit = binaryNodeMap.end(); pit != epit; ++pit)</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  {</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(pit->first))</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <a class="code" href="classSVF_1_1VFG.html#a9f0a280c43a82cb7e01ee8e887a84ad1">addBinaryOPVFGNode</a>(pit->first, pit->second);</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  }</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="comment">// initialize llvm unary nodes (unary operators)</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <a class="code" href="classSVF_1_1PAG.html#a471804c7fbdfacd90915c3a9cec7fccd">PAG::UnaryNodeMap</a>& unaryNodeMap = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#a71a4647b6ac6a67d69ba580b3f5cac6a">getUnaryNodeMap</a>();</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="keywordflow">for</span> (PAG::UnaryNodeMap::iterator pit = unaryNodeMap.begin(), epit = unaryNodeMap.end(); pit != epit; ++pit)</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  {</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(pit->first))</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <a class="code" href="classSVF_1_1VFG.html#aaeefa7a696350f6573510b670babbe4e">addUnaryOPVFGNode</a>(pit->first, pit->second);</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  }</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="comment">// initialize llvm cmp nodes (comparision)</span></div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <a class="code" href="classSVF_1_1PAG.html#a373335a3c28622cfc0aeb1ef7ae8ccf7">PAG::CmpNodeMap</a>& cmpNodeMap = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#a667b240e083d720b486a47308e36ae55">getCmpNodeMap</a>();</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keywordflow">for</span> (PAG::CmpNodeMap::iterator pit = cmpNodeMap.begin(), epit =cmpNodeMap.end(); pit != epit; ++pit)</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(pit->first))</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <a class="code" href="classSVF_1_1VFG.html#a424126e80453d641a7d51aa481a4c843">addCmpVFGNode</a>(pit->first, pit->second);</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  }</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span> }</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div><div class="line"><a name="l00514"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2"> 514</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">VFG::addIntraDirectVFEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId)</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span> {</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* srcNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(srcId);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dstNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(dstId);</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <a class="code" href="classSVF_1_1VFG.html#a43b0c126c2e32cb3d286a78b14e09a96">checkIntraEdgeParents</a>(srcNode, dstNode);</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = <a class="code" href="classSVF_1_1VFG.html#ac34c4529229404617c346f81cc6c141f">hasIntraVFGEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a08201e6cbff4817e44568747a966b71d">VFGEdge::IntraDirectVF</a>))</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  {</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge->isDirectVFGEdge() && <span class="stringliteral">"this should be a direct value flow edge!"</span>);</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  }</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  {</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="keywordflow">if</span>(srcNode!=dstNode){</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <a class="code" href="classSVF_1_1IntraDirSVFGEdge.html">IntraDirSVFGEdge</a>* directEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1IntraDirSVFGEdge.html">IntraDirSVFGEdge</a>(srcNode,dstNode);</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1VFG.html#a84cf5facb15e1d598c2527fba0c7634d">addVFGEdge</a>(directEdge) ? directEdge : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  }</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  }</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span> }</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span> </div><div class="line"><a name="l00538"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#aa01f63b17acdd52122a7f1ade329ccea"> 538</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#aa01f63b17acdd52122a7f1ade329ccea">VFG::addCallEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId, <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> csId)</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span> {</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* srcNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(srcId);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dstNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(dstId);</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = <a class="code" href="classSVF_1_1VFG.html#ad86631f70bd702b5635bdbeab7d884b9">hasInterVFGEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a8383c27feab3f1acc67cacef9744c04a">VFGEdge::CallDirVF</a>,csId))</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  {</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge->isCallDirectVFGEdge() && <span class="stringliteral">"this should be a direct value flow edge!"</span>);</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  }</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  {</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <a class="code" href="classSVF_1_1CallDirSVFGEdge.html">CallDirSVFGEdge</a>* callEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CallDirSVFGEdge.html">CallDirSVFGEdge</a>(srcNode,dstNode,csId);</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1VFG.html#a84cf5facb15e1d598c2527fba0c7634d">addVFGEdge</a>(callEdge) ? callEdge : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  }</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span> }</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span> </div><div class="line"><a name="l00557"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a27ac8d60de7be75e831b4a28f8f8f1d2"> 557</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#a27ac8d60de7be75e831b4a28f8f8f1d2">VFG::addRetEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId, <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> csId)</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span> {</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* srcNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(srcId);</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dstNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(dstId);</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = <a class="code" href="classSVF_1_1VFG.html#ad86631f70bd702b5635bdbeab7d884b9">hasInterVFGEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a8288c583cfcbfdf9aa2ac2103c0e7191">VFGEdge::RetDirVF</a>,csId))</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  {</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge->isRetDirectVFGEdge() && <span class="stringliteral">"this should be a direct value flow edge!"</span>);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  }</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  {</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <a class="code" href="classSVF_1_1RetDirSVFGEdge.html">RetDirSVFGEdge</a>* retEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1RetDirSVFGEdge.html">RetDirSVFGEdge</a>(srcNode,dstNode,csId);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1VFG.html#a84cf5facb15e1d598c2527fba0c7634d">addVFGEdge</a>(retEdge) ? retEdge : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  }</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span> }</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span> </div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span> </div><div class="line"><a name="l00577"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#adedaba0713164e10ce6273b2947535e0"> 577</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#adedaba0713164e10ce6273b2947535e0">VFG::connectDirectVFGEdges</a>()</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span> {</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span> </div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">iterator</a> it = <a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = <a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it!=eit; ++it)</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  {</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = it->first;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* node = it->second;</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span> </div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtVFGNode</a>* stmtNode = SVFUtil::dyn_cast<StmtVFGNode>(node))</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  {</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="keywordflow">if</span>(SVFUtil::isa<AddrVFGNode>(stmtNode))</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="keywordflow">if</span> (stmtNode->getPAGSrcNode()->isConstantData() == <span class="keyword">false</span>)</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(stmtNode->getPAGSrcNode()), nodeId);</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span> </div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keywordflow">if</span>(SVFUtil::isa<StoreVFGNode>(stmtNode) && (stmtNode->getPAGDstNode()->isConstantData() == <span class="keyword">false</span>))</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  {</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(stmtNode->getPAGDstNode()), nodeId);</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  }</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span> </div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  }</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PHIVFGNode.html">PHIVFGNode</a>* phiNode = SVFUtil::dyn_cast<PHIVFGNode>(node))</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  {</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <span class="keywordflow">for</span> (PHIVFGNode::OPVers::const_iterator it = phiNode->opVerBegin(), eit = phiNode->opVerEnd(); it != eit; it++)</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  {</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  <span class="keywordflow">if</span> (it->second->isConstantData() == <span class="keyword">false</span>)</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(it->second), nodeId);</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  }</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  }</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1BinaryOPVFGNode.html">BinaryOPVFGNode</a>* binaryNode = SVFUtil::dyn_cast<BinaryOPVFGNode>(node))</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  {</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <span class="keywordflow">for</span> (BinaryOPVFGNode::OPVers::const_iterator it = binaryNode->opVerBegin(), eit = binaryNode->opVerEnd(); it != eit; it++)</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  {</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keywordflow">if</span> (it->second->isConstantData() == <span class="keyword">false</span>)</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(it->second), nodeId);</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  }</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  }</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1UnaryOPVFGNode.html">UnaryOPVFGNode</a>* unaryNode = SVFUtil::dyn_cast<UnaryOPVFGNode>(node))</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  {</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  <span class="keywordflow">for</span> (UnaryOPVFGNode::OPVers::const_iterator it = unaryNode->opVerBegin(), eit = unaryNode->opVerEnd(); it != eit; it++)</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  {</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keywordflow">if</span> (it->second->isConstantData() == <span class="keyword">false</span>)</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(it->second), nodeId);</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  }</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  }</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1CmpVFGNode.html">CmpVFGNode</a>* cmpNode = SVFUtil::dyn_cast<CmpVFGNode>(node))</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  {</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  <span class="keywordflow">for</span> (CmpVFGNode::OPVers::const_iterator it = cmpNode->opVerBegin(), eit = cmpNode->opVerEnd(); it != eit; it++)</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  {</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <span class="keywordflow">if</span> (it->second->isConstantData() == <span class="keyword">false</span>)</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(it->second), nodeId);</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  }</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  }</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* actualParm = SVFUtil::dyn_cast<ActualParmVFGNode>(node))</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  {</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="keywordflow">if</span> (actualParm->getParam()->isConstantData() == <span class="keyword">false</span>)</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(actualParm->getParam()), nodeId);</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  }</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>* formalParm = SVFUtil::dyn_cast<FormalParmVFGNode>(node))</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  {</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">for</span>(CallPESet::const_iterator it = formalParm->callPEBegin(), eit = formalParm->callPEEnd();</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  it!=eit; ++it)</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  {</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = (*it)-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>();</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* acutalParm = <a class="code" href="classSVF_1_1VFG.html#a01b8694a5ab7acf8df0213225550791b">getActualParmVFGNode</a>((*it)->getSrcNode(),cs);</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <a class="code" href="classSVF_1_1VFG.html#a6fd24c001a6daedf591974ba27140461">addInterEdgeFromAPToFP</a>(acutalParm,formalParm,<a class="code" href="classSVF_1_1VFG.html#a9bc8e7ee74b652ed7708e95c16a63728">getCallSiteID</a>(cs, formalParm-><a class="code" href="classSVF_1_1ICFGNode.html#ae526280cca2d6cbb2868c80461bc16da">getFun</a>()));</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  }</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  }</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetVFGNode</a>* calleeRet = SVFUtil::dyn_cast<FormalRetVFGNode>(node))</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  {</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(calleeRet->getRet()), nodeId);</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span> </div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keywordflow">for</span>(RetPESet::const_iterator it = calleeRet->retPEBegin(), eit = calleeRet->retPEEnd(); it!=eit; ++it)</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  {</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetVFGNode</a>* callsiteRev = <a class="code" href="classSVF_1_1VFG.html#a0b072e8e45899b89da0a466140563c38">getActualRetVFGNode</a>((*it)->getDstNode());</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* retBlockNode = (*it)-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>();</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* callBlockNode = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#ad274c5c15ac51cea5d09ad08febe8c14">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(retBlockNode->getCallSite());</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  <a class="code" href="classSVF_1_1VFG.html#abd05b599b383c759455aff99963b7b41">addInterEdgeFromFRToAR</a>(calleeRet,callsiteRev, <a class="code" href="classSVF_1_1VFG.html#a9bc8e7ee74b652ed7708e95c16a63728">getCallSiteID</a>(callBlockNode, calleeRet-><a class="code" href="classSVF_1_1ICFGNode.html#ae526280cca2d6cbb2868c80461bc16da">getFun</a>()));</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  }</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  }</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  }</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span> </div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a153d42a480ef1763ad59fd7258ac3ac5">Options::EnableThreadCallGraph</a>){</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <a class="code" href="classSVF_1_1PAGEdge.html#a59eb693c90848382efa1cccb56fe82d3">PAGEdge::PAGEdgeSetTy</a>& forks = <a class="code" href="classSVF_1_1VFG.html#a37239391028cd313eab7110626444682">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a1070b34fd19259725d752aa3b5adc73b">PAGEdge::ThreadFork</a>);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = forks.begin(), eiter =</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  forks.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  {</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <a class="code" href="classSVF_1_1TDForkPE.html">TDForkPE</a>* forkedge = SVFUtil::cast<TDForkPE>(*iter);</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* acutalParm = <a class="code" href="classSVF_1_1VFG.html#a01b8694a5ab7acf8df0213225550791b">getActualParmVFGNode</a>(forkedge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>(),forkedge-><a class="code" href="classSVF_1_1CallPE.html#a6a7a917cd6f1235b9453c9672f38c0ef">getCallSite</a>());</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>* formalParm = <a class="code" href="classSVF_1_1VFG.html#a75eb519e4f89a116db98fccb263af4d6">getFormalParmVFGNode</a>(forkedge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>());</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <a class="code" href="classSVF_1_1VFG.html#a6fd24c001a6daedf591974ba27140461">addInterEdgeFromAPToFP</a>(acutalParm,formalParm,<a class="code" href="classSVF_1_1VFG.html#a9bc8e7ee74b652ed7708e95c16a63728">getCallSiteID</a>(forkedge-><a class="code" href="classSVF_1_1CallPE.html#a6a7a917cd6f1235b9453c9672f38c0ef">getCallSite</a>(), formalParm-><a class="code" href="classSVF_1_1ICFGNode.html#ae526280cca2d6cbb2868c80461bc16da">getFun</a>()));</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  }</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <a class="code" href="classSVF_1_1PAGEdge.html#a59eb693c90848382efa1cccb56fe82d3">PAGEdge::PAGEdgeSetTy</a>& joins = <a class="code" href="classSVF_1_1VFG.html#a37239391028cd313eab7110626444682">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a8ec550e2cbb5ba5847a0eb0760be165b">PAGEdge::ThreadJoin</a>);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = joins.begin(), eiter =</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  joins.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  {</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <a class="code" href="classSVF_1_1TDJoinPE.html">TDJoinPE</a>* joinedge = SVFUtil::cast<TDJoinPE>(*iter);</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> callsiteRev = <a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(joinedge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>());</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetVFGNode</a>* calleeRet = <a class="code" href="classSVF_1_1VFG.html#ab7ba9d179504165f277d347a7cb9f5d8">getFormalRetVFGNode</a>(joinedge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>());</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <a class="code" href="classSVF_1_1VFG.html#a27ac8d60de7be75e831b4a28f8f8f1d2">addRetEdge</a>(calleeRet->getId(),callsiteRev, <a class="code" href="classSVF_1_1VFG.html#a9bc8e7ee74b652ed7708e95c16a63728">getCallSiteID</a>(joinedge-><a class="code" href="classSVF_1_1RetPE.html#a1495bfc171fa21980712f1d729a6b175">getCallSite</a>(), calleeRet-><a class="code" href="classSVF_1_1ICFGNode.html#ae526280cca2d6cbb2868c80461bc16da">getFun</a>()));</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  }</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  }</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span> }</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span> </div><div class="line"><a name="l00694"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#ac34c4529229404617c346f81cc6c141f"> 694</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#ac34c4529229404617c346f81cc6c141f">VFG::hasIntraVFGEdge</a>(<a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* src, <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dst, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5">VFGEdge::VFGEdgeK</a> <a class="code" href="classSVF_1_1VFG.html#a3867c591a231bad0aa2e6ab7c095a42f">kind</a>)</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span> {</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a> edge(src,dst,kind);</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* outEdge = src-><a class="code" href="classSVF_1_1GenericNode.html#a0931220d7a38e03f206cbdc6465d32ad">hasOutgoingEdge</a>(&edge);</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* inEdge = dst-><a class="code" href="classSVF_1_1GenericNode.html#a06a7373b11143e709784de784fa476fe">hasIncomingEdge</a>(&edge);</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <span class="keywordflow">if</span> (outEdge && inEdge)</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  {</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(outEdge == inEdge && <span class="stringliteral">"edges not match"</span>);</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="keywordflow">return</span> outEdge;</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  }</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span> }</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span> </div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span> </div><div class="line"><a name="l00712"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#aead3b463d9aa2fae5845d97896bd18ba"> 712</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#aead3b463d9aa2fae5845d97896bd18ba">VFG::hasThreadVFGEdge</a>(<a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* src, <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dst, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5">VFGEdge::VFGEdgeK</a> <a class="code" href="classSVF_1_1VFG.html#a3867c591a231bad0aa2e6ab7c095a42f">kind</a>)</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span> {</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a> edge(src,dst,kind);</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* outEdge = src-><a class="code" href="classSVF_1_1GenericNode.html#a0931220d7a38e03f206cbdc6465d32ad">hasOutgoingEdge</a>(&edge);</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* inEdge = dst-><a class="code" href="classSVF_1_1GenericNode.html#a06a7373b11143e709784de784fa476fe">hasIncomingEdge</a>(&edge);</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  <span class="keywordflow">if</span> (outEdge && inEdge)</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  {</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(outEdge == inEdge && <span class="stringliteral">"edges not match"</span>);</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  <span class="keywordflow">return</span> outEdge;</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  }</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span> }</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span> </div><div class="line"><a name="l00729"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#ad86631f70bd702b5635bdbeab7d884b9"> 729</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#ad86631f70bd702b5635bdbeab7d884b9">VFG::hasInterVFGEdge</a>(<a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* src, <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dst, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5">VFGEdge::VFGEdgeK</a> <a class="code" href="classSVF_1_1VFG.html#a3867c591a231bad0aa2e6ab7c095a42f">kind</a>,<a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> csId)</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span> {</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a> edge(src,dst,<a class="code" href="classSVF_1_1VFGEdge.html#a30c07e8afb0853d4b46cfa722d912650">VFGEdge::makeEdgeFlagWithInvokeID</a>(kind,csId));</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* outEdge = src-><a class="code" href="classSVF_1_1GenericNode.html#a0931220d7a38e03f206cbdc6465d32ad">hasOutgoingEdge</a>(&edge);</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* inEdge = dst-><a class="code" href="classSVF_1_1GenericNode.html#a06a7373b11143e709784de784fa476fe">hasIncomingEdge</a>(&edge);</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  <span class="keywordflow">if</span> (outEdge && inEdge)</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  {</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(outEdge == inEdge && <span class="stringliteral">"edges not match"</span>);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <span class="keywordflow">return</span> outEdge;</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  }</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span> }</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span> </div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span> </div><div class="line"><a name="l00747"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#ae1348fd6d196ee8a6bd8d98022464d50"> 747</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#ae1348fd6d196ee8a6bd8d98022464d50">VFG::getIntraVFGEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* src, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dst, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5">VFGEdge::VFGEdgeK</a> <a class="code" href="classSVF_1_1VFG.html#a3867c591a231bad0aa2e6ab7c095a42f">kind</a>)</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span> {</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1VFG.html#ac34c4529229404617c346f81cc6c141f">hasIntraVFGEdge</a>(const_cast<VFGNode*>(src),const_cast<VFGNode*>(dst),kind);</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span> }</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span> </div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span> </div><div class="line"><a name="l00756"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#aee3d0c4ed32bde425f33281f248b7dd2"> 756</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#aee3d0c4ed32bde425f33281f248b7dd2">VFG::dump</a>(<span class="keyword">const</span> std::string& file, <span class="keywordtype">bool</span> simple)</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span> {</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  <a class="code" href="classllvm_1_1GraphPrinter.html#a53b3809728c30389a594076097884b82">GraphPrinter::WriteGraphToFile</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>(), file, <span class="keyword">this</span>, simple);</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span> }</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span> </div><div class="line"><a name="l00764"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#ae4350f68e960bfef87f44587628b1929"> 764</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#ae4350f68e960bfef87f44587628b1929">VFG::view</a>()</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span> {</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  llvm::ViewGraph(<span class="keyword">this</span>, <span class="stringliteral">"Value Flow Graph"</span>);</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span> }</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span> </div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span> </div><div class="line"><a name="l00770"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a0c0a7c8f0bd27bc9e88ce54c0809b11b"> 770</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#a0c0a7c8f0bd27bc9e88ce54c0809b11b">VFG::updateCallGraph</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta)</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span> {</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  <a class="code" href="classSVF_1_1VFG.html#a0bdac7337a393ad2e21a33ec1978ca3f">VFGEdgeSetTy</a> vfEdgesAtIndCallSite;</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  PointerAnalysis::CallEdgeMap::const_iterator iter = pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a1ca30dfa42702071b65d363c76d25cbe">getIndCallMap</a>().begin();</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  PointerAnalysis::CallEdgeMap::const_iterator eiter = pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a1ca30dfa42702071b65d363c76d25cbe">getIndCallMap</a>().end();</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <span class="keywordflow">for</span> (; iter != eiter; iter++)</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  {</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* newcs = iter->first;</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(newcs-><a class="code" href="classSVF_1_1CallBlockNode.html#a285c517dfd7fee5467606663a0fdd035">isIndirectCall</a>() && <span class="stringliteral">"this is not an indirect call?"</span>);</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ac1422cd8b449fdb4a1f7c539364e4c41">PointerAnalysis::FunctionSet</a> & functions = iter->second;</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  <span class="keywordflow">for</span> (PointerAnalysis::FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  {</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = *func_iter;</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <a class="code" href="classSVF_1_1VFG.html#aa1e09df7b3724bf18e450b16735998ab">connectCallerAndCallee</a>(newcs, func, vfEdgesAtIndCallSite);</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  }</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  }</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span> }</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span> </div><div class="line"><a name="l00792"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#aa1e09df7b3724bf18e450b16735998ab"> 792</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#aa1e09df7b3724bf18e450b16735998ab">VFG::connectCallerAndCallee</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* callBlockNode, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee, <a class="code" href="classSVF_1_1VFG.html#a0bdac7337a393ad2e21a33ec1978ca3f">VFGEdgeSetTy</a>& edges)</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span> {</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <a class="code" href="classSVF_1_1PAG.html">PAG</a> * <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a> = <a class="code" href="classSVF_1_1PAG.html#ac8910c7330638bdf31c23d4cc03ba9c5">PAG::getPAG</a>();</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <a class="code" href="classSVF_1_1ICFG.html">ICFG</a> * icfg = pag-><a class="code" href="classSVF_1_1PAG.html#ad274c5c15ac51cea5d09ad08febe8c14">getICFG</a>();</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> csId = <a class="code" href="classSVF_1_1VFG.html#a9bc8e7ee74b652ed7708e95c16a63728">getCallSiteID</a>(callBlockNode, callee);</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <a class="code" href="classSVF_1_1RetBlockNode.html">RetBlockNode</a>* retBlockNode = icfg-><a class="code" href="classSVF_1_1ICFG.html#a6d66c83cb1656d0f8ec8b8b65a9e9c41">getRetBlockNode</a>(callBlockNode-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>());</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="comment">// connect actual and formal param</span></div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  <span class="keywordflow">if</span> (pag-><a class="code" href="classSVF_1_1PAG.html#a157df68295822a17ad07a850a230bae1">hasCallSiteArgsMap</a>(callBlockNode) && pag-><a class="code" href="classSVF_1_1PAG.html#abfb24b0a57ffe59f345a7490ce64e63d">hasFunArgsList</a>(callee))</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  {</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAG.html#a1aedb70211aa31a4741615e611d64397">PAG::PAGNodeList</a>& csArgList = pag-><a class="code" href="classSVF_1_1PAG.html#a4dac2dc4756bf3f84e6fa034a8b906da">getCallSiteArgsList</a>(callBlockNode);</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAG.html#a1aedb70211aa31a4741615e611d64397">PAG::PAGNodeList</a>& funArgList = pag-><a class="code" href="classSVF_1_1PAG.html#ad2ff2e50f8e5234979ba9cacc6a6268c">getFunArgsList</a>(callee);</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  PAG::PAGNodeList::const_iterator csArgIt = csArgList.begin(), csArgEit = csArgList.end();</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  PAG::PAGNodeList::const_iterator funArgIt = funArgList.begin(), funArgEit = funArgList.end();</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  <span class="keywordflow">for</span> (; funArgIt != funArgEit && csArgIt != csArgEit; funArgIt++, csArgIt++)</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  {</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *cs_arg = *csArgIt;</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *fun_arg = *funArgIt;</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  <span class="keywordflow">if</span> (fun_arg-><a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>() && cs_arg-><a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>())</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <a class="code" href="classSVF_1_1VFG.html#acbc1f5ae3b9016b1ce97314a2b8b54c0">connectAParamAndFParam</a>(cs_arg, fun_arg, callBlockNode, csId, edges);</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>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(funArgIt == funArgEit && <span class="stringliteral">"function has more arguments than call site"</span>);</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  <span class="keywordflow">if</span> (callee-><a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->isVarArg())</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  {</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> varFunArg = pag-><a class="code" href="classSVF_1_1PAG.html#aa7b2e9e0b3386e27af8413be4c36f519">getVarargNode</a>(callee);</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* varFunArgNode = pag-><a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(varFunArg);</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <span class="keywordflow">if</span> (varFunArgNode-><a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>())</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  {</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <span class="keywordflow">for</span> (; csArgIt != csArgEit; csArgIt++)</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  {</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *cs_arg = *csArgIt;</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  <span class="keywordflow">if</span> (cs_arg-><a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>())</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  <a class="code" href="classSVF_1_1VFG.html#acbc1f5ae3b9016b1ce97314a2b8b54c0">connectAParamAndFParam</a>(cs_arg, varFunArgNode, callBlockNode, csId, edges);</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  }</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  }</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  }</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  }</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span> </div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  <span class="comment">// connect actual return and formal return</span></div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  <span class="keywordflow">if</span> (pag-><a class="code" href="classSVF_1_1PAG.html#a08f1b7f68a267b6cc5ad9cb3f1efede0">funHasRet</a>(callee) && pag-><a class="code" href="classSVF_1_1PAG.html#a0ed3da89d9cba90888e04969dc43f5a3">callsiteHasRet</a>(retBlockNode))</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  {</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* cs_return = pag-><a class="code" href="classSVF_1_1PAG.html#ae455de4db007a5bebffd3a9c16e0b107">getCallSiteRet</a>(retBlockNode);</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* fun_return = pag-><a class="code" href="classSVF_1_1PAG.html#a838a9fa42e68b5f32853f73fa05a7c09">getFunRet</a>(callee);</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="keywordflow">if</span> (cs_return-><a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>() && fun_return-><a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>())</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  <a class="code" href="classSVF_1_1VFG.html#ab4e8ab307ad6beb46812a60ebd31ae3b">connectFRetAndARet</a>(fun_return, cs_return, csId, edges);</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  }</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span> }</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span> </div><div class="line"><a name="l00842"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a1fff5a365e5aa2d99f07f7f64cc35fac"> 842</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* <a class="code" href="classSVF_1_1VFG.html#a1fff5a365e5aa2d99f07f7f64cc35fac">VFG::getLHSTopLevPtr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* node)<span class="keyword"> const</span></div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span> <span class="keyword"></span>{</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span> </div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrVFGNode.html">AddrVFGNode</a>* addr = SVFUtil::dyn_cast<AddrVFGNode>(node))</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="keywordflow">return</span> addr->getPAGDstNode();</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyVFGNode.html">CopyVFGNode</a>* copy = SVFUtil::dyn_cast<CopyVFGNode>(node))</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <span class="keywordflow">return</span> copy->getPAGDstNode();</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepVFGNode.html">GepVFGNode</a>* gep = SVFUtil::dyn_cast<GepVFGNode>(node))</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  <span class="keywordflow">return</span> gep->getPAGDstNode();</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadVFGNode.html">LoadVFGNode</a>* load = SVFUtil::dyn_cast<LoadVFGNode>(node))</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="keywordflow">return</span> load->getPAGDstNode();</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PHIVFGNode.html">PHIVFGNode</a>* phi = SVFUtil::dyn_cast<PHIVFGNode>(node))</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  <span class="keywordflow">return</span> phi->getRes();</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CmpVFGNode.html">CmpVFGNode</a>* cmp = SVFUtil::dyn_cast<CmpVFGNode>(node))</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  <span class="keywordflow">return</span> cmp->getRes();</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1BinaryOPVFGNode.html">BinaryOPVFGNode</a>* bop = SVFUtil::dyn_cast<BinaryOPVFGNode>(node))</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  <span class="keywordflow">return</span> bop->getRes();</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1UnaryOPVFGNode.html">UnaryOPVFGNode</a>* uop = SVFUtil::dyn_cast<UnaryOPVFGNode>(node))</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  <span class="keywordflow">return</span> uop->getRes();</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* ap = SVFUtil::dyn_cast<ActualParmVFGNode>(node))</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  <span class="keywordflow">return</span> ap->getParam();</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>*fp = SVFUtil::dyn_cast<FormalParmVFGNode>(node))</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <span class="keywordflow">return</span> fp->getParam();</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetVFGNode</a>* ar = SVFUtil::dyn_cast<ActualRetVFGNode>(node))</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  <span class="keywordflow">return</span> ar->getRev();</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetVFGNode</a>* fr = SVFUtil::dyn_cast<FormalRetVFGNode>(node))</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  <span class="keywordflow">return</span> fr->getRet();</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1NullPtrVFGNode.html">NullPtrVFGNode</a>* nullVFG = SVFUtil::dyn_cast<NullPtrVFGNode>(node))</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <span class="keywordflow">return</span> nullVFG->getPAGNode();</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"unexpected node kind!"</span>);</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span> }</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span> </div><div class="line"><a name="l00879"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a8994194bca2edfd9528880390de795ab"> 879</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="classSVF_1_1VFG.html#a8994194bca2edfd9528880390de795ab">VFG::isFunEntryVFGNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* node)<span class="keyword"> const</span></div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span> <span class="keyword"></span>{</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>* fp = SVFUtil::dyn_cast<FormalParmVFGNode>(node))</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  {</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  <span class="keywordflow">return</span> fp->getFun();</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  }</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1InterPHIVFGNode.html">InterPHIVFGNode</a>* phi = SVFUtil::dyn_cast<InterPHIVFGNode>(node))</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  {</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  <span class="keywordflow">if</span>(phi->isFormalParmPHI())</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  <span class="keywordflow">return</span> phi->getFun();</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  }</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span> }</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span> </div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span> </div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span> </div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span> </div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span> <span class="keyword">namespace </span><a class="code" href="namespacellvm.html">llvm</a></div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span> {</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span> <span class="keyword">template</span><></div><div class="line"><a name="l00902"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html"> 902</a></span> <span class="keyword">struct </span>DOTGraphTraits<<a class="code" href="classSVF_1_1VFG.html">VFG</a>*> : <span class="keyword">public</span> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01PAG_01_5_01_4.html">DOTGraphTraits<PAG*></a></div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span> {</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span> </div><div class="line"><a name="l00905"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#afd7d2c80916a68b53814e6de593bf520"> 905</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#afd7d2c80916a68b53814e6de593bf520">NodeType</a>;</div><div class="line"><a name="l00906"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a0ae94170a4f95bfc7e89d0149ff67882"> 906</a></span>  <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a0ae94170a4f95bfc7e89d0149ff67882">DOTGraphTraits</a>(<span class="keywordtype">bool</span> isSimple = <span class="keyword">false</span>) :</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  DOTGraphTraits<<a class="code" href="classSVF_1_1PAG.html">PAG</a>*>(isSimple)</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  {</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  }</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span> </div><div class="line"><a name="l00912"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#aaedec44d41a6e36c9e5db804e4a005dd"> 912</a></span>  <span class="keyword">static</span> std::string <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#aaedec44d41a6e36c9e5db804e4a005dd">getGraphName</a>(<a class="code" href="classSVF_1_1VFG.html">VFG</a>*)</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  {</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  <span class="keywordflow">return</span> <span class="stringliteral">"VFG"</span>;</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  }</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span> </div><div class="line"><a name="l00917"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a6470ed90c2a601b01715d02cffd90918"> 917</a></span>  std::string <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a6470ed90c2a601b01715d02cffd90918">getNodeLabel</a>(NodeType *node, <a class="code" href="classSVF_1_1VFG.html">VFG</a> *graph)</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  {</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <span class="keywordflow">if</span> (isSimple())</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  <span class="keywordflow">return</span> getSimpleNodeLabel(node, graph);</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>  <span class="keywordflow">return</span> getCompleteNodeLabel(node, graph);</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  }</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span> </div><div class="line"><a name="l00926"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a0159404d5c5a7816a4b679c0f35a546e"> 926</a></span>  <span class="keyword">static</span> std::string <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a0159404d5c5a7816a4b679c0f35a546e">getSimpleNodeLabel</a>(NodeType *node, <a class="code" href="classSVF_1_1VFG.html">VFG</a>*)</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  {</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  std::string str;</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtVFGNode</a>* stmtNode = SVFUtil::dyn_cast<StmtVFGNode>(node))</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  {</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  rawstr << stmtNode->toString();</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  }</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PHIVFGNode.html">PHIVFGNode</a>* tphi = SVFUtil::dyn_cast<PHIVFGNode>(node))</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  {</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>  rawstr << tphi->toString();</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  }</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>* fp = SVFUtil::dyn_cast<FormalParmVFGNode>(node))</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  {</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  rawstr << fp->toString();</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  }</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* ap = SVFUtil::dyn_cast<ActualParmVFGNode>(node))</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  {</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  rawstr << ap->toString();</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  }</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetVFGNode</a>* ar = SVFUtil::dyn_cast<ActualRetVFGNode>(node))</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  {</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  rawstr << ar->toString();</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  }</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetVFGNode</a>* fr = SVFUtil::dyn_cast<FormalRetVFGNode>(node))</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  {</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  rawstr << fr->toString();</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  }</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<NullPtrVFGNode>(node))</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  {</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  rawstr << <span class="stringliteral">"NullPtr"</span>;</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  }</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1BinaryOPVFGNode.html">BinaryOPVFGNode</a>* bop = SVFUtil::dyn_cast<BinaryOPVFGNode>(node))</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  {</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  rawstr << bop->toString();</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  }</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1UnaryOPVFGNode.html">UnaryOPVFGNode</a>* uop = SVFUtil::dyn_cast<UnaryOPVFGNode>(node))</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  {</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  rawstr << uop->toString();</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  }</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1CmpVFGNode.html">CmpVFGNode</a>* cmp = SVFUtil::dyn_cast<CmpVFGNode>(node))</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  {</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  rawstr << cmp->toString();;</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  }</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"what else kinds of nodes do we have??"</span>);</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span> </div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  }</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span> </div><div class="line"><a name="l00977"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a6ced6b5b50d920fb47c4334693fea86c"> 977</a></span>  <span class="keyword">static</span> std::string <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a6ced6b5b50d920fb47c4334693fea86c">getCompleteNodeLabel</a>(NodeType *node, <a class="code" href="classSVF_1_1VFG.html">VFG</a>*)</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  {</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span> </div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  std::string str;</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtVFGNode</a>* stmtNode = SVFUtil::dyn_cast<StmtVFGNode>(node))</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  {</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>  rawstr << stmtNode->toString();</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  }</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1BinaryOPVFGNode.html">BinaryOPVFGNode</a>* bop = SVFUtil::dyn_cast<BinaryOPVFGNode>(node))</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  {</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  rawstr << bop->toString();</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  }</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1UnaryOPVFGNode.html">UnaryOPVFGNode</a>* uop = SVFUtil::dyn_cast<UnaryOPVFGNode>(node))</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  {</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  rawstr << uop->toString();</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  }</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1CmpVFGNode.html">CmpVFGNode</a>* cmp = SVFUtil::dyn_cast<CmpVFGNode>(node))</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  {</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  rawstr << cmp->toString();</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  }</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PHIVFGNode.html">PHIVFGNode</a>* phi = SVFUtil::dyn_cast<PHIVFGNode>(node))</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  {</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>  rawstr << phi->toString();</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  }</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>* fp = SVFUtil::dyn_cast<FormalParmVFGNode>(node))</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  {</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  rawstr << fp->toString();</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  }</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* ap = SVFUtil::dyn_cast<ActualParmVFGNode>(node))</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  {</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  rawstr << ap->toString();</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>  }</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1NullPtrVFGNode.html">NullPtrVFGNode</a>* nptr = SVFUtil::dyn_cast<NullPtrVFGNode>(node))</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>  {</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  rawstr << nptr->toString();</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  }</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetVFGNode</a>* ar = SVFUtil::dyn_cast<ActualRetVFGNode>(node))</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>  {</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>  rawstr << ar->toString();</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  }</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetVFGNode</a>* fr = SVFUtil::dyn_cast<FormalRetVFGNode>(node))</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>  {</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>  rawstr << fr->toString();</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  }</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRSVFGNode.html">MRSVFGNode</a>* mr = SVFUtil::dyn_cast<MRSVFGNode>(node))</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>  {</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  rawstr << mr->toString();</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  }</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"what else kinds of nodes do we have??"</span>);</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> </div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  }</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> </div><div class="line"><a name="l01032"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a57d4a186a0319b73d69752564bf25b2a"> 1032</a></span>  <span class="keyword">static</span> std::string <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a57d4a186a0319b73d69752564bf25b2a">getNodeAttributes</a>(NodeType *node, <a class="code" href="classSVF_1_1VFG.html">VFG</a>*)</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  {</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  std::string str;</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> </div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtVFGNode</a>* stmtNode = SVFUtil::dyn_cast<StmtVFGNode>(node))</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  {</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGEdge.html">PAGEdge</a>* edge = stmtNode->getPAGEdge();</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  <span class="keywordflow">if</span> (SVFUtil::isa<AddrPE>(edge))</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  {</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  rawstr << <span class="stringliteral">"color=green"</span>;</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  }</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<CopyPE>(edge))</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>  {</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  rawstr << <span class="stringliteral">"color=black"</span>;</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  }</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<RetPE>(edge))</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  {</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  rawstr << <span class="stringliteral">"color=black,style=dotted"</span>;</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  }</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<GepPE>(edge))</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  {</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  rawstr << <span class="stringliteral">"color=purple"</span>;</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  }</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<StorePE>(edge))</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  {</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  rawstr << <span class="stringliteral">"color=blue"</span>;</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  }</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<LoadPE>(edge))</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  {</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  rawstr << <span class="stringliteral">"color=red"</span>;</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  }</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  {</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(0 && <span class="stringliteral">"No such kind edge!!"</span>);</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  }</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  rawstr << <span class="stringliteral">""</span>;</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  }</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<CmpVFGNode>(node))</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  {</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  rawstr << <span class="stringliteral">"color=grey"</span>;</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  }</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<BinaryOPVFGNode>(node))</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  {</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  rawstr << <span class="stringliteral">"color=grey"</span>;</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>  }</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<UnaryOPVFGNode>(node))</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>  {</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>  rawstr << <span class="stringliteral">"color=grey"</span>;</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  }</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<PHIVFGNode>(node))</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  {</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  rawstr << <span class="stringliteral">"color=black"</span>;</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  }</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<NullPtrVFGNode>(node))</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  {</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  rawstr << <span class="stringliteral">"color=grey"</span>;</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>  }</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<FormalParmVFGNode>(node))</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>  {</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  rawstr << <span class="stringliteral">"color=yellow,penwidth=2"</span>;</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  }</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<ActualParmVFGNode>(node))</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  {</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  rawstr << <span class="stringliteral">"color=yellow,penwidth=2"</span>;</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>  }</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<ActualRetVFGNode>(node))</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>  {</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  rawstr << <span class="stringliteral">"color=yellow,penwidth=2"</span>;</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  }</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<FormalRetVFGNode>(node))</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  {</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  rawstr << <span class="stringliteral">"color=yellow,penwidth=2"</span>;</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  }</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<MRSVFGNode>(node))</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  {</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  rawstr << <span class="stringliteral">"color=orange,penwidth=2"</span>;</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  }</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"no such kind of node!!"</span>);</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> </div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  rawstr << <span class="stringliteral">""</span>;</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> </div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>  }</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> </div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  <span class="keyword">template</span><<span class="keyword">class</span> EdgeIter></div><div class="line"><a name="l01119"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a646a1023dab5169a73c8ea54e860c78b"> 1119</a></span>  <span class="keyword">static</span> std::string <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a646a1023dab5169a73c8ea54e860c78b">getEdgeAttributes</a>(NodeType*, EdgeIter EI, <a class="code" href="classSVF_1_1VFG.html">VFG</a>*)</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>  {</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = *(EI.getCurrent());</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge && <span class="stringliteral">"No edge found!!"</span>);</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  <span class="keywordflow">if</span> (SVFUtil::isa<DirectSVFGEdge>(edge))</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  {</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  <span class="keywordflow">if</span> (SVFUtil::isa<CallDirSVFGEdge>(edge))</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=solid,color=red"</span>;</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<RetDirSVFGEdge>(edge))</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=solid,color=blue"</span>;</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=solid"</span>;</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>  }</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<IndirectSVFGEdge>(edge))</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  {</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  <span class="keywordflow">if</span> (SVFUtil::isa<CallIndSVFGEdge>(edge))</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=dashed,color=red"</span>;</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<RetIndSVFGEdge>(edge))</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=dashed,color=blue"</span>;</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=dashed"</span>;</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  }</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  {</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"what else edge we have?"</span>);</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  }</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  }</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> </div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>  <span class="keyword">template</span><<span class="keyword">class</span> EdgeIter></div><div class="line"><a name="l01149"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#af794115d33a8ea6f7f2e2c7ac5dd4c80"> 1149</a></span>  <span class="keyword">static</span> std::string <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#af794115d33a8ea6f7f2e2c7ac5dd4c80">getEdgeSourceLabel</a>(NodeType*, EdgeIter EI)</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>  {</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = *(EI.getCurrent());</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge && <span class="stringliteral">"No edge found!!"</span>);</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> </div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  std::string str;</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1CallDirSVFGEdge.html">CallDirSVFGEdge</a>* dirCall = SVFUtil::dyn_cast<CallDirSVFGEdge>(edge))</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  rawstr << dirCall->getCallSiteId();</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1RetDirSVFGEdge.html">RetDirSVFGEdge</a>* dirRet = SVFUtil::dyn_cast<RetDirSVFGEdge>(edge))</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  rawstr << dirRet->getCallSiteId();</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> </div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  }</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> };</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> } <span class="comment">// End namespace llvm</span></div><div class="ttc" id="classSVF_1_1PAG_html_aa9479778e9fe166b17bb765a7a1668a2"><div class="ttname"><a href="classSVF_1_1PAG.html#aa9479778e9fe166b17bb765a7a1668a2">SVF::PAG::BinaryNodeMap</a></div><div class="ttdeci">Map< const PAGNode *, BinaryOPList > BinaryNodeMap</div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00063">PAG.h:63</a></div></div>
|
|
69
|
+
<a href="VFG_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//===- VFG.cpp -- Sparse value-flow graph-----------------------------------//</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-2018> <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"> * VFG.cpp</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: Sep 11, 2018</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> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <<a class="code" href="SVFGNode_8h.html">Graphs/SVFGNode.h</a>></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="VFG_8h.html">Graphs/VFG.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>"</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "<a class="code" href="LLVMUtil_8h.html">SVF-FE/LLVMUtil.h</a>"</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classSVF_1_1VFGNode.html#a0342b5a6f270f4ff0e8e2a9b0082c6c5"> 40</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1VFGNode.html#a0342b5a6f270f4ff0e8e2a9b0082c6c5">VFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  std::string str;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  rawstr << <span class="stringliteral">"VFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">return</span> rawstr.str();</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"><a class="line" href="classSVF_1_1StmtVFGNode.html#aa5011ff12de490146ab106e90d0b6ad8"> 47</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1StmtVFGNode.html#aa5011ff12de490146ab106e90d0b6ad8">StmtVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  std::string str;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  rawstr << <span class="stringliteral">"StmtVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">return</span> rawstr.str();</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> </div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1LoadVFGNode.html#aad3591f38e30c5168d4accb76ac8dc04"> 55</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1LoadVFGNode.html#aad3591f38e30c5168d4accb76ac8dc04">LoadVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  std::string str;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  rawstr << <span class="stringliteral">"LoadVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> }</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classSVF_1_1StoreVFGNode.html#aba7e8b8329caf412a55f5880f68414fe"> 64</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1StoreVFGNode.html#aba7e8b8329caf412a55f5880f68414fe">StoreVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  std::string str;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  rawstr << <span class="stringliteral">"StoreVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1CopyVFGNode.html#ad86bbc5ec4a9ea226364a84e04724b37"> 72</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1CopyVFGNode.html#ad86bbc5ec4a9ea226364a84e04724b37">CopyVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  std::string str;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  rawstr << <span class="stringliteral">"CopyVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> }</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classSVF_1_1CmpVFGNode.html#aa08c4475c47beb0d026acab859d68117"> 80</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1CmpVFGNode.html#aa08c4475c47beb0d026acab859d68117">CmpVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  std::string str;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  rawstr << <span class="stringliteral">"CmpVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  rawstr << <span class="stringliteral">"PAGEdge: ["</span> << res->getId() << <span class="stringliteral">" = cmp("</span>;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">for</span>(CmpVFGNode::OPVers::const_iterator it = opVerBegin(), eit = opVerEnd();</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  it != eit; it++)</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  rawstr << it->second->getId() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  rawstr << <span class="stringliteral">")]\n"</span>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">if</span>(res->hasValue()){</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  rawstr << <span class="stringliteral">" "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(res->getValue());</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classSVF_1_1BinaryOPVFGNode.html#aa743cf19c5dc91dbb0c7b8981fecc6c4"> 95</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1BinaryOPVFGNode.html#aa743cf19c5dc91dbb0c7b8981fecc6c4">BinaryOPVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  std::string str;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  rawstr << <span class="stringliteral">"BinaryOPVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  rawstr << <span class="stringliteral">"PAGEdge: ["</span> << res->getId() << <span class="stringliteral">" = Binary("</span>;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">for</span>(BinaryOPVFGNode::OPVers::const_iterator it = opVerBegin(), eit = opVerEnd();</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  it != eit; it++)</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  rawstr << it->second->getId() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  rawstr << <span class="stringliteral">")]\t"</span>;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">if</span>(res->hasValue()){</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  rawstr << <span class="stringliteral">" "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(res->getValue());</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="classSVF_1_1UnaryOPVFGNode.html#ab748bb83004550944c6abca7150aec14"> 110</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1UnaryOPVFGNode.html#ab748bb83004550944c6abca7150aec14">UnaryOPVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  std::string str;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  rawstr << <span class="stringliteral">"UnaryOPVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  rawstr << <span class="stringliteral">"PAGEdge: ["</span> << res->getId() << <span class="stringliteral">" = Unary("</span>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">for</span>(UnaryOPVFGNode::OPVers::const_iterator it = opVerBegin(), eit = opVerEnd();</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  it != eit; it++)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  rawstr << it->second->getId() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  rawstr << <span class="stringliteral">")]\t"</span>;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">if</span>(res->hasValue()){</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  rawstr << <span class="stringliteral">" "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(res->getValue());</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> }</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classSVF_1_1GepVFGNode.html#ad27376633c939952878d5d73621ec638"> 125</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1GepVFGNode.html#ad27376633c939952878d5d73621ec638">GepVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  std::string str;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  rawstr << <span class="stringliteral">"GepVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="classSVF_1_1PHIVFGNode.html#a7fb9cbed3718922cd81b18d069c79aea"> 134</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1PHIVFGNode.html#a7fb9cbed3718922cd81b18d069c79aea">PHIVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  std::string str;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  rawstr << <span class="stringliteral">"PHIVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  rawstr << <span class="stringliteral">"PAGNode: ["</span> << res->getId() << <span class="stringliteral">" = PHI("</span>;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">for</span>(PHIVFGNode::OPVers::const_iterator it = opVerBegin(), eit = opVerEnd();</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  it != eit; it++)</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  rawstr << it->second->getId() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  rawstr << <span class="stringliteral">")]\t"</span>;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">if</span>(res->hasValue()){</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  rawstr << <span class="stringliteral">" "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(res->getValue());</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">return</span> rawstr.str();</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> </div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="classSVF_1_1IntraPHIVFGNode.html#a145413d87e9174b5eb70b871b9dfa13e"> 150</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1IntraPHIVFGNode.html#a145413d87e9174b5eb70b871b9dfa13e">IntraPHIVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  std::string str;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  rawstr << <span class="stringliteral">"IntraPHIVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  rawstr << <span class="stringliteral">"PAGNode: ["</span> << res->getId() << <span class="stringliteral">" = PHI("</span>;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">for</span>(PHIVFGNode::OPVers::const_iterator it = opVerBegin(), eit = opVerEnd();</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  it != eit; it++)</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  rawstr << it->second->getId() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  rawstr << <span class="stringliteral">")]\t"</span>;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">if</span>(res->hasValue()){</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  rawstr << <span class="stringliteral">" "</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(res->getValue());</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">return</span> rawstr.str();</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> </div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classSVF_1_1AddrVFGNode.html#ac26fbce400355f43fdc22ad88a8d9067"> 166</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1AddrVFGNode.html#ac26fbce400355f43fdc22ad88a8d9067">AddrVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  std::string str;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  rawstr << <span class="stringliteral">"AddrVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</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"><a class="line" href="classSVF_1_1ArgumentVFGNode.html#a3c10cd63e18f79ccc66f4687d05cb8c5"> 175</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1ArgumentVFGNode.html#a3c10cd63e18f79ccc66f4687d05cb8c5">ArgumentVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  std::string str;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  rawstr << <span class="stringliteral">"ArgumentVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  rawstr << param->toString();</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classSVF_1_1ActualParmVFGNode.html#a60d6ce4c4fe2cf54be45e58b2b93c9f6"> 184</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1ActualParmVFGNode.html#a60d6ce4c4fe2cf54be45e58b2b93c9f6">ActualParmVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  std::string str;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  rawstr << <span class="stringliteral">"ActualParmVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  rawstr << <span class="stringliteral">"CS["</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(getCallSite()->getCallSite()) << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  rawstr << param->toString();</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</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> </div><div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="classSVF_1_1FormalParmVFGNode.html#ac4e695d6ee7bb7c5ed4e273567e7c1cc"> 194</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1FormalParmVFGNode.html#ac4e695d6ee7bb7c5ed4e273567e7c1cc">FormalParmVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  std::string str;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  rawstr << <span class="stringliteral">"FormalParmVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  rawstr << <span class="stringliteral">"Fun["</span> << getFun()->getName() << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  rawstr << param->toString();</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div><div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classSVF_1_1ActualRetVFGNode.html#a4d1e7df32604becd2e2b60fe2e5cfbfa"> 203</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1ActualRetVFGNode.html#a4d1e7df32604becd2e2b60fe2e5cfbfa">ActualRetVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  std::string str;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  rawstr << <span class="stringliteral">"ActualRetVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  rawstr << <span class="stringliteral">"CS["</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(getCallSite()->getCallSite()) << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  rawstr << param->toString();</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">return</span> rawstr.str();</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> </div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div><div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="classSVF_1_1FormalRetVFGNode.html#ab1ae2339d7408d9156cdfe5ab4559e66"> 213</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1FormalRetVFGNode.html#ab1ae2339d7408d9156cdfe5ab4559e66">FormalRetVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  std::string str;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  rawstr << <span class="stringliteral">"FormalRetVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  rawstr << <span class="stringliteral">"Fun["</span> << getFun()->getName() << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  rawstr << param->toString();</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> }</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div><div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="classSVF_1_1InterPHIVFGNode.html#aff35aebdc8d955df160e51da7b666a7e"> 223</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1InterPHIVFGNode.html#aff35aebdc8d955df160e51da7b666a7e">InterPHIVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  std::string str;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">if</span>(isFormalParmPHI())</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  rawstr << <span class="stringliteral">"FormalParmPHI ID: "</span> << getId() << <span class="stringliteral">" PAGNode ID: "</span> << res->getId() << <span class="stringliteral">"\n"</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(res->getValue());</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  rawstr << <span class="stringliteral">"ActualRetPHI ID: "</span> << getId() << <span class="stringliteral">" PAGNode ID: "</span> << res->getId() << <span class="stringliteral">"\n"</span> << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">value2String</a>(res->getValue());</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</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_1NullPtrVFGNode.html#a75c8b89a34bfd89a4af2c699cdb626b9"> 233</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1NullPtrVFGNode.html#a75c8b89a34bfd89a4af2c699cdb626b9">NullPtrVFGNode::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  std::string str;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  rawstr << <span class="stringliteral">"NullPtrVFGNode ID: "</span> << getId();</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  rawstr << <span class="stringliteral">" PAGNode ID: "</span> << node->getId() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div><div class="line"><a name="l00242"></a><span class="lineno"><a class="line" href="classSVF_1_1VFGEdge.html#a8f4bec008af7cd1a89870715eaa91a7b"> 242</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1VFGEdge.html#a8f4bec008af7cd1a89870715eaa91a7b">VFGEdge::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  std::string str;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  rawstr << <span class="stringliteral">"VFGEdge: ["</span> << getDstID() << <span class="stringliteral">"<--"</span> << getSrcID() << <span class="stringliteral">"]\t"</span>;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">return</span> rawstr.str();</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> </div><div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="classSVF_1_1DirectSVFGEdge.html#aa8d70214eb0242c3f2baaa506c12852c"> 249</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1DirectSVFGEdge.html#aa8d70214eb0242c3f2baaa506c12852c">DirectSVFGEdge::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  std::string str;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  rawstr << <span class="stringliteral">"DirectVFGEdge: ["</span> << getDstID() << <span class="stringliteral">"<--"</span> << getSrcID() << <span class="stringliteral">"]\t"</span>;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> }</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div><div class="line"><a name="l00256"></a><span class="lineno"><a class="line" href="classSVF_1_1IntraDirSVFGEdge.html#a1c8dc17717409aa42749181aafd155aa"> 256</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1IntraDirSVFGEdge.html#a1c8dc17717409aa42749181aafd155aa">IntraDirSVFGEdge::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  std::string str;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  rawstr << <span class="stringliteral">"IntraDirSVFGEdge: ["</span> << getDstID() << <span class="stringliteral">"<--"</span> << getSrcID() << <span class="stringliteral">"]\t"</span>;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> }</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div><div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="classSVF_1_1CallDirSVFGEdge.html#af07decd05375f56baa4a1c4fe70bc3f1"> 263</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1CallDirSVFGEdge.html#af07decd05375f56baa4a1c4fe70bc3f1">CallDirSVFGEdge::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  std::string str;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  rawstr << <span class="stringliteral">"CallDirSVFGEdge CallSite ID: "</span> << getCallSiteId() << <span class="stringliteral">" ["</span>;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  rawstr << getDstID() << <span class="stringliteral">"<--"</span> << getSrcID() << <span class="stringliteral">"]\t"</span>;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> }</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div><div class="line"><a name="l00271"></a><span class="lineno"><a class="line" href="classSVF_1_1RetDirSVFGEdge.html#a6282c2619d843cf90575886a0ef81edf"> 271</a></span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1RetDirSVFGEdge.html#a6282c2619d843cf90575886a0ef81edf">RetDirSVFGEdge::toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  std::string str;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  rawstr << <span class="stringliteral">"RetDirSVFGEdge CallSite ID: "</span> << getCallSiteId() << <span class="stringliteral">" ["</span>;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  rawstr << getDstID() << <span class="stringliteral">"<--"</span> << getSrcID() << <span class="stringliteral">"]\t"</span>;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div><div class="line"><a name="l00281"></a><span class="lineno"><a class="line" href="classSVF_1_1FormalRetVFGNode.html#a732fe0036d307a1dace2631219de38ef"> 281</a></span> <a class="code" href="classSVF_1_1FormalRetVFGNode.html#a0155a71f08dfb1fb43f054084b2380c6">FormalRetVFGNode::FormalRetVFGNode</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_1PAGNode.html">PAGNode</a>* n, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* f) :</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <a class="code" href="classSVF_1_1ArgumentVFGNode.html">ArgumentVFGNode</a>(id, n, FRet), fun(f)</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> {</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span> }</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div><div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="classSVF_1_1PHIVFGNode.html#add1ed5dfc7fbb095e2bdb7ff1e2658ef"> 286</a></span> <a class="code" href="classSVF_1_1PHIVFGNode.html#add1ed5dfc7fbb095e2bdb7ff1e2658ef">PHIVFGNode::PHIVFGNode</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_1PAGNode.html">PAGNode</a>* r,<a class="code" href="classSVF_1_1VFGNode.html#a99a54cf322b0eec3a1ef109ce5f2db75">VFGNodeK</a> k): <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>(id, k), res(r)</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div><div class="line"><a name="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="l00299"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a8ba98bb3d888ec5ff40f511da14b37bc"> 299</a></span> <a class="code" href="classSVF_1_1VFG.html#a8ba98bb3d888ec5ff40f511da14b37bc">VFG::VFG</a>(<a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* cg, <a class="code" href="classSVF_1_1VFG.html#ac2e2f555975063da3fa1932ac35802c6">VFGK</a> k): totalVFGNode(0), callgraph(cg), pag(<a class="code" href="classSVF_1_1PAG.html">PAG</a>::getPAG()), kind(k)</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span> {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"\tCreate VFG Top Level Node\n"</span>));</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <a class="code" href="classSVF_1_1VFG.html#a3544cc0380964f238c964a0e7b417862">addVFGNodes</a>();</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"\tCreate SVFG Direct Edge\n"</span>));</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <a class="code" href="classSVF_1_1VFG.html#adedaba0713164e10ce6273b2947535e0">connectDirectVFGEdges</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> </div><div class="line"><a name="l00312"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#af5005136743913d760d7402bbd308c69"> 312</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#af5005136743913d760d7402bbd308c69">VFG::destroy</a>()</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> {</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a> = <span class="keyword">nullptr</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> </div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div><div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a3544cc0380964f238c964a0e7b417862"> 321</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#a3544cc0380964f238c964a0e7b417862">VFG::addVFGNodes</a>()</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span> {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="comment">// initialize dummy definition null pointers in order to uniform the construction</span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="comment">// to be noted for black hole pointer it has already has address edge connected,</span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="comment">// and its definition will be set when processing addr PAG edge.</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <a class="code" href="classSVF_1_1VFG.html#a59bc855eb8591d88e0898e14d4f4b607">addNullPtrVFGNode</a>(<a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(<a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#a745eddbb75d513d9cbf76709e3d7057e">getNullPtr</a>()));</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="comment">// initialize address nodes</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <a class="code" href="classSVF_1_1PAGEdge.html#a59eb693c90848382efa1cccb56fe82d3">PAGEdge::PAGEdgeSetTy</a>& addrs = <a class="code" href="classSVF_1_1VFG.html#a37239391028cd313eab7110626444682">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6ac29bb583428e3c20d758bb9cf2d2d626">PAGEdge::Addr</a>);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = addrs.begin(), eiter =</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  addrs.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  {</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <a class="code" href="classSVF_1_1VFG.html#a7b0d533f3ccce8fc64deae6077f3d959">addAddrVFGNode</a>(SVFUtil::cast<AddrPE>(*iter));</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  }</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="comment">// initialize copy nodes</span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <a class="code" href="classSVF_1_1PAGEdge.html#a59eb693c90848382efa1cccb56fe82d3">PAGEdge::PAGEdgeSetTy</a>& copys = <a class="code" href="classSVF_1_1VFG.html#a37239391028cd313eab7110626444682">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6af447071283803d3aee763fe20783f4a4">PAGEdge::Copy</a>);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = copys.begin(), eiter =</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  copys.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  {</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyPE.html">CopyPE</a>* edge = SVFUtil::cast<CopyPE>(*iter);</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keywordflow">if</span>(!<a class="code" href="classSVF_1_1VFG.html#a8ddf15d89a1b11a7f7720b671f4f0295">isPhiCopyEdge</a>(edge))</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <a class="code" href="classSVF_1_1VFG.html#afd664fad8aec173f4ed6c4aa588e5c46">addCopyVFGNode</a>(edge);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  }</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="comment">// initialize gep nodes</span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <a class="code" href="classSVF_1_1PAGEdge.html#a59eb693c90848382efa1cccb56fe82d3">PAGEdge::PAGEdgeSetTy</a>& ngeps = <a class="code" href="classSVF_1_1VFG.html#a37239391028cd313eab7110626444682">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a4b8b2eb7125c259d8d550dd83c51147b">PAGEdge::NormalGep</a>);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = ngeps.begin(), eiter =</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  ngeps.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <a class="code" href="classSVF_1_1VFG.html#a51b3b232ddda0656bfe0c7d9527b4a84">addGepVFGNode</a>(SVFUtil::cast<NormalGepPE>(*iter));</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> </div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <a class="code" href="classSVF_1_1PAGEdge.html#a59eb693c90848382efa1cccb56fe82d3">PAGEdge::PAGEdgeSetTy</a>& vgeps = <a class="code" href="classSVF_1_1VFG.html#a37239391028cd313eab7110626444682">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6ad1f40a044008babd44bff30af846550c">PAGEdge::VariantGep</a>);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = vgeps.begin(), eiter =</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  vgeps.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  {</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <a class="code" href="classSVF_1_1VFG.html#a51b3b232ddda0656bfe0c7d9527b4a84">addGepVFGNode</a>(SVFUtil::cast<VariantGepPE>(*iter));</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="comment">// initialize load nodes</span></div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <a class="code" href="classSVF_1_1PAGEdge.html#a59eb693c90848382efa1cccb56fe82d3">PAGEdge::PAGEdgeSetTy</a>& loads = <a class="code" href="classSVF_1_1VFG.html#a37239391028cd313eab7110626444682">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a8fcebc849a231c3c87dddbf0ab5a2167">PAGEdge::Load</a>);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = loads.begin(), eiter =</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  loads.end(); iter != eiter; ++iter)</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>  <a class="code" href="classSVF_1_1VFG.html#adbd7966d18ab50da5a485ba6e043ba61">addLoadVFGNode</a>(SVFUtil::cast<LoadPE>(*iter));</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  }</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="comment">// initialize store nodes</span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <a class="code" href="classSVF_1_1PAGEdge.html#a59eb693c90848382efa1cccb56fe82d3">PAGEdge::PAGEdgeSetTy</a>& stores = <a class="code" href="classSVF_1_1VFG.html#a37239391028cd313eab7110626444682">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6aca20a2c4d9809736d43b18f3cb53e8cf">PAGEdge::Store</a>);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = stores.begin(), eiter =</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  stores.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  {</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <a class="code" href="classSVF_1_1VFG.html#aa21ad616306c111b77fb3ec8f16b19be">addStoreVFGNode</a>(SVFUtil::cast<StorePE>(*iter));</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> </div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <a class="code" href="classSVF_1_1PAGEdge.html#a59eb693c90848382efa1cccb56fe82d3">PAGEdge::PAGEdgeSetTy</a>& forks = <a class="code" href="classSVF_1_1VFG.html#a37239391028cd313eab7110626444682">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a1070b34fd19259725d752aa3b5adc73b">PAGEdge::ThreadFork</a>);</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = forks.begin(), eiter =</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  forks.end(); iter != eiter; ++iter)</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>  <a class="code" href="classSVF_1_1TDForkPE.html">TDForkPE</a>* forkedge = SVFUtil::cast<TDForkPE>(*iter);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <a class="code" href="classSVF_1_1VFG.html#a0fabca3c0f9bebe23f66a914dbb99e39">addActualParmVFGNode</a>(forkedge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>(),forkedge-><a class="code" href="classSVF_1_1CallPE.html#a6a7a917cd6f1235b9453c9672f38c0ef">getCallSite</a>());</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> </div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="comment">// initialize actual parameter nodes</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <span class="keywordflow">for</span>(PAG::CSToArgsListMap::iterator it = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#ae0151d49c9199a2899d8b872dc1ebcfc">getCallSiteArgsMap</a>().begin(), eit = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#ae0151d49c9199a2899d8b872dc1ebcfc">getCallSiteArgsMap</a>().end(); it !=eit; ++it)</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  {</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keywordflow">for</span>(PAG::PAGNodeList::iterator pit = it->second.begin(), epit = it->second.end(); pit!=epit; ++pit)</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  {</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* pagNode = *pit;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(pagNode))</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <a class="code" href="classSVF_1_1VFG.html#a0fabca3c0f9bebe23f66a914dbb99e39">addActualParmVFGNode</a>(pagNode,it->first);</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  }</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  }</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> </div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="comment">// initialize actual return nodes (callsite return)</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keywordflow">for</span>(PAG::CSToRetMap::iterator it = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#af46a20842683fbbc52ac554c0777fbdc">getCallSiteRets</a>().begin(), eit = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#af46a20842683fbbc52ac554c0777fbdc">getCallSiteRets</a>().end(); it !=eit; ++it)</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="l00405"></a><span class="lineno"> 405</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(it->second) == <span class="keyword">false</span> || <a class="code" href="classSVF_1_1VFG.html#ab5b63b4f6317bfb5875f2b977bcf26a4">hasDef</a>(it->second))</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">continue</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>  <a class="code" href="classSVF_1_1VFG.html#a71022c8953e89e21b017936286f12251">addActualRetVFGNode</a>(it->second,it->first->getCallBlockNode());</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  }</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> </div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="comment">// initialize formal parameter nodes</span></div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <span class="keywordflow">for</span>(PAG::FunToArgsListMap::iterator it = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#ab6779cc646bc50965722984f1a708811">getFunArgsMap</a>().begin(), eit = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#ab6779cc646bc50965722984f1a708811">getFunArgsMap</a>().end(); it !=eit; ++it)</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  {</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = it->first;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> </div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keywordflow">for</span>(PAG::PAGNodeList::iterator pit = it->second.begin(), epit = it->second.end(); pit!=epit; ++pit)</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  {</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* param = *pit;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(param) == <span class="keyword">false</span> || <a class="code" href="classSVF_1_1VFG.html#a88f6468b9b43bbb06ef757d884580a50">hasBlackHoleConstObjAddrAsDef</a>(param))</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <a class="code" href="classSVF_1_1VFG.html#ade3f735b3c7b1a53cab3d67cd9f7b874">CallPESet</a> callPEs;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="keywordflow">if</span> (param-><a class="code" href="classSVF_1_1PAGNode.html#a9e6775e06806c54ee016e28c1324604a">hasIncomingEdges</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a5f4c2c1ec167425622d40133ec15448d">PAGEdge::Call</a>))</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  {</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::const_iterator cit = param-><a class="code" href="classSVF_1_1PAGNode.html#a945d9b4c57dfab9baa33e6dbc333ceee">getIncomingEdgesBegin</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a5f4c2c1ec167425622d40133ec15448d">PAGEdge::Call</a>), ecit =</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  param-><a class="code" href="classSVF_1_1PAGNode.html#ac8d69ac849b697663b19db76b92053bc">getIncomingEdgesEnd</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a5f4c2c1ec167425622d40133ec15448d">PAGEdge::Call</a>); cit != ecit; ++cit)</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* callPE = SVFUtil::cast<CallPE>(*cit);</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(callPE-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()))</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  callPEs.insert(callPE);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  }</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  }</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <a class="code" href="classSVF_1_1VFG.html#afdb1560eecf692fb646d412dc760088d">addFormalParmVFGNode</a>(param,func,callPEs);</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span> </div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordflow">if</span> (func-><a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->getFunctionType()->isVarArg())</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* varParam = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(<a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#aa7b2e9e0b3386e27af8413be4c36f519">getVarargNode</a>(func));</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(varParam) == <span class="keyword">false</span> || <a class="code" href="classSVF_1_1VFG.html#a88f6468b9b43bbb06ef757d884580a50">hasBlackHoleConstObjAddrAsDef</a>(varParam))</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span> </div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <a class="code" href="classSVF_1_1VFG.html#ade3f735b3c7b1a53cab3d67cd9f7b874">CallPESet</a> callPEs;</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="keywordflow">if</span> (varParam-><a class="code" href="classSVF_1_1PAGNode.html#a9e6775e06806c54ee016e28c1324604a">hasIncomingEdges</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a5f4c2c1ec167425622d40133ec15448d">PAGEdge::Call</a>))</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  {</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keywordflow">for</span>(PAGEdge::PAGEdgeSetTy::const_iterator cit = varParam-><a class="code" href="classSVF_1_1PAGNode.html#a945d9b4c57dfab9baa33e6dbc333ceee">getIncomingEdgesBegin</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a5f4c2c1ec167425622d40133ec15448d">PAGEdge::Call</a>),</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  ecit = varParam-><a class="code" href="classSVF_1_1PAGNode.html#ac8d69ac849b697663b19db76b92053bc">getIncomingEdgesEnd</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a5f4c2c1ec167425622d40133ec15448d">PAGEdge::Call</a>); cit!=ecit; ++cit)</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  {</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* callPE = SVFUtil::cast<CallPE>(*cit);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(callPE-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()))</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  callPEs.insert(callPE);</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  }</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  }</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <a class="code" href="classSVF_1_1VFG.html#afdb1560eecf692fb646d412dc760088d">addFormalParmVFGNode</a>(varParam,func,callPEs);</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  }</div><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> </div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="comment">// initialize formal return nodes (callee return)</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="keywordflow">for</span> (PAG::FunToRetMap::iterator it = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#ac0835eaa3f23a53eb56a122bebe2ac6c">getFunRets</a>().begin(), eit = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#ac0835eaa3f23a53eb56a122bebe2ac6c">getFunRets</a>().end(); it != eit; ++it)</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  {</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = it->first;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> </div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* uniqueFunRetNode = it->second;</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span> </div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <a class="code" href="classSVF_1_1VFG.html#abf966182c28f0521dcd161aa299e453d">RetPESet</a> retPEs;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="keywordflow">if</span> (uniqueFunRetNode-><a class="code" href="classSVF_1_1PAGNode.html#aa311aaac0f8fbb8650fac9d7662ec795">hasOutgoingEdges</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a99fe431c7a635d39b5558d1048a94c05">PAGEdge::Ret</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>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::const_iterator cit = uniqueFunRetNode-><a class="code" href="classSVF_1_1PAGNode.html#a3db180378695da64a50a83bd8d8a7e47">getOutgoingEdgesBegin</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a99fe431c7a635d39b5558d1048a94c05">PAGEdge::Ret</a>),</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  ecit = uniqueFunRetNode-><a class="code" href="classSVF_1_1PAGNode.html#ad57a4d81a77520c773bee35d294a7ed3">getOutgoingEdgesEnd</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a99fe431c7a635d39b5558d1048a94c05">PAGEdge::Ret</a>);</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  cit != ecit; ++cit)</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  {</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>* retPE = SVFUtil::cast<RetPE>(*cit);</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(retPE-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()))</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  retPEs.insert(retPE);</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  }</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  }</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span> </div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(uniqueFunRetNode))</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <a class="code" href="classSVF_1_1VFG.html#aae3bddc73e39d96fcc97d56ea3dec373">addFormalRetVFGNode</a>(uniqueFunRetNode, func, retPEs);</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  }</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span> </div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="comment">// initialize llvm phi nodes (phi of top level pointers)</span></div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <a class="code" href="classSVF_1_1PAG.html#aaf91fa0a5807355e276eeaeee0638aea">PAG::PHINodeMap</a>& phiNodeMap = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#ad81e9de87891387c6fc860d964316d4f">getPhiNodeMap</a>();</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordflow">for</span> (PAG::PHINodeMap::iterator pit = phiNodeMap.begin(), epit = phiNodeMap.end(); pit != epit; ++pit)</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  {</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(pit->first))</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <a class="code" href="classSVF_1_1VFG.html#a85dc35e83a5699382ead67728e94273c">addIntraPHIVFGNode</a>(pit->first, pit->second);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  }</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="comment">// initialize llvm binary nodes (binary operators)</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <a class="code" href="classSVF_1_1PAG.html#aa9479778e9fe166b17bb765a7a1668a2">PAG::BinaryNodeMap</a>& binaryNodeMap = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#a6931eafe066036139d2538340ef9b95b">getBinaryNodeMap</a>();</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keywordflow">for</span> (PAG::BinaryNodeMap::iterator pit = binaryNodeMap.begin(), epit = binaryNodeMap.end(); pit != epit; ++pit)</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  {</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(pit->first))</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <a class="code" href="classSVF_1_1VFG.html#a9f0a280c43a82cb7e01ee8e887a84ad1">addBinaryOPVFGNode</a>(pit->first, pit->second);</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  }</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="comment">// initialize llvm unary nodes (unary operators)</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <a class="code" href="classSVF_1_1PAG.html#a471804c7fbdfacd90915c3a9cec7fccd">PAG::UnaryNodeMap</a>& unaryNodeMap = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#a71a4647b6ac6a67d69ba580b3f5cac6a">getUnaryNodeMap</a>();</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="keywordflow">for</span> (PAG::UnaryNodeMap::iterator pit = unaryNodeMap.begin(), epit = unaryNodeMap.end(); pit != epit; ++pit)</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  {</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(pit->first))</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <a class="code" href="classSVF_1_1VFG.html#aaeefa7a696350f6573510b670babbe4e">addUnaryOPVFGNode</a>(pit->first, pit->second);</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  }</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="comment">// initialize llvm cmp nodes (comparision)</span></div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <a class="code" href="classSVF_1_1PAG.html#a373335a3c28622cfc0aeb1ef7ae8ccf7">PAG::CmpNodeMap</a>& cmpNodeMap = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#a667b240e083d720b486a47308e36ae55">getCmpNodeMap</a>();</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keywordflow">for</span> (PAG::CmpNodeMap::iterator pit = cmpNodeMap.begin(), epit =cmpNodeMap.end(); pit != epit; ++pit)</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a0b71873131a63eb6ee47ed2f66e3154a">isInterestedPAGNode</a>(pit->first))</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <a class="code" href="classSVF_1_1VFG.html#a424126e80453d641a7d51aa481a4c843">addCmpVFGNode</a>(pit->first, pit->second);</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  }</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span> }</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div><div class="line"><a name="l00514"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2"> 514</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">VFG::addIntraDirectVFEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId)</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span> {</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* srcNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(srcId);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dstNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(dstId);</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <a class="code" href="classSVF_1_1VFG.html#a43b0c126c2e32cb3d286a78b14e09a96">checkIntraEdgeParents</a>(srcNode, dstNode);</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = <a class="code" href="classSVF_1_1VFG.html#ac34c4529229404617c346f81cc6c141f">hasIntraVFGEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a08201e6cbff4817e44568747a966b71d">VFGEdge::IntraDirectVF</a>))</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  {</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge->isDirectVFGEdge() && <span class="stringliteral">"this should be a direct value flow edge!"</span>);</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  }</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  {</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="keywordflow">if</span>(srcNode!=dstNode){</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <a class="code" href="classSVF_1_1IntraDirSVFGEdge.html">IntraDirSVFGEdge</a>* directEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1IntraDirSVFGEdge.html">IntraDirSVFGEdge</a>(srcNode,dstNode);</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1VFG.html#a84cf5facb15e1d598c2527fba0c7634d">addVFGEdge</a>(directEdge) ? directEdge : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  }</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  }</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span> }</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span> </div><div class="line"><a name="l00538"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#aa01f63b17acdd52122a7f1ade329ccea"> 538</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#aa01f63b17acdd52122a7f1ade329ccea">VFG::addCallEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId, <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> csId)</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span> {</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* srcNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(srcId);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dstNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(dstId);</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = <a class="code" href="classSVF_1_1VFG.html#ad86631f70bd702b5635bdbeab7d884b9">hasInterVFGEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a8383c27feab3f1acc67cacef9744c04a">VFGEdge::CallDirVF</a>,csId))</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  {</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge->isCallDirectVFGEdge() && <span class="stringliteral">"this should be a direct value flow edge!"</span>);</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  }</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  {</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <a class="code" href="classSVF_1_1CallDirSVFGEdge.html">CallDirSVFGEdge</a>* callEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CallDirSVFGEdge.html">CallDirSVFGEdge</a>(srcNode,dstNode,csId);</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1VFG.html#a84cf5facb15e1d598c2527fba0c7634d">addVFGEdge</a>(callEdge) ? callEdge : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  }</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span> }</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span> </div><div class="line"><a name="l00557"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a27ac8d60de7be75e831b4a28f8f8f1d2"> 557</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#a27ac8d60de7be75e831b4a28f8f8f1d2">VFG::addRetEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId, <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> csId)</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span> {</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* srcNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(srcId);</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dstNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(dstId);</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = <a class="code" href="classSVF_1_1VFG.html#ad86631f70bd702b5635bdbeab7d884b9">hasInterVFGEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a8288c583cfcbfdf9aa2ac2103c0e7191">VFGEdge::RetDirVF</a>,csId))</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  {</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge->isRetDirectVFGEdge() && <span class="stringliteral">"this should be a direct value flow edge!"</span>);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  }</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  {</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <a class="code" href="classSVF_1_1RetDirSVFGEdge.html">RetDirSVFGEdge</a>* retEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1RetDirSVFGEdge.html">RetDirSVFGEdge</a>(srcNode,dstNode,csId);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1VFG.html#a84cf5facb15e1d598c2527fba0c7634d">addVFGEdge</a>(retEdge) ? retEdge : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  }</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span> }</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span> </div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span> </div><div class="line"><a name="l00577"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#adedaba0713164e10ce6273b2947535e0"> 577</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#adedaba0713164e10ce6273b2947535e0">VFG::connectDirectVFGEdges</a>()</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span> {</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span> </div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">iterator</a> it = <a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = <a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it!=eit; ++it)</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  {</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = it->first;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* node = it->second;</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span> </div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtVFGNode</a>* stmtNode = SVFUtil::dyn_cast<StmtVFGNode>(node))</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  {</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="keywordflow">if</span>(SVFUtil::isa<AddrVFGNode>(stmtNode))</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="keywordflow">if</span> (stmtNode->getPAGSrcNode()->isConstantData() == <span class="keyword">false</span>)</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(stmtNode->getPAGSrcNode()), nodeId);</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span> </div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keywordflow">if</span>(SVFUtil::isa<StoreVFGNode>(stmtNode) && (stmtNode->getPAGDstNode()->isConstantData() == <span class="keyword">false</span>))</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  {</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(stmtNode->getPAGDstNode()), nodeId);</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  }</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span> </div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  }</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PHIVFGNode.html">PHIVFGNode</a>* phiNode = SVFUtil::dyn_cast<PHIVFGNode>(node))</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  {</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <span class="keywordflow">for</span> (PHIVFGNode::OPVers::const_iterator it = phiNode->opVerBegin(), eit = phiNode->opVerEnd(); it != eit; it++)</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  {</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  <span class="keywordflow">if</span> (it->second->isConstantData() == <span class="keyword">false</span>)</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(it->second), nodeId);</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  }</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  }</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1BinaryOPVFGNode.html">BinaryOPVFGNode</a>* binaryNode = SVFUtil::dyn_cast<BinaryOPVFGNode>(node))</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  {</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <span class="keywordflow">for</span> (BinaryOPVFGNode::OPVers::const_iterator it = binaryNode->opVerBegin(), eit = binaryNode->opVerEnd(); it != eit; it++)</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  {</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keywordflow">if</span> (it->second->isConstantData() == <span class="keyword">false</span>)</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(it->second), nodeId);</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  }</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  }</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1UnaryOPVFGNode.html">UnaryOPVFGNode</a>* unaryNode = SVFUtil::dyn_cast<UnaryOPVFGNode>(node))</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  {</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  <span class="keywordflow">for</span> (UnaryOPVFGNode::OPVers::const_iterator it = unaryNode->opVerBegin(), eit = unaryNode->opVerEnd(); it != eit; it++)</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  {</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keywordflow">if</span> (it->second->isConstantData() == <span class="keyword">false</span>)</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(it->second), nodeId);</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  }</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  }</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1CmpVFGNode.html">CmpVFGNode</a>* cmpNode = SVFUtil::dyn_cast<CmpVFGNode>(node))</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  {</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  <span class="keywordflow">for</span> (CmpVFGNode::OPVers::const_iterator it = cmpNode->opVerBegin(), eit = cmpNode->opVerEnd(); it != eit; it++)</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  {</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <span class="keywordflow">if</span> (it->second->isConstantData() == <span class="keyword">false</span>)</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(it->second), nodeId);</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  }</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  }</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* actualParm = SVFUtil::dyn_cast<ActualParmVFGNode>(node))</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  {</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="keywordflow">if</span> (actualParm->getParam()->isConstantData() == <span class="keyword">false</span>)</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(actualParm->getParam()), nodeId);</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  }</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>* formalParm = SVFUtil::dyn_cast<FormalParmVFGNode>(node))</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  {</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">for</span>(CallPESet::const_iterator it = formalParm->callPEBegin(), eit = formalParm->callPEEnd();</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  it!=eit; ++it)</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  {</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = (*it)-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>();</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* acutalParm = <a class="code" href="classSVF_1_1VFG.html#a01b8694a5ab7acf8df0213225550791b">getActualParmVFGNode</a>((*it)->getSrcNode(),cs);</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <a class="code" href="classSVF_1_1VFG.html#a6fd24c001a6daedf591974ba27140461">addInterEdgeFromAPToFP</a>(acutalParm,formalParm,<a class="code" href="classSVF_1_1VFG.html#a9bc8e7ee74b652ed7708e95c16a63728">getCallSiteID</a>(cs, formalParm-><a class="code" href="classSVF_1_1ICFGNode.html#ae526280cca2d6cbb2868c80461bc16da">getFun</a>()));</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  }</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  }</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetVFGNode</a>* calleeRet = SVFUtil::dyn_cast<FormalRetVFGNode>(node))</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  {</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(calleeRet->getRet()), nodeId);</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span> </div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keywordflow">for</span>(RetPESet::const_iterator it = calleeRet->retPEBegin(), eit = calleeRet->retPEEnd(); it!=eit; ++it)</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  {</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetVFGNode</a>* callsiteRev = <a class="code" href="classSVF_1_1VFG.html#a0b072e8e45899b89da0a466140563c38">getActualRetVFGNode</a>((*it)->getDstNode());</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* retBlockNode = (*it)-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>();</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* callBlockNode = <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a>-><a class="code" href="classSVF_1_1PAG.html#ad274c5c15ac51cea5d09ad08febe8c14">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(retBlockNode->getCallSite());</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  <a class="code" href="classSVF_1_1VFG.html#abd05b599b383c759455aff99963b7b41">addInterEdgeFromFRToAR</a>(calleeRet,callsiteRev, <a class="code" href="classSVF_1_1VFG.html#a9bc8e7ee74b652ed7708e95c16a63728">getCallSiteID</a>(callBlockNode, calleeRet-><a class="code" href="classSVF_1_1ICFGNode.html#ae526280cca2d6cbb2868c80461bc16da">getFun</a>()));</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  }</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  }</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  }</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span> </div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a153d42a480ef1763ad59fd7258ac3ac5">Options::EnableThreadCallGraph</a>){</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <a class="code" href="classSVF_1_1PAGEdge.html#a59eb693c90848382efa1cccb56fe82d3">PAGEdge::PAGEdgeSetTy</a>& forks = <a class="code" href="classSVF_1_1VFG.html#a37239391028cd313eab7110626444682">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a1070b34fd19259725d752aa3b5adc73b">PAGEdge::ThreadFork</a>);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = forks.begin(), eiter =</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  forks.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  {</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <a class="code" href="classSVF_1_1TDForkPE.html">TDForkPE</a>* forkedge = SVFUtil::cast<TDForkPE>(*iter);</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* acutalParm = <a class="code" href="classSVF_1_1VFG.html#a01b8694a5ab7acf8df0213225550791b">getActualParmVFGNode</a>(forkedge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>(),forkedge-><a class="code" href="classSVF_1_1CallPE.html#a6a7a917cd6f1235b9453c9672f38c0ef">getCallSite</a>());</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>* formalParm = <a class="code" href="classSVF_1_1VFG.html#a75eb519e4f89a116db98fccb263af4d6">getFormalParmVFGNode</a>(forkedge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>());</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <a class="code" href="classSVF_1_1VFG.html#a6fd24c001a6daedf591974ba27140461">addInterEdgeFromAPToFP</a>(acutalParm,formalParm,<a class="code" href="classSVF_1_1VFG.html#a9bc8e7ee74b652ed7708e95c16a63728">getCallSiteID</a>(forkedge-><a class="code" href="classSVF_1_1CallPE.html#a6a7a917cd6f1235b9453c9672f38c0ef">getCallSite</a>(), formalParm-><a class="code" href="classSVF_1_1ICFGNode.html#ae526280cca2d6cbb2868c80461bc16da">getFun</a>()));</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  }</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <a class="code" href="classSVF_1_1PAGEdge.html#a59eb693c90848382efa1cccb56fe82d3">PAGEdge::PAGEdgeSetTy</a>& joins = <a class="code" href="classSVF_1_1VFG.html#a37239391028cd313eab7110626444682">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a8ec550e2cbb5ba5847a0eb0760be165b">PAGEdge::ThreadJoin</a>);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = joins.begin(), eiter =</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  joins.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  {</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <a class="code" href="classSVF_1_1TDJoinPE.html">TDJoinPE</a>* joinedge = SVFUtil::cast<TDJoinPE>(*iter);</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> callsiteRev = <a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(joinedge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>());</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetVFGNode</a>* calleeRet = <a class="code" href="classSVF_1_1VFG.html#ab7ba9d179504165f277d347a7cb9f5d8">getFormalRetVFGNode</a>(joinedge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>());</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <a class="code" href="classSVF_1_1VFG.html#a27ac8d60de7be75e831b4a28f8f8f1d2">addRetEdge</a>(calleeRet->getId(),callsiteRev, <a class="code" href="classSVF_1_1VFG.html#a9bc8e7ee74b652ed7708e95c16a63728">getCallSiteID</a>(joinedge-><a class="code" href="classSVF_1_1RetPE.html#a1495bfc171fa21980712f1d729a6b175">getCallSite</a>(), calleeRet-><a class="code" href="classSVF_1_1ICFGNode.html#ae526280cca2d6cbb2868c80461bc16da">getFun</a>()));</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  }</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  }</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span> }</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span> </div><div class="line"><a name="l00694"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#ac34c4529229404617c346f81cc6c141f"> 694</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#ac34c4529229404617c346f81cc6c141f">VFG::hasIntraVFGEdge</a>(<a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* src, <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dst, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5">VFGEdge::VFGEdgeK</a> <a class="code" href="classSVF_1_1VFG.html#a3867c591a231bad0aa2e6ab7c095a42f">kind</a>)</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span> {</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a> edge(src,dst,kind);</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* outEdge = src-><a class="code" href="classSVF_1_1GenericNode.html#a0931220d7a38e03f206cbdc6465d32ad">hasOutgoingEdge</a>(&edge);</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* inEdge = dst-><a class="code" href="classSVF_1_1GenericNode.html#a06a7373b11143e709784de784fa476fe">hasIncomingEdge</a>(&edge);</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <span class="keywordflow">if</span> (outEdge && inEdge)</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  {</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(outEdge == inEdge && <span class="stringliteral">"edges not match"</span>);</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="keywordflow">return</span> outEdge;</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  }</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span> }</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span> </div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span> </div><div class="line"><a name="l00712"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#aead3b463d9aa2fae5845d97896bd18ba"> 712</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#aead3b463d9aa2fae5845d97896bd18ba">VFG::hasThreadVFGEdge</a>(<a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* src, <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dst, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5">VFGEdge::VFGEdgeK</a> <a class="code" href="classSVF_1_1VFG.html#a3867c591a231bad0aa2e6ab7c095a42f">kind</a>)</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span> {</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a> edge(src,dst,kind);</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* outEdge = src-><a class="code" href="classSVF_1_1GenericNode.html#a0931220d7a38e03f206cbdc6465d32ad">hasOutgoingEdge</a>(&edge);</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* inEdge = dst-><a class="code" href="classSVF_1_1GenericNode.html#a06a7373b11143e709784de784fa476fe">hasIncomingEdge</a>(&edge);</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  <span class="keywordflow">if</span> (outEdge && inEdge)</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  {</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(outEdge == inEdge && <span class="stringliteral">"edges not match"</span>);</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  <span class="keywordflow">return</span> outEdge;</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  }</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span> }</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span> </div><div class="line"><a name="l00729"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#ad86631f70bd702b5635bdbeab7d884b9"> 729</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#ad86631f70bd702b5635bdbeab7d884b9">VFG::hasInterVFGEdge</a>(<a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* src, <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dst, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5">VFGEdge::VFGEdgeK</a> <a class="code" href="classSVF_1_1VFG.html#a3867c591a231bad0aa2e6ab7c095a42f">kind</a>,<a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> csId)</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span> {</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a> edge(src,dst,<a class="code" href="classSVF_1_1VFGEdge.html#a30c07e8afb0853d4b46cfa722d912650">VFGEdge::makeEdgeFlagWithInvokeID</a>(kind,csId));</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* outEdge = src-><a class="code" href="classSVF_1_1GenericNode.html#a0931220d7a38e03f206cbdc6465d32ad">hasOutgoingEdge</a>(&edge);</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* inEdge = dst-><a class="code" href="classSVF_1_1GenericNode.html#a06a7373b11143e709784de784fa476fe">hasIncomingEdge</a>(&edge);</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  <span class="keywordflow">if</span> (outEdge && inEdge)</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  {</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(outEdge == inEdge && <span class="stringliteral">"edges not match"</span>);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <span class="keywordflow">return</span> outEdge;</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  }</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span> }</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span> </div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span> </div><div class="line"><a name="l00747"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#ae1348fd6d196ee8a6bd8d98022464d50"> 747</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#ae1348fd6d196ee8a6bd8d98022464d50">VFG::getIntraVFGEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* src, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dst, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5">VFGEdge::VFGEdgeK</a> <a class="code" href="classSVF_1_1VFG.html#a3867c591a231bad0aa2e6ab7c095a42f">kind</a>)</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span> {</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1VFG.html#ac34c4529229404617c346f81cc6c141f">hasIntraVFGEdge</a>(const_cast<VFGNode*>(src),const_cast<VFGNode*>(dst),kind);</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span> }</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span> </div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span> </div><div class="line"><a name="l00756"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#aee3d0c4ed32bde425f33281f248b7dd2"> 756</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#aee3d0c4ed32bde425f33281f248b7dd2">VFG::dump</a>(<span class="keyword">const</span> std::string& file, <span class="keywordtype">bool</span> simple)</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span> {</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  <a class="code" href="classllvm_1_1GraphPrinter.html#a53b3809728c30389a594076097884b82">GraphPrinter::WriteGraphToFile</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>(), file, <span class="keyword">this</span>, simple);</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span> }</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span> </div><div class="line"><a name="l00764"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#ae4350f68e960bfef87f44587628b1929"> 764</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#ae4350f68e960bfef87f44587628b1929">VFG::view</a>()</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span> {</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  llvm::ViewGraph(<span class="keyword">this</span>, <span class="stringliteral">"Value Flow Graph"</span>);</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span> }</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span> </div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span> </div><div class="line"><a name="l00770"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a0c0a7c8f0bd27bc9e88ce54c0809b11b"> 770</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#a0c0a7c8f0bd27bc9e88ce54c0809b11b">VFG::updateCallGraph</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta)</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span> {</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  <a class="code" href="classSVF_1_1VFG.html#a0bdac7337a393ad2e21a33ec1978ca3f">VFGEdgeSetTy</a> vfEdgesAtIndCallSite;</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  PointerAnalysis::CallEdgeMap::const_iterator iter = pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a1ca30dfa42702071b65d363c76d25cbe">getIndCallMap</a>().begin();</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  PointerAnalysis::CallEdgeMap::const_iterator eiter = pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a1ca30dfa42702071b65d363c76d25cbe">getIndCallMap</a>().end();</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <span class="keywordflow">for</span> (; iter != eiter; iter++)</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  {</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* newcs = iter->first;</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(newcs-><a class="code" href="classSVF_1_1CallBlockNode.html#a285c517dfd7fee5467606663a0fdd035">isIndirectCall</a>() && <span class="stringliteral">"this is not an indirect call?"</span>);</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ac1422cd8b449fdb4a1f7c539364e4c41">PointerAnalysis::FunctionSet</a> & functions = iter->second;</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  <span class="keywordflow">for</span> (PointerAnalysis::FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  {</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = *func_iter;</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <a class="code" href="classSVF_1_1VFG.html#aa1e09df7b3724bf18e450b16735998ab">connectCallerAndCallee</a>(newcs, func, vfEdgesAtIndCallSite);</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  }</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  }</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span> }</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span> </div><div class="line"><a name="l00792"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#aa1e09df7b3724bf18e450b16735998ab"> 792</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#aa1e09df7b3724bf18e450b16735998ab">VFG::connectCallerAndCallee</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* callBlockNode, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee, <a class="code" href="classSVF_1_1VFG.html#a0bdac7337a393ad2e21a33ec1978ca3f">VFGEdgeSetTy</a>& edges)</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span> {</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <a class="code" href="classSVF_1_1PAG.html">PAG</a> * <a class="code" href="classSVF_1_1VFG.html#ad4f5debd234a444516c3a406c464795c">pag</a> = <a class="code" href="classSVF_1_1PAG.html#ac8910c7330638bdf31c23d4cc03ba9c5">PAG::getPAG</a>();</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <a class="code" href="classSVF_1_1ICFG.html">ICFG</a> * icfg = pag-><a class="code" href="classSVF_1_1PAG.html#ad274c5c15ac51cea5d09ad08febe8c14">getICFG</a>();</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> csId = <a class="code" href="classSVF_1_1VFG.html#a9bc8e7ee74b652ed7708e95c16a63728">getCallSiteID</a>(callBlockNode, callee);</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <a class="code" href="classSVF_1_1RetBlockNode.html">RetBlockNode</a>* retBlockNode = icfg-><a class="code" href="classSVF_1_1ICFG.html#a6d66c83cb1656d0f8ec8b8b65a9e9c41">getRetBlockNode</a>(callBlockNode-><a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>());</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="comment">// connect actual and formal param</span></div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  <span class="keywordflow">if</span> (pag-><a class="code" href="classSVF_1_1PAG.html#a157df68295822a17ad07a850a230bae1">hasCallSiteArgsMap</a>(callBlockNode) && pag-><a class="code" href="classSVF_1_1PAG.html#abfb24b0a57ffe59f345a7490ce64e63d">hasFunArgsList</a>(callee))</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  {</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAG.html#a1aedb70211aa31a4741615e611d64397">PAG::PAGNodeList</a>& csArgList = pag-><a class="code" href="classSVF_1_1PAG.html#a4dac2dc4756bf3f84e6fa034a8b906da">getCallSiteArgsList</a>(callBlockNode);</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAG.html#a1aedb70211aa31a4741615e611d64397">PAG::PAGNodeList</a>& funArgList = pag-><a class="code" href="classSVF_1_1PAG.html#ad2ff2e50f8e5234979ba9cacc6a6268c">getFunArgsList</a>(callee);</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  PAG::PAGNodeList::const_iterator csArgIt = csArgList.begin(), csArgEit = csArgList.end();</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  PAG::PAGNodeList::const_iterator funArgIt = funArgList.begin(), funArgEit = funArgList.end();</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  <span class="keywordflow">for</span> (; funArgIt != funArgEit && csArgIt != csArgEit; funArgIt++, csArgIt++)</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  {</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *cs_arg = *csArgIt;</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *fun_arg = *funArgIt;</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  <span class="keywordflow">if</span> (fun_arg-><a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>() && cs_arg-><a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>())</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <a class="code" href="classSVF_1_1VFG.html#acbc1f5ae3b9016b1ce97314a2b8b54c0">connectAParamAndFParam</a>(cs_arg, fun_arg, callBlockNode, csId, edges);</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>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(funArgIt == funArgEit && <span class="stringliteral">"function has more arguments than call site"</span>);</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  <span class="keywordflow">if</span> (callee-><a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->isVarArg())</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  {</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> varFunArg = pag-><a class="code" href="classSVF_1_1PAG.html#aa7b2e9e0b3386e27af8413be4c36f519">getVarargNode</a>(callee);</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* varFunArgNode = pag-><a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(varFunArg);</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <span class="keywordflow">if</span> (varFunArgNode-><a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>())</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  {</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <span class="keywordflow">for</span> (; csArgIt != csArgEit; csArgIt++)</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  {</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *cs_arg = *csArgIt;</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  <span class="keywordflow">if</span> (cs_arg-><a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>())</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  <a class="code" href="classSVF_1_1VFG.html#acbc1f5ae3b9016b1ce97314a2b8b54c0">connectAParamAndFParam</a>(cs_arg, varFunArgNode, callBlockNode, csId, edges);</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  }</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  }</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  }</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  }</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span> </div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  <span class="comment">// connect actual return and formal return</span></div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  <span class="keywordflow">if</span> (pag-><a class="code" href="classSVF_1_1PAG.html#a08f1b7f68a267b6cc5ad9cb3f1efede0">funHasRet</a>(callee) && pag-><a class="code" href="classSVF_1_1PAG.html#a0ed3da89d9cba90888e04969dc43f5a3">callsiteHasRet</a>(retBlockNode))</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  {</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* cs_return = pag-><a class="code" href="classSVF_1_1PAG.html#ae455de4db007a5bebffd3a9c16e0b107">getCallSiteRet</a>(retBlockNode);</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* fun_return = pag-><a class="code" href="classSVF_1_1PAG.html#a838a9fa42e68b5f32853f73fa05a7c09">getFunRet</a>(callee);</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="keywordflow">if</span> (cs_return-><a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>() && fun_return-><a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>())</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  <a class="code" href="classSVF_1_1VFG.html#ab4e8ab307ad6beb46812a60ebd31ae3b">connectFRetAndARet</a>(fun_return, cs_return, csId, edges);</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  }</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span> }</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span> </div><div class="line"><a name="l00842"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a1fff5a365e5aa2d99f07f7f64cc35fac"> 842</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* <a class="code" href="classSVF_1_1VFG.html#a1fff5a365e5aa2d99f07f7f64cc35fac">VFG::getLHSTopLevPtr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* node)<span class="keyword"> const</span></div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span> <span class="keyword"></span>{</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span> </div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrVFGNode.html">AddrVFGNode</a>* addr = SVFUtil::dyn_cast<AddrVFGNode>(node))</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="keywordflow">return</span> addr->getPAGDstNode();</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyVFGNode.html">CopyVFGNode</a>* copy = SVFUtil::dyn_cast<CopyVFGNode>(node))</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <span class="keywordflow">return</span> copy->getPAGDstNode();</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepVFGNode.html">GepVFGNode</a>* gep = SVFUtil::dyn_cast<GepVFGNode>(node))</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  <span class="keywordflow">return</span> gep->getPAGDstNode();</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadVFGNode.html">LoadVFGNode</a>* load = SVFUtil::dyn_cast<LoadVFGNode>(node))</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="keywordflow">return</span> load->getPAGDstNode();</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PHIVFGNode.html">PHIVFGNode</a>* phi = SVFUtil::dyn_cast<PHIVFGNode>(node))</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  <span class="keywordflow">return</span> phi->getRes();</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CmpVFGNode.html">CmpVFGNode</a>* cmp = SVFUtil::dyn_cast<CmpVFGNode>(node))</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  <span class="keywordflow">return</span> cmp->getRes();</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1BinaryOPVFGNode.html">BinaryOPVFGNode</a>* bop = SVFUtil::dyn_cast<BinaryOPVFGNode>(node))</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  <span class="keywordflow">return</span> bop->getRes();</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1UnaryOPVFGNode.html">UnaryOPVFGNode</a>* uop = SVFUtil::dyn_cast<UnaryOPVFGNode>(node))</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  <span class="keywordflow">return</span> uop->getRes();</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* ap = SVFUtil::dyn_cast<ActualParmVFGNode>(node))</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  <span class="keywordflow">return</span> ap->getParam();</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>*fp = SVFUtil::dyn_cast<FormalParmVFGNode>(node))</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <span class="keywordflow">return</span> fp->getParam();</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetVFGNode</a>* ar = SVFUtil::dyn_cast<ActualRetVFGNode>(node))</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  <span class="keywordflow">return</span> ar->getRev();</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetVFGNode</a>* fr = SVFUtil::dyn_cast<FormalRetVFGNode>(node))</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  <span class="keywordflow">return</span> fr->getRet();</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1NullPtrVFGNode.html">NullPtrVFGNode</a>* nullVFG = SVFUtil::dyn_cast<NullPtrVFGNode>(node))</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <span class="keywordflow">return</span> nullVFG->getPAGNode();</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"unexpected node kind!"</span>);</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span> }</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span> </div><div class="line"><a name="l00879"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a8994194bca2edfd9528880390de795ab"> 879</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="classSVF_1_1VFG.html#a8994194bca2edfd9528880390de795ab">VFG::isFunEntryVFGNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* node)<span class="keyword"> const</span></div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span> <span class="keyword"></span>{</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>* fp = SVFUtil::dyn_cast<FormalParmVFGNode>(node))</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  {</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  <span class="keywordflow">return</span> fp->getFun();</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  }</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1InterPHIVFGNode.html">InterPHIVFGNode</a>* phi = SVFUtil::dyn_cast<InterPHIVFGNode>(node))</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  {</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  <span class="keywordflow">if</span>(phi->isFormalParmPHI())</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  <span class="keywordflow">return</span> phi->getFun();</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  }</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span> }</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span> </div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span> </div><div class="line"><a name="l00894"></a><span class="lineno"><a class="line" href="classSVF_1_1StmtVFGNode.html#ab51f462a26bc03cd5e2379be98a4dd3b"> 894</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1StmtVFGNode.html#ab51f462a26bc03cd5e2379be98a4dd3b">StmtVFGNode::getValue</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  <span class="keywordflow">return</span> getPAGEdge()->getValue();</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span> }</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span> </div><div class="line"><a name="l00898"></a><span class="lineno"><a class="line" href="classSVF_1_1CmpVFGNode.html#a166ac2df82ebfcb77d50b71ce573e1eb"> 898</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1CmpVFGNode.html#a166ac2df82ebfcb77d50b71ce573e1eb">CmpVFGNode::getValue</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  <span class="keywordflow">return</span> getRes()->getValue();</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span> }</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span> </div><div class="line"><a name="l00902"></a><span class="lineno"><a class="line" href="classSVF_1_1BinaryOPVFGNode.html#ad4c45bbfd044502106c41ba70f568463"> 902</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1BinaryOPVFGNode.html#ad4c45bbfd044502106c41ba70f568463">BinaryOPVFGNode::getValue</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  <span class="keywordflow">return</span> getRes()->getValue();</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span> }</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span> </div><div class="line"><a name="l00906"></a><span class="lineno"><a class="line" href="classSVF_1_1PHIVFGNode.html#a188a4d3ae95fe01dc59784d076f28aef"> 906</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1PHIVFGNode.html#a188a4d3ae95fe01dc59784d076f28aef">PHIVFGNode::getValue</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  <span class="keywordflow">return</span> getRes()->getValue();</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span> }</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span> </div><div class="line"><a name="l00910"></a><span class="lineno"><a class="line" href="classSVF_1_1ArgumentVFGNode.html#aaf6a78630b0365d50dd7b4394215d3a1"> 910</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ArgumentVFGNode.html#aaf6a78630b0365d50dd7b4394215d3a1">ArgumentVFGNode::getValue</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  <span class="keywordflow">return</span> param->getValue();</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span> }</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span> </div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span> <span class="keyword">namespace </span><a class="code" href="namespacellvm.html">llvm</a></div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span> {</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span> <span class="keyword">template</span><></div><div class="line"><a name="l00920"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html"> 920</a></span> <span class="keyword">struct </span>DOTGraphTraits<<a class="code" href="classSVF_1_1VFG.html">VFG</a>*> : <span class="keyword">public</span> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01PAG_01_5_01_4.html">DOTGraphTraits<PAG*></a></div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span> {</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span> </div><div class="line"><a name="l00923"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#afd7d2c80916a68b53814e6de593bf520"> 923</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#afd7d2c80916a68b53814e6de593bf520">NodeType</a>;</div><div class="line"><a name="l00924"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a0ae94170a4f95bfc7e89d0149ff67882"> 924</a></span>  <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a0ae94170a4f95bfc7e89d0149ff67882">DOTGraphTraits</a>(<span class="keywordtype">bool</span> isSimple = <span class="keyword">false</span>) :</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  DOTGraphTraits<<a class="code" href="classSVF_1_1PAG.html">PAG</a>*>(isSimple)</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  {</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  }</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span> </div><div class="line"><a name="l00930"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#aaedec44d41a6e36c9e5db804e4a005dd"> 930</a></span>  <span class="keyword">static</span> std::string <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#aaedec44d41a6e36c9e5db804e4a005dd">getGraphName</a>(<a class="code" href="classSVF_1_1VFG.html">VFG</a>*)</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  {</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  <span class="keywordflow">return</span> <span class="stringliteral">"VFG"</span>;</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  }</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span> </div><div class="line"><a name="l00935"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a6470ed90c2a601b01715d02cffd90918"> 935</a></span>  std::string <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a6470ed90c2a601b01715d02cffd90918">getNodeLabel</a>(NodeType *node, <a class="code" href="classSVF_1_1VFG.html">VFG</a> *graph)</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>  {</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  <span class="keywordflow">if</span> (isSimple())</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="keywordflow">return</span> getSimpleNodeLabel(node, graph);</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  <span class="keywordflow">return</span> getCompleteNodeLabel(node, graph);</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  }</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span> </div><div class="line"><a name="l00944"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a0159404d5c5a7816a4b679c0f35a546e"> 944</a></span>  <span class="keyword">static</span> std::string <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a0159404d5c5a7816a4b679c0f35a546e">getSimpleNodeLabel</a>(NodeType *node, <a class="code" href="classSVF_1_1VFG.html">VFG</a>*)</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  {</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  std::string str;</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtVFGNode</a>* stmtNode = SVFUtil::dyn_cast<StmtVFGNode>(node))</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  {</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  rawstr << stmtNode->toString();</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  }</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PHIVFGNode.html">PHIVFGNode</a>* tphi = SVFUtil::dyn_cast<PHIVFGNode>(node))</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  {</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  rawstr << tphi->toString();</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  }</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>* fp = SVFUtil::dyn_cast<FormalParmVFGNode>(node))</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  {</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  rawstr << fp->toString();</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  }</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* ap = SVFUtil::dyn_cast<ActualParmVFGNode>(node))</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  {</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  rawstr << ap->toString();</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  }</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetVFGNode</a>* ar = SVFUtil::dyn_cast<ActualRetVFGNode>(node))</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  {</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  rawstr << ar->toString();</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  }</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetVFGNode</a>* fr = SVFUtil::dyn_cast<FormalRetVFGNode>(node))</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  {</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  rawstr << fr->toString();</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  }</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<NullPtrVFGNode>(node))</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  {</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  rawstr << <span class="stringliteral">"NullPtr"</span>;</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  }</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1BinaryOPVFGNode.html">BinaryOPVFGNode</a>* bop = SVFUtil::dyn_cast<BinaryOPVFGNode>(node))</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>  {</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  rawstr << bop->toString();</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  }</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1UnaryOPVFGNode.html">UnaryOPVFGNode</a>* uop = SVFUtil::dyn_cast<UnaryOPVFGNode>(node))</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  {</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  rawstr << uop->toString();</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  }</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1CmpVFGNode.html">CmpVFGNode</a>* cmp = SVFUtil::dyn_cast<CmpVFGNode>(node))</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  {</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  rawstr << cmp->toString();;</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  }</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"what else kinds of nodes do we have??"</span>);</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span> </div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  }</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span> </div><div class="line"><a name="l00995"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a6ced6b5b50d920fb47c4334693fea86c"> 995</a></span>  <span class="keyword">static</span> std::string <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a6ced6b5b50d920fb47c4334693fea86c">getCompleteNodeLabel</a>(NodeType *node, <a class="code" href="classSVF_1_1VFG.html">VFG</a>*)</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  {</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span> </div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  std::string str;</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtVFGNode</a>* stmtNode = SVFUtil::dyn_cast<StmtVFGNode>(node))</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  {</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  rawstr << stmtNode->toString();</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  }</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1BinaryOPVFGNode.html">BinaryOPVFGNode</a>* bop = SVFUtil::dyn_cast<BinaryOPVFGNode>(node))</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  {</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  rawstr << bop->toString();</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  }</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1UnaryOPVFGNode.html">UnaryOPVFGNode</a>* uop = SVFUtil::dyn_cast<UnaryOPVFGNode>(node))</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>  {</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>  rawstr << uop->toString();</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>  }</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1CmpVFGNode.html">CmpVFGNode</a>* cmp = SVFUtil::dyn_cast<CmpVFGNode>(node))</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  {</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>  rawstr << cmp->toString();</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>  }</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PHIVFGNode.html">PHIVFGNode</a>* phi = SVFUtil::dyn_cast<PHIVFGNode>(node))</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  {</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  rawstr << phi->toString();</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>  }</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>* fp = SVFUtil::dyn_cast<FormalParmVFGNode>(node))</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  {</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>  rawstr << fp->toString();</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>  }</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* ap = SVFUtil::dyn_cast<ActualParmVFGNode>(node))</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  {</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  rawstr << ap->toString();</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  }</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1NullPtrVFGNode.html">NullPtrVFGNode</a>* nptr = SVFUtil::dyn_cast<NullPtrVFGNode>(node))</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  {</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  rawstr << nptr->toString();</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  }</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetVFGNode</a>* ar = SVFUtil::dyn_cast<ActualRetVFGNode>(node))</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  {</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  rawstr << ar->toString();</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  }</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetVFGNode</a>* fr = SVFUtil::dyn_cast<FormalRetVFGNode>(node))</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  {</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  rawstr << fr->toString();</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  }</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRSVFGNode.html">MRSVFGNode</a>* mr = SVFUtil::dyn_cast<MRSVFGNode>(node))</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  {</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  rawstr << mr->toString();</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  }</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"what else kinds of nodes do we have??"</span>);</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> </div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  }</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> </div><div class="line"><a name="l01050"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a57d4a186a0319b73d69752564bf25b2a"> 1050</a></span>  <span class="keyword">static</span> std::string <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a57d4a186a0319b73d69752564bf25b2a">getNodeAttributes</a>(NodeType *node, <a class="code" href="classSVF_1_1VFG.html">VFG</a>*)</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  {</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>  std::string str;</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> </div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtVFGNode</a>* stmtNode = SVFUtil::dyn_cast<StmtVFGNode>(node))</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  {</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGEdge.html">PAGEdge</a>* edge = stmtNode->getPAGEdge();</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  <span class="keywordflow">if</span> (SVFUtil::isa<AddrPE>(edge))</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  {</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  rawstr << <span class="stringliteral">"color=green"</span>;</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  }</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<CopyPE>(edge))</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  {</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  rawstr << <span class="stringliteral">"color=black"</span>;</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  }</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<RetPE>(edge))</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  {</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  rawstr << <span class="stringliteral">"color=black,style=dotted"</span>;</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  }</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<GepPE>(edge))</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  {</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  rawstr << <span class="stringliteral">"color=purple"</span>;</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  }</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<StorePE>(edge))</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  {</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  rawstr << <span class="stringliteral">"color=blue"</span>;</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>  }</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<LoadPE>(edge))</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>  {</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>  rawstr << <span class="stringliteral">"color=red"</span>;</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  }</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  {</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(0 && <span class="stringliteral">"No such kind edge!!"</span>);</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  }</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  rawstr << <span class="stringliteral">""</span>;</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  }</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<CmpVFGNode>(node))</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>  {</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  rawstr << <span class="stringliteral">"color=grey"</span>;</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>  }</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<BinaryOPVFGNode>(node))</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  {</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  rawstr << <span class="stringliteral">"color=grey"</span>;</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  }</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<UnaryOPVFGNode>(node))</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>  {</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>  rawstr << <span class="stringliteral">"color=grey"</span>;</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>  }</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<PHIVFGNode>(node))</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  {</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  rawstr << <span class="stringliteral">"color=black"</span>;</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  }</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<NullPtrVFGNode>(node))</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  {</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  rawstr << <span class="stringliteral">"color=grey"</span>;</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  }</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<FormalParmVFGNode>(node))</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  {</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  rawstr << <span class="stringliteral">"color=yellow,penwidth=2"</span>;</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>  }</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<ActualParmVFGNode>(node))</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  {</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>  rawstr << <span class="stringliteral">"color=yellow,penwidth=2"</span>;</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  }</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<ActualRetVFGNode>(node))</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  {</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  rawstr << <span class="stringliteral">"color=yellow,penwidth=2"</span>;</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>  }</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<FormalRetVFGNode>(node))</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>  {</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>  rawstr << <span class="stringliteral">"color=yellow,penwidth=2"</span>;</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  }</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<MRSVFGNode>(node))</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  {</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  rawstr << <span class="stringliteral">"color=orange,penwidth=2"</span>;</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  }</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"no such kind of node!!"</span>);</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> </div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>  rawstr << <span class="stringliteral">""</span>;</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> </div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  }</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> </div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  <span class="keyword">template</span><<span class="keyword">class</span> EdgeIter></div><div class="line"><a name="l01137"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a646a1023dab5169a73c8ea54e860c78b"> 1137</a></span>  <span class="keyword">static</span> std::string <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a646a1023dab5169a73c8ea54e860c78b">getEdgeAttributes</a>(NodeType*, EdgeIter EI, <a class="code" href="classSVF_1_1VFG.html">VFG</a>*)</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  {</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = *(EI.getCurrent());</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge && <span class="stringliteral">"No edge found!!"</span>);</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>  <span class="keywordflow">if</span> (SVFUtil::isa<DirectSVFGEdge>(edge))</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  {</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  <span class="keywordflow">if</span> (SVFUtil::isa<CallDirSVFGEdge>(edge))</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=solid,color=red"</span>;</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<RetDirSVFGEdge>(edge))</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=solid,color=blue"</span>;</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=solid"</span>;</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>  }</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<IndirectSVFGEdge>(edge))</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>  {</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  <span class="keywordflow">if</span> (SVFUtil::isa<CallIndSVFGEdge>(edge))</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=dashed,color=red"</span>;</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<RetIndSVFGEdge>(edge))</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=dashed,color=blue"</span>;</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=dashed"</span>;</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  }</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  {</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"what else edge we have?"</span>);</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  }</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  }</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> </div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>  <span class="keyword">template</span><<span class="keyword">class</span> EdgeIter></div><div class="line"><a name="l01167"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#af794115d33a8ea6f7f2e2c7ac5dd4c80"> 1167</a></span>  <span class="keyword">static</span> std::string <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#af794115d33a8ea6f7f2e2c7ac5dd4c80">getEdgeSourceLabel</a>(NodeType*, EdgeIter EI)</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>  {</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = *(EI.getCurrent());</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge && <span class="stringliteral">"No edge found!!"</span>);</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> </div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>  std::string str;</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1CallDirSVFGEdge.html">CallDirSVFGEdge</a>* dirCall = SVFUtil::dyn_cast<CallDirSVFGEdge>(edge))</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  rawstr << dirCall->getCallSiteId();</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1RetDirSVFGEdge.html">RetDirSVFGEdge</a>* dirRet = SVFUtil::dyn_cast<RetDirSVFGEdge>(edge))</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  rawstr << dirRet->getCallSiteId();</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> </div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>  }</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> };</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> } <span class="comment">// End namespace llvm</span></div><div class="ttc" id="classSVF_1_1PAG_html_aa9479778e9fe166b17bb765a7a1668a2"><div class="ttname"><a href="classSVF_1_1PAG.html#aa9479778e9fe166b17bb765a7a1668a2">SVF::PAG::BinaryNodeMap</a></div><div class="ttdeci">Map< const PAGNode *, BinaryOPList > BinaryNodeMap</div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00063">PAG.h:63</a></div></div>
|
|
70
70
|
<div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
|
|
71
71
|
<div class="ttc" id="classSVF_1_1VFG_html_a84cf5facb15e1d598c2527fba0c7634d"><div class="ttname"><a href="classSVF_1_1VFG.html#a84cf5facb15e1d598c2527fba0c7634d">SVF::VFG::addVFGEdge</a></div><div class="ttdeci">bool addVFGEdge(VFGEdge *edge)</div><div class="ttdoc">Add VFG edge. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00326">VFG.h:326</a></div></div>
|
|
72
72
|
<div class="ttc" id="classSVF_1_1VFG_html"><div class="ttname"><a href="classSVF_1_1VFG.html">SVF::VFG</a></div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00050">VFG.h:50</a></div></div>
|
|
@@ -87,6 +87,7 @@ $(function() {
|
|
|
87
87
|
<div class="ttc" id="classSVF_1_1DirectSVFGEdge_html_aa8d70214eb0242c3f2baaa506c12852c"><div class="ttname"><a href="classSVF_1_1DirectSVFGEdge.html#aa8d70214eb0242c3f2baaa506c12852c">SVF::DirectSVFGEdge::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00249">VFG.cpp:249</a></div></div>
|
|
88
88
|
<div class="ttc" id="classSVF_1_1PAG_html_ad274c5c15ac51cea5d09ad08febe8c14"><div class="ttname"><a href="classSVF_1_1PAG.html#ad274c5c15ac51cea5d09ad08febe8c14">SVF::PAG::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00135">PAG.h:135</a></div></div>
|
|
89
89
|
<div class="ttc" id="classSVF_1_1VFG_html_abf966182c28f0521dcd161aa299e453d"><div class="ttname"><a href="classSVF_1_1VFG.html#abf966182c28f0521dcd161aa299e453d">SVF::VFG::RetPESet</a></div><div class="ttdeci">FormalRetVFGNode::RetPESet RetPESet</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00075">VFG.h:75</a></div></div>
|
|
90
|
+
<div class="ttc" id="classSVF_1_1StmtVFGNode_html_ab51f462a26bc03cd5e2379be98a4dd3b"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#ab51f462a26bc03cd5e2379be98a4dd3b">SVF::StmtVFGNode::getValue</a></div><div class="ttdeci">const Value * getValue() const override</div><div class="ttdoc">Return the corresponding LLVM value, if possible, nullptr otherwise. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00894">VFG.cpp:894</a></div></div>
|
|
90
91
|
<div class="ttc" id="classSVF_1_1VFG_html_a0bdac7337a393ad2e21a33ec1978ca3f"><div class="ttname"><a href="classSVF_1_1VFG.html#a0bdac7337a393ad2e21a33ec1978ca3f">SVF::VFG::VFGEdgeSetTy</a></div><div class="ttdeci">VFGEdge::VFGEdgeSetTy VFGEdgeSetTy</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00076">VFG.h:76</a></div></div>
|
|
91
92
|
<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#l00018">MTAResultValidator.h:18</a></div></div>
|
|
92
93
|
<div class="ttc" id="classSVF_1_1PAGEdge_html_a79080505b4744aa8806b55215ac2b0f6a1070b34fd19259725d752aa3b5adc73b"><div class="ttname"><a href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a1070b34fd19259725d752aa3b5adc73b">SVF::PAGEdge::ThreadFork</a></div><div class="ttdef"><b>Definition:</b> <a href="PAGEdge_8h_source.html#l00056">PAGEdge.h:56</a></div></div>
|
|
@@ -107,12 +108,13 @@ $(function() {
|
|
|
107
108
|
<div class="ttc" id="classSVF_1_1VFGEdge_html_a156ae6a8b3a033f505c18c6b162e7cf5a8383c27feab3f1acc67cacef9744c04a"><div class="ttname"><a href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a8383c27feab3f1acc67cacef9744c04a">SVF::VFGEdge::CallDirVF</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00055">VFGEdge.h:55</a></div></div>
|
|
108
109
|
<div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00233">BasicTypes.h:233</a></div></div>
|
|
109
110
|
<div class="ttc" id="classSVF_1_1IntraDirSVFGEdge_html"><div class="ttname"><a href="classSVF_1_1IntraDirSVFGEdge.html">SVF::IntraDirSVFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00176">VFGEdge.h:176</a></div></div>
|
|
111
|
+
<div class="ttc" id="classSVF_1_1CmpVFGNode_html_a166ac2df82ebfcb77d50b71ce573e1eb"><div class="ttname"><a href="classSVF_1_1CmpVFGNode.html#a166ac2df82ebfcb77d50b71ce573e1eb">SVF::CmpVFGNode::getValue</a></div><div class="ttdeci">const Value * getValue() const override</div><div class="ttdoc">Return the corresponding LLVM value, if possible, nullptr otherwise. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00898">VFG.cpp:898</a></div></div>
|
|
110
112
|
<div class="ttc" id="classSVF_1_1GepVFGNode_html_ad27376633c939952878d5d73621ec638"><div class="ttname"><a href="classSVF_1_1GepVFGNode.html#ad27376633c939952878d5d73621ec638">SVF::GepVFGNode::toString</a></div><div class="ttdeci">const std::string toString() const override</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00125">VFG.cpp:125</a></div></div>
|
|
111
113
|
<div class="ttc" id="classSVF_1_1CopyVFGNode_html"><div class="ttname"><a href="classSVF_1_1CopyVFGNode.html">SVF::CopyVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00275">VFGNode.h:275</a></div></div>
|
|
112
114
|
<div class="ttc" id="classSVF_1_1GenericNode_html_a0931220d7a38e03f206cbdc6465d32ad"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a0931220d7a38e03f206cbdc6465d32ad">SVF::GenericNode::hasOutgoingEdge</a></div><div class="ttdeci">bool hasOutgoingEdge() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00193">GenericGraph.h:193</a></div></div>
|
|
113
115
|
<div class="ttc" id="classSVF_1_1PHIVFGNode_html"><div class="ttname"><a href="classSVF_1_1PHIVFGNode.html">SVF::PHIVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00572">VFGNode.h:572</a></div></div>
|
|
114
116
|
<div class="ttc" id="classSVF_1_1Options_html_a153d42a480ef1763ad59fd7258ac3ac5"><div class="ttname"><a href="classSVF_1_1Options.html#a153d42a480ef1763ad59fd7258ac3ac5">SVF::Options::EnableThreadCallGraph</a></div><div class="ttdeci">static const llvm::cl::opt< bool > EnableThreadCallGraph</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00135">Options.h:135</a></div></div>
|
|
115
|
-
<div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4_html_a0ae94170a4f95bfc7e89d0149ff67882"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a0ae94170a4f95bfc7e89d0149ff67882">llvm::DOTGraphTraits< VFG * >::DOTGraphTraits</a></div><div class="ttdeci">DOTGraphTraits(bool isSimple=false)</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#
|
|
117
|
+
<div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4_html_a0ae94170a4f95bfc7e89d0149ff67882"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a0ae94170a4f95bfc7e89d0149ff67882">llvm::DOTGraphTraits< VFG * >::DOTGraphTraits</a></div><div class="ttdeci">DOTGraphTraits(bool isSimple=false)</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00924">VFG.cpp:924</a></div></div>
|
|
116
118
|
<div class="ttc" id="classSVF_1_1VFG_html_aee3d0c4ed32bde425f33281f248b7dd2"><div class="ttname"><a href="classSVF_1_1VFG.html#aee3d0c4ed32bde425f33281f248b7dd2">SVF::VFG::dump</a></div><div class="ttdeci">void dump(const std::string &file, bool simple=false)</div><div class="ttdoc">Dump graph into dot file. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00756">VFG.cpp:756</a></div></div>
|
|
117
119
|
<div class="ttc" id="VFG_8h_html"><div class="ttname"><a href="VFG_8h.html">VFG.h</a></div></div>
|
|
118
120
|
<div class="ttc" id="classSVF_1_1GepVFGNode_html"><div class="ttname"><a href="classSVF_1_1GepVFGNode.html">SVF::GepVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00533">VFGNode.h:533</a></div></div>
|
|
@@ -129,7 +131,7 @@ $(function() {
|
|
|
129
131
|
<div class="ttc" id="classSVF_1_1VFGEdge_html_a156ae6a8b3a033f505c18c6b162e7cf5"><div class="ttname"><a href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5">SVF::VFGEdge::VFGEdgeK</a></div><div class="ttdeci">VFGEdgeK</div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00051">VFGEdge.h:51</a></div></div>
|
|
130
132
|
<div class="ttc" id="classSVF_1_1AddrVFGNode_html_ac26fbce400355f43fdc22ad88a8d9067"><div class="ttname"><a href="classSVF_1_1AddrVFGNode.html#ac26fbce400355f43fdc22ad88a8d9067">SVF::AddrVFGNode::toString</a></div><div class="ttdeci">const std::string toString() const override</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00166">VFG.cpp:166</a></div></div>
|
|
131
133
|
<div class="ttc" id="classSVF_1_1VFGEdge_html_a30c07e8afb0853d4b46cfa722d912650"><div class="ttname"><a href="classSVF_1_1VFGEdge.html#a30c07e8afb0853d4b46cfa722d912650">SVF::VFGEdge::makeEdgeFlagWithInvokeID</a></div><div class="ttdeci">static GEdgeFlag makeEdgeFlagWithInvokeID(GEdgeKind k, CallSiteID cs)</div><div class="ttdoc">Compute the unique edgeFlag value from edge kind and CallSiteID. </div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00120">VFGEdge.h:120</a></div></div>
|
|
132
|
-
<div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4_html_a57d4a186a0319b73d69752564bf25b2a"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a57d4a186a0319b73d69752564bf25b2a">llvm::DOTGraphTraits< VFG * >::getNodeAttributes</a></div><div class="ttdeci">static std::string getNodeAttributes(NodeType *node, VFG *)</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#
|
|
134
|
+
<div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4_html_a57d4a186a0319b73d69752564bf25b2a"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a57d4a186a0319b73d69752564bf25b2a">llvm::DOTGraphTraits< VFG * >::getNodeAttributes</a></div><div class="ttdeci">static std::string getNodeAttributes(NodeType *node, VFG *)</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l01050">VFG.cpp:1050</a></div></div>
|
|
133
135
|
<div class="ttc" id="classSVF_1_1FormalRetVFGNode_html_a0155a71f08dfb1fb43f054084b2380c6"><div class="ttname"><a href="classSVF_1_1FormalRetVFGNode.html#a0155a71f08dfb1fb43f054084b2380c6">SVF::FormalRetVFGNode::FormalRetVFGNode</a></div><div class="ttdeci">FormalRetVFGNode()</div><div class="ttdoc">place holder </div></div>
|
|
134
136
|
<div class="ttc" id="classSVF_1_1PHIVFGNode_html_add1ed5dfc7fbb095e2bdb7ff1e2658ef"><div class="ttname"><a href="classSVF_1_1PHIVFGNode.html#add1ed5dfc7fbb095e2bdb7ff1e2658ef">SVF::PHIVFGNode::PHIVFGNode</a></div><div class="ttdeci">PHIVFGNode(NodeID id, const PAGNode *r, VFGNodeK k=TPhi)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00286">VFG.cpp:286</a></div></div>
|
|
135
137
|
<div class="ttc" id="classSVF_1_1PAGNode_html_aa311aaac0f8fbb8650fac9d7662ec795"><div class="ttname"><a href="classSVF_1_1PAGNode.html#aa311aaac0f8fbb8650fac9d7662ec795">SVF::PAGNode::hasOutgoingEdges</a></div><div class="ttdeci">bool hasOutgoingEdges(PAGEdge::PEDGEK kind) const</div><div class="ttdoc">Has outgoing PAG edges. </div><div class="ttdef"><b>Definition:</b> <a href="PAGNode_8h_source.html#l00210">PAGNode.h:210</a></div></div>
|
|
@@ -165,13 +167,13 @@ $(function() {
|
|
|
165
167
|
<div class="ttc" id="classSVF_1_1GenericEdge_html_aeaa31a2c8479e831b36ce2e2582ceb86"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">SVF::GenericEdge::getDstNode</a></div><div class="ttdeci">NodeType * getDstNode() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00089">GenericGraph.h:89</a></div></div>
|
|
166
168
|
<div class="ttc" id="classSVF_1_1VFG_html_a8994194bca2edfd9528880390de795ab"><div class="ttname"><a href="classSVF_1_1VFG.html#a8994194bca2edfd9528880390de795ab">SVF::VFG::isFunEntryVFGNode</a></div><div class="ttdeci">const SVFFunction * isFunEntryVFGNode(const VFGNode *node) const</div><div class="ttdoc">Whether a node is function entry VFGNode. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00879">VFG.cpp:879</a></div></div>
|
|
167
169
|
<div class="ttc" id="classSVF_1_1VFGNode_html_a0342b5a6f270f4ff0e8e2a9b0082c6c5"><div class="ttname"><a href="classSVF_1_1VFGNode.html#a0342b5a6f270f4ff0e8e2a9b0082c6c5">SVF::VFGNode::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00040">VFG.cpp:40</a></div></div>
|
|
168
|
-
<div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4_html_aaedec44d41a6e36c9e5db804e4a005dd"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#aaedec44d41a6e36c9e5db804e4a005dd">llvm::DOTGraphTraits< VFG * >::getGraphName</a></div><div class="ttdeci">static std::string getGraphName(VFG *)</div><div class="ttdoc">Return name of the graph. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#
|
|
170
|
+
<div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4_html_aaedec44d41a6e36c9e5db804e4a005dd"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#aaedec44d41a6e36c9e5db804e4a005dd">llvm::DOTGraphTraits< VFG * >::getGraphName</a></div><div class="ttdeci">static std::string getGraphName(VFG *)</div><div class="ttdoc">Return name of the graph. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00930">VFG.cpp:930</a></div></div>
|
|
169
171
|
<div class="ttc" id="classSVF_1_1PAGNode_html_ac8d69ac849b697663b19db76b92053bc"><div class="ttname"><a href="classSVF_1_1PAGNode.html#ac8d69ac849b697663b19db76b92053bc">SVF::PAGNode::getIncomingEdgesEnd</a></div><div class="ttdeci">PAGEdge::PAGEdgeSetTy::iterator getIncomingEdgesEnd(PAGEdge::PEDGEK kind) const</div><div class="ttdoc">Get incoming PAGEdge iterator. </div><div class="ttdef"><b>Definition:</b> <a href="PAGNode_8h_source.html#l00202">PAGNode.h:202</a></div></div>
|
|
170
172
|
<div class="ttc" id="classSVF_1_1PTACallGraph_html"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html">SVF::PTACallGraph</a></div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00218">PTACallGraph.h:218</a></div></div>
|
|
171
173
|
<div class="ttc" id="classSVF_1_1VFGEdge_html_a8f4bec008af7cd1a89870715eaa91a7b"><div class="ttname"><a href="classSVF_1_1VFGEdge.html#a8f4bec008af7cd1a89870715eaa91a7b">SVF::VFGEdge::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00242">VFG.cpp:242</a></div></div>
|
|
172
174
|
<div class="ttc" id="classSVF_1_1PAG_html_a0ed3da89d9cba90888e04969dc43f5a3"><div class="ttname"><a href="classSVF_1_1PAG.html#a0ed3da89d9cba90888e04969dc43f5a3">SVF::PAG::callsiteHasRet</a></div><div class="ttdeci">bool callsiteHasRet(const RetBlockNode *cs) const</div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00416">PAG.h:416</a></div></div>
|
|
173
175
|
<div class="ttc" id="classSVF_1_1PAG_html_a667b240e083d720b486a47308e36ae55"><div class="ttname"><a href="classSVF_1_1PAG.html#a667b240e083d720b486a47308e36ae55">SVF::PAG::getCmpNodeMap</a></div><div class="ttdeci">CmpNodeMap & getCmpNodeMap()</div><div class="ttdoc">Get all phi copy edges. </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00330">PAG.h:330</a></div></div>
|
|
174
|
-
<div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4_html_a6ced6b5b50d920fb47c4334693fea86c"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a6ced6b5b50d920fb47c4334693fea86c">llvm::DOTGraphTraits< VFG * >::getCompleteNodeLabel</a></div><div class="ttdeci">static std::string getCompleteNodeLabel(NodeType *node, VFG *)</div><div class="ttdoc">Return label of a VFG node with MemSSA information. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#
|
|
176
|
+
<div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4_html_a6ced6b5b50d920fb47c4334693fea86c"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a6ced6b5b50d920fb47c4334693fea86c">llvm::DOTGraphTraits< VFG * >::getCompleteNodeLabel</a></div><div class="ttdeci">static std::string getCompleteNodeLabel(NodeType *node, VFG *)</div><div class="ttdoc">Return label of a VFG node with MemSSA information. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00995">VFG.cpp:995</a></div></div>
|
|
175
177
|
<div class="ttc" id="namespaceSVF_html_a726981481ac082dcda3e4921416b65a0"><div class="ttname"><a href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">SVF::raw_string_ostream</a></div><div class="ttdeci">llvm::raw_string_ostream raw_string_ostream</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
|
|
176
178
|
<div class="ttc" id="classSVF_1_1StoreVFGNode_html_aba7e8b8329caf412a55f5880f68414fe"><div class="ttname"><a href="classSVF_1_1StoreVFGNode.html#aba7e8b8329caf412a55f5880f68414fe">SVF::StoreVFGNode::toString</a></div><div class="ttdeci">const std::string toString() const override</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00064">VFG.cpp:64</a></div></div>
|
|
177
179
|
<div class="ttc" id="classSVF_1_1VFG_html_ab4e8ab307ad6beb46812a60ebd31ae3b"><div class="ttname"><a href="classSVF_1_1VFG.html#ab4e8ab307ad6beb46812a60ebd31ae3b">SVF::VFG::connectFRetAndARet</a></div><div class="ttdeci">virtual void connectFRetAndARet(const PAGNode *funReturn, const PAGNode *csReturn, CallSiteID csId, VFGEdgeSetTy &edges)</div><div class="ttdoc">Connect formal-ret and actual ret. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00381">VFG.h:381</a></div></div>
|
|
@@ -190,12 +192,12 @@ $(function() {
|
|
|
190
192
|
<div class="ttc" id="namespaceSVF_html_a03d88a0302bcd253387690f13f693f64"><div class="ttname"><a href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">SVF::CallSiteID</a></div><div class="ttdeci">unsigned CallSiteID</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00083">SVFBasicTypes.h:83</a></div></div>
|
|
191
193
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ac1422cd8b449fdb4a1f7c539364e4c41"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ac1422cd8b449fdb4a1f7c539364e4c41">SVF::PointerAnalysis::FunctionSet</a></div><div class="ttdeci">Set< const SVFFunction * > FunctionSet</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00110">PointerAnalysis.h:110</a></div></div>
|
|
192
194
|
<div class="ttc" id="classSVF_1_1VFG_html_a9bc8e7ee74b652ed7708e95c16a63728"><div class="ttname"><a href="classSVF_1_1VFG.html#a9bc8e7ee74b652ed7708e95c16a63728">SVF::VFG::getCallSiteID</a></div><div class="ttdeci">CallSiteID getCallSiteID(const CallBlockNode *cs, const SVFFunction *func) const</div><div class="ttdoc">Get callsite given a callsiteID. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00176">VFG.h:176</a></div></div>
|
|
193
|
-
<div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4_html_a0159404d5c5a7816a4b679c0f35a546e"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a0159404d5c5a7816a4b679c0f35a546e">llvm::DOTGraphTraits< VFG * >::getSimpleNodeLabel</a></div><div class="ttdeci">static std::string getSimpleNodeLabel(NodeType *node, VFG *)</div><div class="ttdoc">Return label of a VFG node without MemSSA information. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#
|
|
195
|
+
<div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4_html_a0159404d5c5a7816a4b679c0f35a546e"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a0159404d5c5a7816a4b679c0f35a546e">llvm::DOTGraphTraits< VFG * >::getSimpleNodeLabel</a></div><div class="ttdeci">static std::string getSimpleNodeLabel(NodeType *node, VFG *)</div><div class="ttdoc">Return label of a VFG node without MemSSA information. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00944">VFG.cpp:944</a></div></div>
|
|
194
196
|
<div class="ttc" id="classSVF_1_1VFG_html_a01b8694a5ab7acf8df0213225550791b"><div class="ttname"><a href="classSVF_1_1VFG.html#a01b8694a5ab7acf8df0213225550791b">SVF::VFG::getActualParmVFGNode</a></div><div class="ttdeci">ActualParmVFGNode * getActualParmVFGNode(const PAGNode *aparm, const CallBlockNode *cs) const</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00227">VFG.h:227</a></div></div>
|
|
195
197
|
<div class="ttc" id="classSVF_1_1PAG_html_ae455de4db007a5bebffd3a9c16e0b107"><div class="ttname"><a href="classSVF_1_1PAG.html#ae455de4db007a5bebffd3a9c16e0b107">SVF::PAG::getCallSiteRet</a></div><div class="ttdeci">const PAGNode * getCallSiteRet(const RetBlockNode *cs) const</div><div class="ttdoc">Get callsite return. </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00410">PAG.h:410</a></div></div>
|
|
196
198
|
<div class="ttc" id="classSVF_1_1VFG_html_a88f6468b9b43bbb06ef757d884580a50"><div class="ttname"><a href="classSVF_1_1VFG.html#a88f6468b9b43bbb06ef757d884580a50">SVF::VFG::hasBlackHoleConstObjAddrAsDef</a></div><div class="ttdeci">bool hasBlackHoleConstObjAddrAsDef(const PAGNode *pagNode) const</div><div class="ttdoc">Whether a PAGNode has a blackhole or const object as its definition. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00257">VFG.h:257</a></div></div>
|
|
197
199
|
<div class="ttc" id="classSVF_1_1VFGNode_html_a99a54cf322b0eec3a1ef109ce5f2db75"><div class="ttname"><a href="classSVF_1_1VFGNode.html#a99a54cf322b0eec3a1ef109ce5f2db75">SVF::VFGNode::VFGNodeK</a></div><div class="ttdeci">VFGNodeK</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00053">VFGNode.h:53</a></div></div>
|
|
198
|
-
<div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4_html_afd7d2c80916a68b53814e6de593bf520"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#afd7d2c80916a68b53814e6de593bf520">llvm::DOTGraphTraits< VFG * >::NodeType</a></div><div class="ttdeci">VFGNode NodeType</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#
|
|
200
|
+
<div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4_html_afd7d2c80916a68b53814e6de593bf520"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#afd7d2c80916a68b53814e6de593bf520">llvm::DOTGraphTraits< VFG * >::NodeType</a></div><div class="ttdeci">VFGNode NodeType</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00923">VFG.cpp:923</a></div></div>
|
|
199
201
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a1ca30dfa42702071b65d363c76d25cbe"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a1ca30dfa42702071b65d363c76d25cbe">SVF::PointerAnalysis::getIndCallMap</a></div><div class="ttdeci">CallEdgeMap & getIndCallMap()</div><div class="ttdoc">Get callees from an indirect callsite. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00391">PointerAnalysis.h:391</a></div></div>
|
|
200
202
|
<div class="ttc" id="classSVF_1_1IntraPHIVFGNode_html_a145413d87e9174b5eb70b871b9dfa13e"><div class="ttname"><a href="classSVF_1_1IntraPHIVFGNode.html#a145413d87e9174b5eb70b871b9dfa13e">SVF::IntraPHIVFGNode::toString</a></div><div class="ttdeci">const std::string toString() const override</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00150">VFG.cpp:150</a></div></div>
|
|
201
203
|
<div class="ttc" id="classSVF_1_1LoadVFGNode_html"><div class="ttname"><a href="classSVF_1_1LoadVFGNode.html">SVF::LoadVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00197">VFGNode.h:197</a></div></div>
|
|
@@ -225,7 +227,7 @@ $(function() {
|
|
|
225
227
|
<div class="ttc" id="classSVF_1_1PAGNode_html"><div class="ttname"><a href="classSVF_1_1PAGNode.html">SVF::PAGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="PAGNode_8h_source.html#l00046">PAGNode.h:46</a></div></div>
|
|
226
228
|
<div class="ttc" id="classSVF_1_1VFG_html_ae1348fd6d196ee8a6bd8d98022464d50"><div class="ttname"><a href="classSVF_1_1VFG.html#ae1348fd6d196ee8a6bd8d98022464d50">SVF::VFG::getIntraVFGEdge</a></div><div class="ttdeci">VFGEdge * getIntraVFGEdge(const VFGNode *src, const VFGNode *dst, VFGEdge::VFGEdgeK kind)</div><div class="ttdoc">Get a SVFG edge according to src and dst. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00747">VFG.cpp:747</a></div></div>
|
|
227
229
|
<div class="ttc" id="classSVF_1_1VFG_html_abd05b599b383c759455aff99963b7b41"><div class="ttname"><a href="classSVF_1_1VFG.html#abd05b599b383c759455aff99963b7b41">SVF::VFG::addInterEdgeFromFRToAR</a></div><div class="ttdeci">VFGEdge * addInterEdgeFromFRToAR(FormalRetVFGNode *src, ActualRetVFGNode *dst, CallSiteID csId)</div><div class="ttdoc">Add inter VF edge from callee return to callsite receive parameter. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00353">VFG.h:353</a></div></div>
|
|
228
|
-
<div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4_html_a646a1023dab5169a73c8ea54e860c78b"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a646a1023dab5169a73c8ea54e860c78b">llvm::DOTGraphTraits< VFG * >::getEdgeAttributes</a></div><div class="ttdeci">static std::string getEdgeAttributes(NodeType *, EdgeIter EI, VFG *)</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#
|
|
230
|
+
<div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4_html_a646a1023dab5169a73c8ea54e860c78b"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a646a1023dab5169a73c8ea54e860c78b">llvm::DOTGraphTraits< VFG * >::getEdgeAttributes</a></div><div class="ttdeci">static std::string getEdgeAttributes(NodeType *, EdgeIter EI, VFG *)</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l01137">VFG.cpp:1137</a></div></div>
|
|
229
231
|
<div class="ttc" id="classSVF_1_1CallBlockNode_html_a285c517dfd7fee5467606663a0fdd035"><div class="ttname"><a href="classSVF_1_1CallBlockNode.html#a285c517dfd7fee5467606663a0fdd035">SVF::CallBlockNode::isIndirectCall</a></div><div class="ttdeci">bool isIndirectCall() const</div><div class="ttdoc">Return true if this is an indirect call. </div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00412">ICFGNode.h:412</a></div></div>
|
|
230
232
|
<div class="ttc" id="classSVF_1_1UnaryOPVFGNode_html_ab748bb83004550944c6abca7150aec14"><div class="ttname"><a href="classSVF_1_1UnaryOPVFGNode.html#ab748bb83004550944c6abca7150aec14">SVF::UnaryOPVFGNode::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00110">VFG.cpp:110</a></div></div>
|
|
231
233
|
<div class="ttc" id="classSVF_1_1PAGEdge_html_a79080505b4744aa8806b55215ac2b0f6a99fe431c7a635d39b5558d1048a94c05"><div class="ttname"><a href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6a99fe431c7a635d39b5558d1048a94c05">SVF::PAGEdge::Ret</a></div><div class="ttdef"><b>Definition:</b> <a href="PAGEdge_8h_source.html#l00056">PAGEdge.h:56</a></div></div>
|
|
@@ -235,12 +237,13 @@ $(function() {
|
|
|
235
237
|
<div class="ttc" id="classSVF_1_1PAGEdge_html_a79080505b4744aa8806b55215ac2b0f6af447071283803d3aee763fe20783f4a4"><div class="ttname"><a href="classSVF_1_1PAGEdge.html#a79080505b4744aa8806b55215ac2b0f6af447071283803d3aee763fe20783f4a4">SVF::PAGEdge::Copy</a></div><div class="ttdef"><b>Definition:</b> <a href="PAGEdge_8h_source.html#l00056">PAGEdge.h:56</a></div></div>
|
|
236
238
|
<div class="ttc" id="classSVF_1_1PAG_html_abfb24b0a57ffe59f345a7490ce64e63d"><div class="ttname"><a href="classSVF_1_1PAG.html#abfb24b0a57ffe59f345a7490ce64e63d">SVF::PAG::hasFunArgsList</a></div><div class="ttdeci">bool hasFunArgsList(const SVFFunction *func) const</div><div class="ttdoc">Function has arguments list. </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00371">PAG.h:371</a></div></div>
|
|
237
239
|
<div class="ttc" id="classSVF_1_1LoadVFGNode_html_aad3591f38e30c5168d4accb76ac8dc04"><div class="ttname"><a href="classSVF_1_1LoadVFGNode.html#aad3591f38e30c5168d4accb76ac8dc04">SVF::LoadVFGNode::toString</a></div><div class="ttdeci">const std::string toString() const override</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00055">VFG.cpp:55</a></div></div>
|
|
238
|
-
<div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4_html_af794115d33a8ea6f7f2e2c7ac5dd4c80"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#af794115d33a8ea6f7f2e2c7ac5dd4c80">llvm::DOTGraphTraits< VFG * >::getEdgeSourceLabel</a></div><div class="ttdeci">static std::string getEdgeSourceLabel(NodeType *, EdgeIter EI)</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#
|
|
240
|
+
<div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4_html_af794115d33a8ea6f7f2e2c7ac5dd4c80"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#af794115d33a8ea6f7f2e2c7ac5dd4c80">llvm::DOTGraphTraits< VFG * >::getEdgeSourceLabel</a></div><div class="ttdeci">static std::string getEdgeSourceLabel(NodeType *, EdgeIter EI)</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l01167">VFG.cpp:1167</a></div></div>
|
|
239
241
|
<div class="ttc" id="classSVF_1_1CallBlockNode_html_ad3d50024efcfa94b1246c982b43aff2f"><div class="ttname"><a href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">SVF::CallBlockNode::getCallSite</a></div><div class="ttdeci">const Instruction * getCallSite() const</div><div class="ttdoc">Return callsite. </div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00381">ICFGNode.h:381</a></div></div>
|
|
240
242
|
<div class="ttc" id="classSVF_1_1VFG_html_aa01f63b17acdd52122a7f1ade329ccea"><div class="ttname"><a href="classSVF_1_1VFG.html#aa01f63b17acdd52122a7f1ade329ccea">SVF::VFG::addCallEdge</a></div><div class="ttdeci">VFGEdge * addCallEdge(NodeID srcId, NodeID dstId, CallSiteID csId)</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00538">VFG.cpp:538</a></div></div>
|
|
241
243
|
<div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="ContextDDA_8h_source.html#l00016">ContextDDA.h:16</a></div></div>
|
|
242
244
|
<div class="ttc" id="classSVF_1_1ICFG_html_a6d66c83cb1656d0f8ec8b8b65a9e9c41"><div class="ttname"><a href="classSVF_1_1ICFG.html#a6d66c83cb1656d0f8ec8b8b65a9e9c41">SVF::ICFG::getRetBlockNode</a></div><div class="ttdeci">RetBlockNode * getRetBlockNode(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00210">ICFG.cpp:210</a></div></div>
|
|
243
|
-
<div class="ttc" id="
|
|
245
|
+
<div class="ttc" id="classSVF_1_1BinaryOPVFGNode_html_ad4c45bbfd044502106c41ba70f568463"><div class="ttname"><a href="classSVF_1_1BinaryOPVFGNode.html#ad4c45bbfd044502106c41ba70f568463">SVF::BinaryOPVFGNode::getValue</a></div><div class="ttdeci">const Value * getValue() const override</div><div class="ttdoc">Return the corresponding LLVM value, if possible, nullptr otherwise. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00902">VFG.cpp:902</a></div></div>
|
|
246
|
+
<div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4_html_a6470ed90c2a601b01715d02cffd90918"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a6470ed90c2a601b01715d02cffd90918">llvm::DOTGraphTraits< VFG * >::getNodeLabel</a></div><div class="ttdeci">std::string getNodeLabel(NodeType *node, VFG *graph)</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00935">VFG.cpp:935</a></div></div>
|
|
244
247
|
<div class="ttc" id="classSVF_1_1IntraDirSVFGEdge_html_a1c8dc17717409aa42749181aafd155aa"><div class="ttname"><a href="classSVF_1_1IntraDirSVFGEdge.html#a1c8dc17717409aa42749181aafd155aa">SVF::IntraDirSVFGEdge::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00256">VFG.cpp:256</a></div></div>
|
|
245
248
|
<div class="ttc" id="classSVF_1_1VFG_html_ac34c4529229404617c346f81cc6c141f"><div class="ttname"><a href="classSVF_1_1VFG.html#ac34c4529229404617c346f81cc6c141f">SVF::VFG::hasIntraVFGEdge</a></div><div class="ttdeci">VFGEdge * hasIntraVFGEdge(VFGNode *src, VFGNode *dst, VFGEdge::VFGEdgeK kind)</div><div class="ttdoc">Whether we has a SVFG edge. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00694">VFG.cpp:694</a></div></div>
|
|
246
249
|
<div class="ttc" id="classSVF_1_1VFG_html_a7343f970332391634f79b2023bba6650"><div class="ttname"><a href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">SVF::VFG::getDef</a></div><div class="ttdeci">NodeID getDef(const PAGNode *pagNode) const</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00406">VFG.h:406</a></div></div>
|
|
@@ -249,6 +252,7 @@ $(function() {
|
|
|
249
252
|
<div class="ttc" id="classSVF_1_1PAG_html_ac0835eaa3f23a53eb56a122bebe2ac6c"><div class="ttname"><a href="classSVF_1_1PAG.html#ac0835eaa3f23a53eb56a122bebe2ac6c">SVF::PAG::getFunRets</a></div><div class="ttdeci">FunToRetMap & getFunRets()</div><div class="ttdoc">Get function return list. </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00421">PAG.h:421</a></div></div>
|
|
250
253
|
<div class="ttc" id="SVFModule_8h_html"><div class="ttname"><a href="SVFModule_8h.html">SVFModule.h</a></div></div>
|
|
251
254
|
<div class="ttc" id="classSVF_1_1PAG_html_a471804c7fbdfacd90915c3a9cec7fccd"><div class="ttname"><a href="classSVF_1_1PAG.html#a471804c7fbdfacd90915c3a9cec7fccd">SVF::PAG::UnaryNodeMap</a></div><div class="ttdeci">Map< const PAGNode *, UnaryOPList > UnaryNodeMap</div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00064">PAG.h:64</a></div></div>
|
|
255
|
+
<div class="ttc" id="classSVF_1_1ArgumentVFGNode_html_aaf6a78630b0365d50dd7b4394215d3a1"><div class="ttname"><a href="classSVF_1_1ArgumentVFGNode.html#aaf6a78630b0365d50dd7b4394215d3a1">SVF::ArgumentVFGNode::getValue</a></div><div class="ttdeci">const Value * getValue() const override</div><div class="ttdoc">Return the corresponding LLVM value, if possible, nullptr otherwise. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00910">VFG.cpp:910</a></div></div>
|
|
252
256
|
<div class="ttc" id="classSVF_1_1PAG_html_ab6779cc646bc50965722984f1a708811"><div class="ttname"><a href="classSVF_1_1PAG.html#ab6779cc646bc50965722984f1a708811">SVF::PAG::getFunArgsMap</a></div><div class="ttdeci">FunToArgsListMap & getFunArgsMap()</div><div class="ttdoc">Get function arguments list. </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00376">PAG.h:376</a></div></div>
|
|
253
257
|
<div class="ttc" id="classSVF_1_1VFG_html_a1fff5a365e5aa2d99f07f7f64cc35fac"><div class="ttname"><a href="classSVF_1_1VFG.html#a1fff5a365e5aa2d99f07f7f64cc35fac">SVF::VFG::getLHSTopLevPtr</a></div><div class="ttdeci">const PAGNode * getLHSTopLevPtr(const VFGNode *node) const</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00842">VFG.cpp:842</a></div></div>
|
|
254
258
|
<div class="ttc" id="classSVF_1_1VFG_html_a9f0a280c43a82cb7e01ee8e887a84ad1"><div class="ttname"><a href="classSVF_1_1VFG.html#a9f0a280c43a82cb7e01ee8e887a84ad1">SVF::VFG::addBinaryOPVFGNode</a></div><div class="ttdeci">void addBinaryOPVFGNode(const PAGNode *resNode, PAG::BinaryOPList &oplist)</div><div class="ttdoc">Add a BinaryOperator VFG node. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00596">VFG.h:596</a></div></div>
|
|
@@ -256,6 +260,7 @@ $(function() {
|
|
|
256
260
|
<div class="ttc" id="classSVF_1_1FormalParmVFGNode_html"><div class="ttname"><a href="classSVF_1_1FormalParmVFGNode.html">SVF::FormalParmVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00829">VFGNode.h:829</a></div></div>
|
|
257
261
|
<div class="ttc" id="classSVF_1_1VFG_html_a915fa50effaeea10716b86528b15c6dc"><div class="ttname"><a href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">SVF::VFG::getVFGNode</a></div><div class="ttdeci">VFGNode * getVFGNode(NodeID id) const</div><div class="ttdoc">Get a VFG node. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00143">VFG.h:143</a></div></div>
|
|
258
262
|
<div class="ttc" id="classSVF_1_1CopyVFGNode_html_ad86bbc5ec4a9ea226364a84e04724b37"><div class="ttname"><a href="classSVF_1_1CopyVFGNode.html#ad86bbc5ec4a9ea226364a84e04724b37">SVF::CopyVFGNode::toString</a></div><div class="ttdeci">const std::string toString() const override</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00072">VFG.cpp:72</a></div></div>
|
|
263
|
+
<div class="ttc" id="classSVF_1_1PHIVFGNode_html_a188a4d3ae95fe01dc59784d076f28aef"><div class="ttname"><a href="classSVF_1_1PHIVFGNode.html#a188a4d3ae95fe01dc59784d076f28aef">SVF::PHIVFGNode::getValue</a></div><div class="ttdeci">const Value * getValue() const override</div><div class="ttdoc">Return the corresponding LLVM value, if possible, nullptr otherwise. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00906">VFG.cpp:906</a></div></div>
|
|
259
264
|
<div class="ttc" id="classSVF_1_1VFG_html_ade3f735b3c7b1a53cab3d67cd9f7b874"><div class="ttname"><a href="classSVF_1_1VFG.html#ade3f735b3c7b1a53cab3d67cd9f7b874">SVF::VFG::CallPESet</a></div><div class="ttdeci">FormalParmVFGNode::CallPESet CallPESet</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00074">VFG.h:74</a></div></div>
|
|
260
265
|
<div class="ttc" id="classSVF_1_1FormalRetVFGNode_html"><div class="ttname"><a href="classSVF_1_1FormalRetVFGNode.html">SVF::FormalRetVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00952">VFGNode.h:952</a></div></div>
|
|
261
266
|
<div class="ttc" id="classSVF_1_1CallDirSVFGEdge_html_af07decd05375f56baa4a1c4fe70bc3f1"><div class="ttname"><a href="classSVF_1_1CallDirSVFGEdge.html#af07decd05375f56baa4a1c4fe70bc3f1">SVF::CallDirSVFGEdge::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00263">VFG.cpp:263</a></div></div>
|
|
@@ -268,6 +273,7 @@ $(function() {
|
|
|
268
273
|
<div class="ttc" id="classSVF_1_1NullPtrVFGNode_html"><div class="ttname"><a href="classSVF_1_1NullPtrVFGNode.html">SVF::NullPtrVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l01079">VFGNode.h:1079</a></div></div>
|
|
269
274
|
<div class="ttc" id="classSVF_1_1VFG_html_a75eb519e4f89a116db98fccb263af4d6"><div class="ttname"><a href="classSVF_1_1VFG.html#a75eb519e4f89a116db98fccb263af4d6">SVF::VFG::getFormalParmVFGNode</a></div><div class="ttdeci">FormalParmVFGNode * getFormalParmVFGNode(const PAGNode *fparm) const</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00239">VFG.h:239</a></div></div>
|
|
270
275
|
<div class="ttc" id="SVFBasicTypes_8h_html_a173ce1b9b505fdadf5613b663749d3b0"><div class="ttname"><a href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a></div><div class="ttdeci">#define DBOUT(TYPE, X)</div><div class="ttdoc">LLVM debug macros, define type of your DEBUG model of each pass. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00144">SVFBasicTypes.h:144</a></div></div>
|
|
276
|
+
<div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
|
|
271
277
|
<div class="ttc" id="classSVF_1_1PAGNode_html_afa5f1f6b3b7ffff2c417d58db7ef6bc2"><div class="ttname"><a href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">SVF::PAGNode::isPointer</a></div><div class="ttdeci">virtual bool isPointer() const</div><div class="ttdoc">Whether it is a pointer. </div><div class="ttdef"><b>Definition:</b> <a href="PAGNode_8h_source.html#l00115">PAGNode.h:115</a></div></div>
|
|
272
278
|
<div class="ttc" id="classSVF_1_1CmpVFGNode_html_aa08c4475c47beb0d026acab859d68117"><div class="ttname"><a href="classSVF_1_1CmpVFGNode.html#aa08c4475c47beb0d026acab859d68117">SVF::CmpVFGNode::toString</a></div><div class="ttdeci">const std::string toString() const override</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00080">VFG.cpp:80</a></div></div>
|
|
273
279
|
<div class="ttc" id="LLVMUtil_8h_html"><div class="ttname"><a href="LLVMUtil_8h.html">LLVMUtil.h</a></div></div>
|