svf-tools 1.0.536 → 1.0.539
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/AndersenSFR_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +1 -1
- package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +16 -16
- package/SVF-doxygen/html/html/Andersen_8h_source.html +6 -9
- package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ConsG_8h_source.html +3 -3
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +4 -4
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +1 -1
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Options_8cpp_source.html +13 -12
- package/SVF-doxygen/html/html/Options_8h_source.html +13 -12
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFGReadWrite_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +2 -1
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +32 -32
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +33 -33
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/VFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +150 -152
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +45 -140
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +149 -151
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +4 -10
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +161 -163
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +3 -9
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +156 -158
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +13 -19
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +4 -3
- package/SVF-doxygen/html/html/classSVF_1_1Options.html +38 -12
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +86 -88
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +120 -118
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +12 -12
- package/SVF-doxygen/html/html/functions_a.html +3 -6
- package/SVF-doxygen/html/html/functions_func.html +5 -8
- package/SVF-doxygen/html/html/functions_func_m.html +1 -4
- package/SVF-doxygen/html/html/functions_l.html +6 -6
- package/SVF-doxygen/html/html/functions_m.html +0 -3
- package/SVF-doxygen/html/html/functions_n.html +4 -4
- package/SVF-doxygen/html/html/functions_o.html +3 -3
- package/SVF-doxygen/html/html/functions_p.html +13 -13
- package/SVF-doxygen/html/html/functions_r.html +3 -5
- package/SVF-doxygen/html/html/functions_s.html +3 -3
- package/SVF-doxygen/html/html/functions_t.html +4 -4
- package/SVF-doxygen/html/html/functions_v.html +6 -3
- package/SVF-doxygen/html/html/functions_vars_v.html +3 -0
- package/SVF-doxygen/html/html/namespaceSVF.html +1 -1
- package/SVF-doxygen/html/html/search/all_1.js +0 -1
- package/SVF-doxygen/html/html/search/all_10.js +6 -6
- package/SVF-doxygen/html/html/search/all_11.js +1 -1
- package/SVF-doxygen/html/html/search/all_12.js +2 -2
- package/SVF-doxygen/html/html/search/all_13.js +3 -3
- package/SVF-doxygen/html/html/search/all_14.js +1 -1
- package/SVF-doxygen/html/html/search/all_15.js +3 -2
- package/SVF-doxygen/html/html/search/all_b.js +1 -1
- package/SVF-doxygen/html/html/search/all_c.js +4 -4
- package/SVF-doxygen/html/html/search/all_d.js +0 -1
- package/SVF-doxygen/html/html/search/all_e.js +2 -2
- package/SVF-doxygen/html/html/search/all_f.js +1 -1
- package/SVF-doxygen/html/html/search/functions_0.js +0 -1
- package/SVF-doxygen/html/html/search/functions_c.js +0 -1
- package/SVF-doxygen/html/html/search/variables_13.js +2 -2
- package/SVF-doxygen/html/html/search/variables_14.js +1 -1
- package/SVF-doxygen/html/html/search/variables_15.js +1 -0
- package/SVF-doxygen/html/html/search/variables_c.js +1 -1
- package/SVF-doxygen/html/html/search/variables_e.js +1 -1
- package/include/MemoryModel/SVFIR.h +1 -4
- package/include/Util/Options.h +1 -0
- package/include/WPA/Andersen.h +0 -11
- package/lib/Graphs/SVFGReadWrite.cpp +3 -3
- package/lib/SVF-FE/SVFIRBuilder.cpp +2 -0
- package/lib/Util/Options.cpp +7 -0
- package/lib/WPA/Andersen.cpp +0 -3
- package/package.json +1 -1
|
@@ -248,7 +248,7 @@ Private Attributes</h2></td></tr>
|
|
|
248
248
|
|
|
249
249
|
<p class="definition">Definition at line <a class="el" href="PAGBuilderFromFile_8cpp_source.html#l00059">59</a> of file <a class="el" href="PAGBuilderFromFile_8cpp_source.html">PAGBuilderFromFile.cpp</a>.</p>
|
|
250
250
|
<div class="fragment"><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordtype">string</span> line;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  ifstream myfile(<a class="code" href="classSVF_1_1PAGBuilderFromFile.html#a9ce304b448de65fbde586655dce885a4">file</a>.c_str());</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">if</span> (myfile.is_open())</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">while</span> (myfile.good())</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  getline(myfile, line);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> token_count = 0;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordtype">string</span> tmps;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  istringstream ss(line);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">while</span> (ss.good())</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  ss >> tmps;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  token_count++;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">if</span> (token_count == 0)</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (token_count == 2)</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordtype">string</span> nodetype;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  istringstream ss(line);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  ss >> nodeId;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  ss >> nodetype;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"reading node :"</span> << nodeId << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">if</span> (nodetype == <span class="stringliteral">"v"</span>)</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <a class="code" href="classSVF_1_1PAGBuilderFromFile.html#a79f00ac0ee4a67beec6e7ef45c504e4d">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>(nodeId);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nodetype == <span class="stringliteral">"o"</span>)</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* mem = <a class="code" href="classSVF_1_1PAGBuilderFromFile.html#a79f00ac0ee4a67beec6e7ef45c504e4d">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a4ee79c74a7a2cea5c063fa598ab89532">addDummyMemObj</a>(nodeId, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="classSVF_1_1PAGBuilderFromFile.html#a79f00ac0ee4a67beec6e7ef45c504e4d">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a06465449e58e14bfb1c3eee2c97d3242">addFIObjNode</a>(mem);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"format not support, pls specify node type"</span>);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  }</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="comment">// do consider gep edge</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (token_count == 4)</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeSrc;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeDst;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> offsetOrCSId;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordtype">string</span> edge;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  istringstream ss(line);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  ss >> nodeSrc;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  ss >> edge;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  ss >> nodeDst;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  ss >> offsetOrCSId;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"reading edge :"</span> << nodeSrc << <span class="stringliteral">" "</span> << edge << <span class="stringliteral">" "</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  << nodeDst << <span class="stringliteral">" offsetOrCSId="</span> << offsetOrCSId << <span class="stringliteral">" \n"</span>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="classSVF_1_1PAGBuilderFromFile.html#afe42e4086de6688002afd144507b0b62">addEdge</a>(nodeSrc, nodeDst, offsetOrCSId, edge);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">if</span> (!line.empty())</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  {</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"format not supported, token count = "</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  << token_count << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"format not supported"</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"> 125</span>  }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  myfile.close();</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"Unable to open file\n"</span>;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> lower_bound = <a class="code" href="PAGBuilderFromFile_8cpp.html#a1af3947dbaf1ad4364bc4818f70ead40">gepNodeNumIndex</a>;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < lower_bound; i++)</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <a class="code" href="classSVF_1_1PAGBuilderFromFile.html#a79f00ac0ee4a67beec6e7ef45c504e4d">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a7388dabef7300e77adf33f3999639f21">incNodeNum</a>();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="classSVF_1_1PAGBuilderFromFile.html#a79f00ac0ee4a67beec6e7ef45c504e4d">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a5fe12445ed0528183775747dec356db0">setNodeNumAfterPAGBuild</a>(<a class="code" href="classSVF_1_1PAGBuilderFromFile.html#a79f00ac0ee4a67beec6e7ef45c504e4d">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">getTotalNodeNum</a>());</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PAGBuilderFromFile.html#a79f00ac0ee4a67beec6e7ef45c504e4d">pag</a>;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> }</div><div class="ttc" id="classSVF_1_1MemObj_html"><div class="ttname"><a href="classSVF_1_1MemObj.html">SVF::MemObj</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00378">SymbolTableInfo.h:378</a></div></div>
|
|
251
|
-
<div class="ttc" id="classSVF_1_1SVFIR_html_aa7e98cd2fd599aedefa4c2e6fb659da0"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">SVF::SVFIR::addDummyValNode</a></div><div class="ttdeci">NodeID addDummyValNode()</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#
|
|
251
|
+
<div class="ttc" id="classSVF_1_1SVFIR_html_aa7e98cd2fd599aedefa4c2e6fb659da0"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">SVF::SVFIR::addDummyValNode</a></div><div class="ttdeci">NodeID addDummyValNode()</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00425">SVFIR.h:425</a></div></div>
|
|
252
252
|
<div class="ttc" id="classSVF_1_1GenericGraph_html_a8c8d16036008f87c7811586047599858"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">SVF::GenericGraph::getTotalNodeNum</a></div><div class="ttdeci">u32_t getTotalNodeNum() const</div><div class="ttdoc">Get total number of node/edge. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00418">GenericGraph.h:418</a></div></div>
|
|
253
253
|
<div class="ttc" id="PAGBuilderFromFile_8cpp_html_a1af3947dbaf1ad4364bc4818f70ead40"><div class="ttname"><a href="PAGBuilderFromFile_8cpp.html#a1af3947dbaf1ad4364bc4818f70ead40">gepNodeNumIndex</a></div><div class="ttdeci">static u32_t gepNodeNumIndex</div><div class="ttdef"><b>Definition:</b> <a href="PAGBuilderFromFile_8cpp_source.html#l00038">PAGBuilderFromFile.cpp:38</a></div></div>
|
|
254
254
|
<div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00019">MTAResultValidator.h:19</a></div></div>
|
|
@@ -261,7 +261,7 @@ Private Attributes</h2></td></tr>
|
|
|
261
261
|
<div class="ttc" id="classSVF_1_1GenericGraph_html_a7388dabef7300e77adf33f3999639f21"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a7388dabef7300e77adf33f3999639f21">SVF::GenericGraph::incNodeNum</a></div><div class="ttdeci">void incNodeNum()</div><div class="ttdoc">Increase number of node/edge. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00427">GenericGraph.h:427</a></div></div>
|
|
262
262
|
<div class="ttc" id="classSVF_1_1IRGraph_html_a5fe12445ed0528183775747dec356db0"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a5fe12445ed0528183775747dec356db0">SVF::IRGraph::setNodeNumAfterPAGBuild</a></div><div class="ttdeci">void setNodeNumAfterPAGBuild(u32_t num)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00185">IRGraph.h:185</a></div></div>
|
|
263
263
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a06465449e58e14bfb1c3eee2c97d3242"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a06465449e58e14bfb1c3eee2c97d3242">SVF::SVFIR::addFIObjNode</a></div><div class="ttdeci">NodeID addFIObjNode(const MemObj *obj)</div><div class="ttdoc">Add a field-insensitive node, this method can only invoked by getFIGepObjNode. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00467">SVFIR.cpp:467</a></div></div>
|
|
264
|
-
<div class="ttc" id="classSVF_1_1SVFIR_html_a4ee79c74a7a2cea5c063fa598ab89532"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a4ee79c74a7a2cea5c063fa598ab89532">SVF::SVFIR::addDummyMemObj</a></div><div class="ttdeci">const MemObj * addDummyMemObj(NodeID i, const Type *type)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#
|
|
264
|
+
<div class="ttc" id="classSVF_1_1SVFIR_html_a4ee79c74a7a2cea5c063fa598ab89532"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a4ee79c74a7a2cea5c063fa598ab89532">SVF::SVFIR::addDummyMemObj</a></div><div class="ttdeci">const MemObj * addDummyMemObj(NodeID i, const Type *type)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00539">SVFIR.h:539</a></div></div>
|
|
265
265
|
</div><!-- fragment -->
|
|
266
266
|
</div>
|
|
267
267
|
</div>
|
|
@@ -1479,7 +1479,7 @@ Private Member Functions</h2></td></tr>
|
|
|
1479
1479
|
</div><div class="memdoc">
|
|
1480
1480
|
|
|
1481
1481
|
<p class="definition">Definition at line <a class="el" href="PointerAnalysis_8h_source.html#l00333">333</a> of file <a class="el" href="PointerAnalysis_8h_source.html">PointerAnalysis.h</a>.</p>
|
|
1482
|
-
<div class="fragment"><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  {</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  }</div><div class="ttc" id="classSVF_1_1SVFIR_html_a77a6bb9335aa12d29825af1b5ea07e08"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">SVF::SVFIR::getBaseObjVar</a></div><div class="ttdeci">NodeID getBaseObjVar(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#
|
|
1482
|
+
<div class="fragment"><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  {</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  }</div><div class="ttc" id="classSVF_1_1SVFIR_html_a77a6bb9335aa12d29825af1b5ea07e08"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">SVF::SVFIR::getBaseObjVar</a></div><div class="ttdeci">NodeID getBaseObjVar(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00406">SVFIR.h:406</a></div></div>
|
|
1483
1483
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_adc7f5c71efb9cd1bec4f5ca9127654c3"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">SVF::PointerAnalysis::pag</a></div><div class="ttdeci">static SVFIR * pag</div><div class="ttdoc">SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00142">PointerAnalysis.h:142</a></div></div>
|
|
1484
1484
|
</div><!-- fragment -->
|
|
1485
1485
|
</div>
|
|
@@ -2337,7 +2337,7 @@ Private Member Functions</h2></td></tr>
|
|
|
2337
2337
|
</div><div class="memdoc">
|
|
2338
2338
|
|
|
2339
2339
|
<p class="definition">Definition at line <a class="el" href="PointerAnalysis_8h_source.html#l00300">300</a> of file <a class="el" href="PointerAnalysis_8h_source.html">PointerAnalysis.h</a>.</p>
|
|
2340
|
-
<div class="fragment"><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ad9895f2d075eb402390e3b01ed68e001">isBlkObjOrConstantObj</a>(ptd);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  }</div><div class="ttc" id="classSVF_1_1SVFIR_html_ad9895f2d075eb402390e3b01ed68e001"><div class="ttname"><a href="classSVF_1_1SVFIR.html#ad9895f2d075eb402390e3b01ed68e001">SVF::SVFIR::isBlkObjOrConstantObj</a></div><div class="ttdeci">bool isBlkObjOrConstantObj(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#
|
|
2340
|
+
<div class="fragment"><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ad9895f2d075eb402390e3b01ed68e001">isBlkObjOrConstantObj</a>(ptd);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  }</div><div class="ttc" id="classSVF_1_1SVFIR_html_ad9895f2d075eb402390e3b01ed68e001"><div class="ttname"><a href="classSVF_1_1SVFIR.html#ad9895f2d075eb402390e3b01ed68e001">SVF::SVFIR::isBlkObjOrConstantObj</a></div><div class="ttdeci">bool isBlkObjOrConstantObj(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00384">SVFIR.h:384</a></div></div>
|
|
2341
2341
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_adc7f5c71efb9cd1bec4f5ca9127654c3"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">SVF::PointerAnalysis::pag</a></div><div class="ttdeci">static SVFIR * pag</div><div class="ttdoc">SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00142">PointerAnalysis.h:142</a></div></div>
|
|
2342
2342
|
</div><!-- fragment -->
|
|
2343
2343
|
</div>
|
|
@@ -2367,7 +2367,7 @@ Private Member Functions</h2></td></tr>
|
|
|
2367
2367
|
</div><div class="memdoc">
|
|
2368
2368
|
|
|
2369
2369
|
<p class="definition">Definition at line <a class="el" href="PointerAnalysis_8h_source.html#l00354">354</a> of file <a class="el" href="PointerAnalysis_8h_source.html">PointerAnalysis.h</a>.</p>
|
|
2370
|
-
<div class="fragment"><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  {</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keyword">const</span> MemObj* mem = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749">getBaseObj</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordflow">return</span> mem-><a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">isFieldInsensitive</a>();</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  }</div><div class="ttc" id="classSVF_1_1SVFIR_html_af76a55c3b8255a81a566bdce35ffc749"><div class="ttname"><a href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749">SVF::SVFIR::getBaseObj</a></div><div class="ttdeci">const MemObj * getBaseObj(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#
|
|
2370
|
+
<div class="fragment"><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  {</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keyword">const</span> MemObj* mem = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749">getBaseObj</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordflow">return</span> mem-><a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">isFieldInsensitive</a>();</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  }</div><div class="ttc" id="classSVF_1_1SVFIR_html_af76a55c3b8255a81a566bdce35ffc749"><div class="ttname"><a href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749">SVF::SVFIR::getBaseObj</a></div><div class="ttdeci">const MemObj * getBaseObj(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00410">SVFIR.h:410</a></div></div>
|
|
2371
2371
|
<div class="ttc" id="classSVF_1_1MemObj_html_a41d85883d44ad77832b020455951c6fc"><div class="ttname"><a href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">SVF::MemObj::isFieldInsensitive</a></div><div class="ttdeci">bool isFieldInsensitive() const</div><div class="ttdoc">Return true if its field limit is 0. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00738">SymbolTableInfo.cpp:738</a></div></div>
|
|
2372
2372
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_adc7f5c71efb9cd1bec4f5ca9127654c3"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">SVF::PointerAnalysis::pag</a></div><div class="ttdeci">static SVFIR * pag</div><div class="ttdoc">SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00142">PointerAnalysis.h:142</a></div></div>
|
|
2373
2373
|
</div><!-- fragment -->
|
|
@@ -2891,7 +2891,7 @@ Private Member Functions</h2></td></tr>
|
|
|
2891
2891
|
</div><div class="memdoc">
|
|
2892
2892
|
|
|
2893
2893
|
<p class="definition">Definition at line <a class="el" href="PointerAnalysis_8h_source.html#l00349">349</a> of file <a class="el" href="PointerAnalysis_8h_source.html">PointerAnalysis.h</a>.</p>
|
|
2894
|
-
<div class="fragment"><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  {</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  MemObj* mem = <span class="keyword">const_cast<</span>MemObj*<span class="keyword">></span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749">getBaseObj</a>(<span class="keywordtype">id</span>));</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  mem->setFieldInsensitive();</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  }</div><div class="ttc" id="classSVF_1_1SVFIR_html_af76a55c3b8255a81a566bdce35ffc749"><div class="ttname"><a href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749">SVF::SVFIR::getBaseObj</a></div><div class="ttdeci">const MemObj * getBaseObj(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#
|
|
2894
|
+
<div class="fragment"><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  {</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  MemObj* mem = <span class="keyword">const_cast<</span>MemObj*<span class="keyword">></span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749">getBaseObj</a>(<span class="keywordtype">id</span>));</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  mem->setFieldInsensitive();</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  }</div><div class="ttc" id="classSVF_1_1SVFIR_html_af76a55c3b8255a81a566bdce35ffc749"><div class="ttname"><a href="classSVF_1_1SVFIR.html#af76a55c3b8255a81a566bdce35ffc749">SVF::SVFIR::getBaseObj</a></div><div class="ttdeci">const MemObj * getBaseObj(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00410">SVFIR.h:410</a></div></div>
|
|
2895
2895
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_adc7f5c71efb9cd1bec4f5ca9127654c3"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">SVF::PointerAnalysis::pag</a></div><div class="ttdeci">static SVFIR * pag</div><div class="ttdoc">SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00142">PointerAnalysis.h:142</a></div></div>
|
|
2896
2896
|
</div><!-- fragment -->
|
|
2897
2897
|
</div>
|
|
@@ -3701,7 +3701,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
3701
3701
|
</div><div class="memdoc">
|
|
3702
3702
|
|
|
3703
3703
|
<p class="definition">Definition at line <a class="el" href="SVFGReadWrite_8cpp_source.html#l00046">46</a> of file <a class="el" href="SVFGReadWrite_8cpp_source.html">SVFGReadWrite.cpp</a>.</p>
|
|
3704
|
-
<div class="fragment"><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"Writing SVFG analysis to '"</span> << filename << <span class="stringliteral">"'..."</span>;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  error_code err;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  std::fstream f(filename.c_str(), std::ios_base::out);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">if</span> (!f.good())</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">" error opening file for writing!\n"</span>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  f << <span class="stringliteral">"__Nodes__\n"</span>;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="comment">// Iterate over nodes and write to file</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1VFG.html#a241d0489bf0315460e2b07db87e7847c">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="l00059"></a><span class="lineno"> 59</span>  {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = it->first;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = it->second;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalINSVFGNode.html">FormalINSVFGNode</a>* formalIn = SVFUtil::dyn_cast<FormalINSVFGNode>(node))</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="comment">//node</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  f << <span class="stringliteral">"SVFGNodeID: "</span> << nodeId << <span class="stringliteral">" >= "</span> << <span class="stringliteral">"FormalINSVFGNode"</span>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  f << <span class="stringliteral">" >= MVER: {"</span>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  f << *formalIn->getMRVer() << <span class="stringliteral">"} >= ICFGNodeID: "</span> << formalIn->getFunEntryNode()-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalOUTSVFGNode.html">FormalOUTSVFGNode</a>* formalOut = SVFUtil::dyn_cast<FormalOUTSVFGNode>(node))</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>  <span class="comment">//node</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  f << <span class="stringliteral">"SVFGNodeID: "</span> << nodeId << <span class="stringliteral">" >= "</span> << <span class="stringliteral">"FormalOUTSVFGNode"</span>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  f << <span class="stringliteral">" >= MVER: {"</span>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  f << *formalOut->getMRVer() << <span class="stringliteral">"} >= ICFGNodeID: "</span> << formalOut->getFunExitNode()->getId() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::dyn_cast<ActualINSVFGNode>(node))</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="comment">//node</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  f << <span class="stringliteral">"SVFGNodeID: "</span> << nodeId << <span class="stringliteral">" >= "</span> << <span class="stringliteral">"ActualINSVFGNode"</span>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  f << <span class="stringliteral">" >= MVER: {"</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  f << *actualIn->getMRVer() << <span class="stringliteral">"} >= ICFGNodeID: "</span> << actualIn->getCallSite()->getId() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualOUTSVFGNode.html">ActualOUTSVFGNode</a>* actualOut = SVFUtil::dyn_cast<ActualOUTSVFGNode>(node))</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  {</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="comment">//node</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  f << <span class="stringliteral">"SVFGNodeID: "</span> << nodeId << <span class="stringliteral">" >= "</span> << <span class="stringliteral">"ActualOUTSVFGNode"</span> << <span class="stringliteral">" >= MVER: {"</span>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  f << *actualOut->getMRVer() << <span class="stringliteral">"} >= ICFGNodeID: "</span> << actualOut->getCallSite()->getId() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MSSAPHISVFGNode.html">MSSAPHISVFGNode</a>* phiNode = SVFUtil::dyn_cast<MSSAPHISVFGNode>(node))</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="comment">//node</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  f << <span class="stringliteral">"SVFGNodeID: "</span> << nodeId << <span class="stringliteral">" >= "</span> << <span class="stringliteral">"PHISVFGNode"</span>;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  unordered_map<u32_t,const MRVer*> opvers;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordflow">for</span> (MemSSA::PHI::OPVers::const_iterator it = phiNode->opVerBegin(), eit = phiNode->opVerEnd();</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  it != eit; it++)</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  opvers.insert(make_pair(it->first, it->second));</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="comment">// opvers</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  f << <span class="stringliteral">" >= MVER: {"</span>;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  f << *phiNode->getResVer();</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  f << <span class="stringliteral">"} >= ICFGNodeID: "</span> << <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(&(phiNode->getICFGNode()->getBB()->front()))-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  f << <span class="stringliteral">" >= OPVers: {"</span>;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> x: opvers)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* op = x.second;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  f << <span class="stringliteral">"{"</span> << *op << <span class="stringliteral">"}"</span> << <span class="stringliteral">","</span>;</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>  f << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  f << <span class="stringliteral">"\n\n__Edges__\n"</span>;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="comment">// Iterate over edges and write to file</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1VFG.html#a241d0489bf0315460e2b07db87e7847c">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="l00116"></a><span class="lineno"> 116</span>  {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = it->first;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = it->second;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadVFGNode.html">LoadSVFGNode</a>* loadNode = SVFUtil::dyn_cast<LoadSVFGNode>(node))</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  {</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="classSVF_1_1SVFG.html#acdbe1c510273107b708935061b6c4127">MUSet</a>& muSet = <a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-><a class="code" href="classSVF_1_1MemSSA.html#af4d11a0c7da0ddd7dff8d75a00279847">getMUSet</a>(SVFUtil::cast<LoadStmt>(loadNode->getPAGEdge()));</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">for</span>(MUSet::iterator it = muSet.begin(), eit = muSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFG.html#a86d4a41a881a3d2e5def103d7ba8bb2f">LOADMU</a>* mu = SVFUtil::dyn_cast<LOADMU>(*it))</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = <a class="code" href="classSVF_1_1SVFG.html#abd917826bf50ed409a307ce00562c97d">getDef</a>(mu->getMRVer());</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << def << <span class="stringliteral">" >= LoadNode | MVER: {"</span><< *mu->getMRVer() << <span class="stringliteral">"}"</span> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  }</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* storeNode = SVFUtil::dyn_cast<StoreSVFGNode>(node))</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <a class="code" href="classSVF_1_1SVFG.html#a8843ab4a4608f7f5f46f68ad31314c07">CHISet</a>& chiSet = <a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-><a class="code" href="classSVF_1_1MemSSA.html#a2e656a50f8964fc3e99d1d436de64418">getCHISet</a>(SVFUtil::cast<StoreStmt>(storeNode->getPAGEdge()));</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">for</span>(CHISet::iterator it = chiSet.begin(), eit = chiSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFG.html#ad14cdbb3f1df1f716aa03b4d39f4e52b">STORECHI</a>* chi = SVFUtil::dyn_cast<STORECHI>(*it))</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = <a class="code" href="classSVF_1_1SVFG.html#abd917826bf50ed409a307ce00562c97d">getDef</a>(chi->getOpVer());</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << def << <span class="stringliteral">" >= StoreNode | MVER: {"</span><< *chi->getOpVer() << <span class="stringliteral">"}"</span> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalINSVFGNode.html">FormalINSVFGNode</a>* formalIn = SVFUtil::dyn_cast<FormalINSVFGNode>(node))</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <a class="code" href="classSVF_1_1PTACallGraphEdge.html#adbedb15ac0f9395c5264f087a63bad3b">PTACallGraphEdge::CallInstSet</a> callInstSet;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-><a class="code" href="classSVF_1_1MemSSA.html#ad40617a1907b9a6b8cc24888ce54a0ac">getPTA</a>()-><a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-><a class="code" href="classSVF_1_1PTACallGraph.html#a0d2544130cc2cdc3ac418c975c278eb2">getDirCallSitesInvokingCallee</a>(formalIn->getFun(),callInstSet);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">for</span>(PTACallGraphEdge::CallInstSet::iterator it = callInstSet.begin(), eit = callInstSet.end(); it!=eit; ++it)</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = *it;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">if</span>(!<a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-><a class="code" href="classSVF_1_1MemSSA.html#af5e356e82c3f93b65bd89908e0f465dc">hasMU</a>(cs))</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <a class="code" href="classSVF_1_1SVFG.html#aa9f520779475e4783eccc45c460e346a">ActualINSVFGNodeSet</a>& actualIns = <a class="code" href="classSVF_1_1SVFG.html#a475205e221890204c7770c414ee63975">getActualINSVFGNodes</a>(cs);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">ActualINSVFGNodeSet::iterator</a> ait = actualIns.begin(), aeit = actualIns.end(); ait!=aeit; ++ait)</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::cast<ActualINSVFGNode>(<a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*ait));</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << actualIn-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() << <span class="stringliteral">" >= FormalINSVFGNode"</span> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  }</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalOUTSVFGNode.html">FormalOUTSVFGNode</a>* formalOut = SVFUtil::dyn_cast<FormalOUTSVFGNode>(node))</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>  <a class="code" href="classSVF_1_1PTACallGraphEdge.html#adbedb15ac0f9395c5264f087a63bad3b">PTACallGraphEdge::CallInstSet</a> callInstSet;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-><a class="code" href="classSVF_1_1MemSSA.html#ad40617a1907b9a6b8cc24888ce54a0ac">getPTA</a>()-><a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-><a class="code" href="classSVF_1_1PTACallGraph.html#a0d2544130cc2cdc3ac418c975c278eb2">getDirCallSitesInvokingCallee</a>(formalOut->getFun(),callInstSet);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">for</span>(PTACallGraphEdge::CallInstSet::iterator it = callInstSet.begin(), eit = callInstSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = *it;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">if</span>(!<a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-><a class="code" href="classSVF_1_1MemSSA.html#abfb338ce36ad46a9654d50dd6e2b07f1">hasCHI</a>(cs))</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <a class="code" href="classSVF_1_1SVFG.html#a2f6ed8a9f14657abc1e2a89247a84b99">ActualOUTSVFGNodeSet</a>& actualOuts = <a class="code" href="classSVF_1_1SVFG.html#a5b7ae610bee28acc2905ca82928e714f">getActualOUTSVFGNodes</a>(cs);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">ActualOUTSVFGNodeSet::iterator</a> ait = actualOuts.begin(), aeit = actualOuts.end(); ait!=aeit; ++ait)</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualOUTSVFGNode.html">ActualOUTSVFGNode</a>* actualOut = SVFUtil::cast<ActualOUTSVFGNode>(<a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*ait));</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << actualOut-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() << <span class="stringliteral">" >= FormalOUTSVFGNode"</span> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  }</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = <a class="code" href="classSVF_1_1SVFG.html#abd917826bf50ed409a307ce00562c97d">getDef</a>(formalOut->getMRVer());</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << def << <span class="stringliteral">" >= FormalOUTSVFGNode | intra"</span> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::dyn_cast<ActualINSVFGNode>(node))</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  {</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = <a class="code" href="classSVF_1_1SVFG.html#abd917826bf50ed409a307ce00562c97d">getDef</a>(actualIn->getMRVer());</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << def << <span class="stringliteral">" >= ActualINSVFGNode"</span> << <span class="stringliteral">"\n"</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"> 184</span>  }</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MSSAPHISVFGNode.html">MSSAPHISVFGNode</a>* phiNode = SVFUtil::dyn_cast<MSSAPHISVFGNode>(node))</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">for</span> (MemSSA::PHI::OPVers::const_iterator it = phiNode->opVerBegin(), eit = phiNode->opVerEnd();</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  it != eit; it++)</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* op = it->second;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = <a class="code" href="classSVF_1_1SVFG.html#abd917826bf50ed409a307ce00562c97d">getDef</a>(op);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << def << <span class="stringliteral">" >= PHISVFGNode | MVER: {"</span><< *op << <span class="stringliteral">"}"</span> << <span class="stringliteral">"\n"</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"> 194</span>  }</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="comment">// Job finish and close file</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  f.close();</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">if</span> (f.good())</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  {</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keywordflow">return</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"> 203</span> }</div><div class="ttc" id="classSVF_1_1MRVer_html"><div class="ttname"><a href="classSVF_1_1MRVer.html">SVF::MRVer</a></div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00043">MSSAMuChi.h:43</a></div></div>
|
|
3704
|
+
<div class="fragment"><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"Writing SVFG analysis to '"</span> << filename << <span class="stringliteral">"'..."</span>;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  error_code err;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  std::fstream f(filename.c_str(), std::ios_base::out);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">if</span> (!f.good())</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">" error opening file for writing!\n"</span>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  f << <span class="stringliteral">"__Nodes__\n"</span>;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="comment">// Iterate over nodes and write to file</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1VFG.html#a241d0489bf0315460e2b07db87e7847c">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="l00059"></a><span class="lineno"> 59</span>  {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = it->first;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = it->second;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalINSVFGNode.html">FormalINSVFGNode</a>* formalIn = SVFUtil::dyn_cast<FormalINSVFGNode>(node))</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="comment">//node</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  f << <span class="stringliteral">"SVFGNodeID: "</span> << nodeId << <span class="stringliteral">" >= "</span> << <span class="stringliteral">"FormalINSVFGNode"</span>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  f << <span class="stringliteral">" >= MVER: {"</span>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  f << *formalIn->getMRVer() << <span class="stringliteral">"} >= ICFGNodeID: "</span> << formalIn->getFunEntryNode()-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalOUTSVFGNode.html">FormalOUTSVFGNode</a>* formalOut = SVFUtil::dyn_cast<FormalOUTSVFGNode>(node))</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>  <span class="comment">//node</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  f << <span class="stringliteral">"SVFGNodeID: "</span> << nodeId << <span class="stringliteral">" >= "</span> << <span class="stringliteral">"FormalOUTSVFGNode"</span>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  f << <span class="stringliteral">" >= MVER: {"</span>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  f << *formalOut->getMRVer() << <span class="stringliteral">"} >= ICFGNodeID: "</span> << formalOut->getFunExitNode()->getId() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::dyn_cast<ActualINSVFGNode>(node))</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="comment">//node</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  f << <span class="stringliteral">"SVFGNodeID: "</span> << nodeId << <span class="stringliteral">" >= "</span> << <span class="stringliteral">"ActualINSVFGNode"</span>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  f << <span class="stringliteral">" >= MVER: {"</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  f << *actualIn->getMRVer() << <span class="stringliteral">"} >= ICFGNodeID: "</span> << actualIn->getCallSite()->getId() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualOUTSVFGNode.html">ActualOUTSVFGNode</a>* actualOut = SVFUtil::dyn_cast<ActualOUTSVFGNode>(node))</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  {</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="comment">//node</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  f << <span class="stringliteral">"SVFGNodeID: "</span> << nodeId << <span class="stringliteral">" >= "</span> << <span class="stringliteral">"ActualOUTSVFGNode"</span> << <span class="stringliteral">" >= MVER: {"</span>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  f << *actualOut->getMRVer() << <span class="stringliteral">"} >= ICFGNodeID: "</span> << actualOut->getCallSite()->getId() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MSSAPHISVFGNode.html">MSSAPHISVFGNode</a>* phiNode = SVFUtil::dyn_cast<MSSAPHISVFGNode>(node))</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="comment">//node</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  f << <span class="stringliteral">"SVFGNodeID: "</span> << nodeId << <span class="stringliteral">" >= "</span> << <span class="stringliteral">"PHISVFGNode"</span>;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  unordered_map<u32_t,const MRVer*> opvers;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordflow">for</span> (MemSSA::PHI::OPVers::const_iterator it = phiNode->opVerBegin(), eit = phiNode->opVerEnd();</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  it != eit; it++)</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  opvers.insert(make_pair(it->first, it->second));</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="comment">// opvers</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  f << <span class="stringliteral">" >= MVER: {"</span>;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  f << *phiNode->getResVer();</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  f << <span class="stringliteral">"} >= ICFGNodeID: "</span> << <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(&(phiNode->getICFGNode()->getBB()->front()))-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  f << <span class="stringliteral">" >= OPVers: {"</span>;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> x: opvers)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* op = x.second;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  f << <span class="stringliteral">"{"</span> << *op << <span class="stringliteral">"}"</span> << <span class="stringliteral">","</span>;</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>  f << <span class="stringliteral">"}\n"</span>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  f << <span class="stringliteral">"\n\n__Edges__\n"</span>;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="comment">// Iterate over edges and write to file</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1VFG.html#a241d0489bf0315460e2b07db87e7847c">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="l00116"></a><span class="lineno"> 116</span>  {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = it->first;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = it->second;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadVFGNode.html">LoadSVFGNode</a>* loadNode = SVFUtil::dyn_cast<LoadSVFGNode>(node))</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  {</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="classSVF_1_1SVFG.html#acdbe1c510273107b708935061b6c4127">MUSet</a>& muSet = <a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-><a class="code" href="classSVF_1_1MemSSA.html#af4d11a0c7da0ddd7dff8d75a00279847">getMUSet</a>(SVFUtil::cast<LoadStmt>(loadNode->getPAGEdge()));</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">for</span>(MUSet::iterator it = muSet.begin(), eit = muSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFG.html#a86d4a41a881a3d2e5def103d7ba8bb2f">LOADMU</a>* mu = SVFUtil::dyn_cast<LOADMU>(*it))</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = <a class="code" href="classSVF_1_1SVFG.html#abd917826bf50ed409a307ce00562c97d">getDef</a>(mu->getMRVer());</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << def << <span class="stringliteral">" >= LoadNode | MVER: {"</span> << *mu->getMRVer() << <span class="stringliteral">"}"</span> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  }</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* storeNode = SVFUtil::dyn_cast<StoreSVFGNode>(node))</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <a class="code" href="classSVF_1_1SVFG.html#a8843ab4a4608f7f5f46f68ad31314c07">CHISet</a>& chiSet = <a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-><a class="code" href="classSVF_1_1MemSSA.html#a2e656a50f8964fc3e99d1d436de64418">getCHISet</a>(SVFUtil::cast<StoreStmt>(storeNode->getPAGEdge()));</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">for</span>(CHISet::iterator it = chiSet.begin(), eit = chiSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFG.html#ad14cdbb3f1df1f716aa03b4d39f4e52b">STORECHI</a>* chi = SVFUtil::dyn_cast<STORECHI>(*it))</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = <a class="code" href="classSVF_1_1SVFG.html#abd917826bf50ed409a307ce00562c97d">getDef</a>(chi->getOpVer());</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << def << <span class="stringliteral">" >= StoreNode | MVER: {"</span> << *chi->getOpVer() << <span class="stringliteral">"}"</span> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalINSVFGNode.html">FormalINSVFGNode</a>* formalIn = SVFUtil::dyn_cast<FormalINSVFGNode>(node))</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <a class="code" href="classSVF_1_1PTACallGraphEdge.html#adbedb15ac0f9395c5264f087a63bad3b">PTACallGraphEdge::CallInstSet</a> callInstSet;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-><a class="code" href="classSVF_1_1MemSSA.html#ad40617a1907b9a6b8cc24888ce54a0ac">getPTA</a>()-><a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-><a class="code" href="classSVF_1_1PTACallGraph.html#a0d2544130cc2cdc3ac418c975c278eb2">getDirCallSitesInvokingCallee</a>(formalIn->getFun(),callInstSet);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">for</span>(PTACallGraphEdge::CallInstSet::iterator it = callInstSet.begin(), eit = callInstSet.end(); it!=eit; ++it)</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = *it;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">if</span>(!<a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-><a class="code" href="classSVF_1_1MemSSA.html#af5e356e82c3f93b65bd89908e0f465dc">hasMU</a>(cs))</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <a class="code" href="classSVF_1_1SVFG.html#aa9f520779475e4783eccc45c460e346a">ActualINSVFGNodeSet</a>& actualIns = <a class="code" href="classSVF_1_1SVFG.html#a475205e221890204c7770c414ee63975">getActualINSVFGNodes</a>(cs);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">ActualINSVFGNodeSet::iterator</a> ait = actualIns.begin(), aeit = actualIns.end(); ait!=aeit; ++ait)</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::cast<ActualINSVFGNode>(<a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*ait));</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << actualIn-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() << <span class="stringliteral">" >= FormalINSVFGNode"</span> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  }</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalOUTSVFGNode.html">FormalOUTSVFGNode</a>* formalOut = SVFUtil::dyn_cast<FormalOUTSVFGNode>(node))</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>  <a class="code" href="classSVF_1_1PTACallGraphEdge.html#adbedb15ac0f9395c5264f087a63bad3b">PTACallGraphEdge::CallInstSet</a> callInstSet;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-><a class="code" href="classSVF_1_1MemSSA.html#ad40617a1907b9a6b8cc24888ce54a0ac">getPTA</a>()-><a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-><a class="code" href="classSVF_1_1PTACallGraph.html#a0d2544130cc2cdc3ac418c975c278eb2">getDirCallSitesInvokingCallee</a>(formalOut->getFun(),callInstSet);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">for</span>(PTACallGraphEdge::CallInstSet::iterator it = callInstSet.begin(), eit = callInstSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = *it;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">if</span>(!<a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-><a class="code" href="classSVF_1_1MemSSA.html#abfb338ce36ad46a9654d50dd6e2b07f1">hasCHI</a>(cs))</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <a class="code" href="classSVF_1_1SVFG.html#a2f6ed8a9f14657abc1e2a89247a84b99">ActualOUTSVFGNodeSet</a>& actualOuts = <a class="code" href="classSVF_1_1SVFG.html#a5b7ae610bee28acc2905ca82928e714f">getActualOUTSVFGNodes</a>(cs);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">ActualOUTSVFGNodeSet::iterator</a> ait = actualOuts.begin(), aeit = actualOuts.end(); ait!=aeit; ++ait)</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualOUTSVFGNode.html">ActualOUTSVFGNode</a>* actualOut = SVFUtil::cast<ActualOUTSVFGNode>(<a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*ait));</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << actualOut-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() << <span class="stringliteral">" >= FormalOUTSVFGNode"</span> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  }</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = <a class="code" href="classSVF_1_1SVFG.html#abd917826bf50ed409a307ce00562c97d">getDef</a>(formalOut->getMRVer());</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << def << <span class="stringliteral">" >= FormalOUTSVFGNode | intra"</span> << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::dyn_cast<ActualINSVFGNode>(node))</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  {</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = <a class="code" href="classSVF_1_1SVFG.html#abd917826bf50ed409a307ce00562c97d">getDef</a>(actualIn->getMRVer());</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << def << <span class="stringliteral">" >= ActualINSVFGNode"</span> << <span class="stringliteral">"\n"</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"> 184</span>  }</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MSSAPHISVFGNode.html">MSSAPHISVFGNode</a>* phiNode = SVFUtil::dyn_cast<MSSAPHISVFGNode>(node))</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">for</span> (MemSSA::PHI::OPVers::const_iterator it = phiNode->opVerBegin(), eit = phiNode->opVerEnd();</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  it != eit; it++)</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* op = it->second;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = <a class="code" href="classSVF_1_1SVFG.html#abd917826bf50ed409a307ce00562c97d">getDef</a>(op);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  f << <span class="stringliteral">"srcSVFGNodeID: "</span> << nodeId << <span class="stringliteral">" => "</span> << <span class="stringliteral">"dstSVFGNodeID: "</span> << def << <span class="stringliteral">" >= PHISVFGNode | MVER: {"</span> << *op << <span class="stringliteral">"}"</span> << <span class="stringliteral">"\n"</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"> 194</span>  }</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="comment">// Job finish and close file</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  f.close();</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">if</span> (f.good())</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  {</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keywordflow">return</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"> 203</span> }</div><div class="ttc" id="classSVF_1_1MRVer_html"><div class="ttname"><a href="classSVF_1_1MRVer.html">SVF::MRVer</a></div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00043">MSSAMuChi.h:43</a></div></div>
|
|
3705
3705
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a2e656a50f8964fc3e99d1d436de64418"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a2e656a50f8964fc3e99d1d436de64418">SVF::MemSSA::getCHISet</a></div><div class="ttdeci">CHISet & getCHISet(const StoreStmt *st)</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00392">MemSSA.h:392</a></div></div>
|
|
3706
3706
|
<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>
|
|
3707
3707
|
<div class="ttc" id="classSVF_1_1StoreVFGNode_html"><div class="ttname"><a href="classSVF_1_1StoreVFGNode.html">SVF::StoreVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00240">VFGNode.h:240</a></div></div>
|