svf-tools 1.0.561 → 1.0.564

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.
Files changed (154) hide show
  1. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +7 -38
  2. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +1 -1
  3. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +3 -3
  4. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +7 -7
  5. package/SVF-doxygen/html/html/DDAStat_8h_source.html +1 -1
  6. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +2 -2
  7. package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +17 -17
  8. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +17 -17
  9. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +3 -3
  10. package/SVF-doxygen/html/html/ICFGStat_8h_source.html +2 -2
  11. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +2 -1
  12. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +10 -10
  13. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +2 -2
  14. package/SVF-doxygen/html/html/MHP_8cpp_source.html +2 -2
  15. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +4 -4
  16. package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
  17. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +1 -1
  18. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +1 -1
  19. package/SVF-doxygen/html/html/PTAStat_8cpp.html +0 -1
  20. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +9 -111
  21. package/SVF-doxygen/html/html/PTAStat_8h_source.html +7 -69
  22. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +1 -1
  23. package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +6 -6
  24. package/SVF-doxygen/html/html/SVFGStat_8h_source.html +1 -1
  25. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +2 -1
  26. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +37 -37
  27. package/SVF-doxygen/html/html/SVFModule_8cpp.html +1 -0
  28. package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +6 -2
  29. package/SVF-doxygen/html/html/SVFModule_8h_source.html +1 -1
  30. package/SVF-doxygen/html/html/SVFStat_8cpp_source.html +65 -3
  31. package/SVF-doxygen/html/html/SVFStat_8h_source.html +16 -11
  32. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +7 -7
  33. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +3 -3
  34. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +1 -1
  35. package/SVF-doxygen/html/html/cfl_8cpp.html +1 -1
  36. package/SVF-doxygen/html/html/cfl_8cpp_source.html +1 -1
  37. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +4 -4
  38. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +4 -4
  39. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat-members.html +18 -68
  40. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +23 -208
  41. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +2 -2
  42. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +1 -1
  43. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +3 -3
  44. package/SVF-doxygen/html/html/classSVF_1_1DDAStat-members.html +17 -67
  45. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +22 -176
  46. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +4 -4
  47. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +50 -50
  48. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +3 -3
  49. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +13 -13
  50. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat-members.html +20 -70
  51. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +20 -188
  52. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat-members.html +17 -67
  53. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +18 -172
  54. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +36 -33
  55. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +5 -5
  56. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +3 -3
  57. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +1 -1
  58. package/SVF-doxygen/html/html/classSVF_1_1MTAStat-members.html +23 -73
  59. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +26 -180
  60. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +2 -2
  61. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat-members.html +22 -72
  62. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +18 -172
  63. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +3 -3
  64. package/SVF-doxygen/html/html/classSVF_1_1PTAStat-members.html +11 -64
  65. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +33 -1830
  66. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +1 -1
  67. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat-members.html +48 -98
  68. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +32 -186
  69. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +128 -122
  70. package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +5 -2
  71. package/SVF-doxygen/html/html/classSVF_1_1SVFStat-members.html +22 -17
  72. package/SVF-doxygen/html/html/classSVF_1_1SVFStat.html +237 -34
  73. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +1 -1
  74. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +6 -6
  75. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat-members.html +17 -67
  76. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +20 -187
  77. package/SVF-doxygen/html/html/dda_8cpp.html +1 -1
  78. package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
  79. package/SVF-doxygen/html/html/functions_a.html +5 -9
  80. package/SVF-doxygen/html/html/functions_b.html +8 -11
  81. package/SVF-doxygen/html/html/functions_c.html +2 -2
  82. package/SVF-doxygen/html/html/functions_e.html +2 -3
  83. package/SVF-doxygen/html/html/functions_f.html +6 -6
  84. package/SVF-doxygen/html/html/functions_func_b.html +1 -4
  85. package/SVF-doxygen/html/html/functions_func_p.html +4 -5
  86. package/SVF-doxygen/html/html/functions_i.html +3 -3
  87. package/SVF-doxygen/html/html/functions_l.html +6 -6
  88. package/SVF-doxygen/html/html/functions_m.html +1 -9
  89. package/SVF-doxygen/html/html/functions_n.html +0 -114
  90. package/SVF-doxygen/html/html/functions_o.html +3 -3
  91. package/SVF-doxygen/html/html/functions_p.html +18 -27
  92. package/SVF-doxygen/html/html/functions_s.html +12 -21
  93. package/SVF-doxygen/html/html/functions_t.html +14 -22
  94. package/SVF-doxygen/html/html/functions_u.html +0 -3
  95. package/SVF-doxygen/html/html/functions_v.html +6 -6
  96. package/SVF-doxygen/html/html/functions_vars_a.html +0 -4
  97. package/SVF-doxygen/html/html/functions_vars_e.html +1 -2
  98. package/SVF-doxygen/html/html/functions_vars_m.html +1 -9
  99. package/SVF-doxygen/html/html/functions_vars_n.html +0 -114
  100. package/SVF-doxygen/html/html/functions_vars_p.html +1 -7
  101. package/SVF-doxygen/html/html/functions_vars_s.html +1 -8
  102. package/SVF-doxygen/html/html/functions_vars_t.html +9 -15
  103. package/SVF-doxygen/html/html/functions_vars_u.html +0 -3
  104. package/SVF-doxygen/html/html/mta_8cpp.html +1 -1
  105. package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
  106. package/SVF-doxygen/html/html/saber_8cpp.html +1 -1
  107. package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
  108. package/SVF-doxygen/html/html/search/all_1.js +1 -2
  109. package/SVF-doxygen/html/html/search/all_10.js +12 -14
  110. package/SVF-doxygen/html/html/search/all_11.js +1 -1
  111. package/SVF-doxygen/html/html/search/all_12.js +9 -11
  112. package/SVF-doxygen/html/html/search/all_13.js +7 -9
  113. package/SVF-doxygen/html/html/search/all_14.js +1 -1
  114. package/SVF-doxygen/html/html/search/all_15.js +4 -4
  115. package/SVF-doxygen/html/html/search/all_16.js +1 -1
  116. package/SVF-doxygen/html/html/search/all_2.js +1 -2
  117. package/SVF-doxygen/html/html/search/all_3.js +1 -1
  118. package/SVF-doxygen/html/html/search/all_5.js +2 -2
  119. package/SVF-doxygen/html/html/search/all_6.js +2 -2
  120. package/SVF-doxygen/html/html/search/all_9.js +1 -1
  121. package/SVF-doxygen/html/html/search/all_c.js +4 -4
  122. package/SVF-doxygen/html/html/search/all_d.js +2 -4
  123. package/SVF-doxygen/html/html/search/all_e.js +4 -40
  124. package/SVF-doxygen/html/html/search/all_f.js +2 -2
  125. package/SVF-doxygen/html/html/search/functions_1.js +1 -2
  126. package/SVF-doxygen/html/html/search/functions_f.js +3 -3
  127. package/SVF-doxygen/html/html/search/variables_1.js +1 -2
  128. package/SVF-doxygen/html/html/search/variables_10.js +1 -3
  129. package/SVF-doxygen/html/html/search/variables_12.js +1 -3
  130. package/SVF-doxygen/html/html/search/variables_13.js +6 -8
  131. package/SVF-doxygen/html/html/search/variables_14.js +1 -1
  132. package/SVF-doxygen/html/html/search/variables_5.js +1 -1
  133. package/SVF-doxygen/html/html/search/variables_c.js +1 -1
  134. package/SVF-doxygen/html/html/search/variables_d.js +2 -4
  135. package/SVF-doxygen/html/html/search/variables_e.js +4 -40
  136. package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
  137. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
  138. package/SVF-doxygen/html/html/wpa_8cpp.html +1 -1
  139. package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
  140. package/include/DDA/DDAVFSolver.h +4 -4
  141. package/include/Util/PTAStat.h +0 -79
  142. package/include/Util/SVFStat.h +7 -2
  143. package/lib/MTA/LockAnalysis.cpp +4 -4
  144. package/lib/MTA/MHP.cpp +2 -2
  145. package/lib/SVF-FE/LLVMModule.cpp +5 -0
  146. package/lib/SVF-FE/SVFIRBuilder.cpp +26 -0
  147. package/lib/Util/ExtAPI.cpp +42 -0
  148. package/lib/Util/PTAStat.cpp +7 -254
  149. package/lib/Util/SVFModule.cpp +4 -0
  150. package/lib/Util/SVFStat.cpp +202 -2
  151. package/lib/WPA/AndersenStat.cpp +31 -31
  152. package/lib/WPA/FlowSensitiveStat.cpp +14 -14
  153. package/lib/WPA/VersionedFlowSensitiveStat.cpp +13 -13
  154. package/package.json +1 -1
@@ -122,7 +122,7 @@ $(function() {
122
122
  <div class="ttc" id="namespaceSVF_1_1LLVMUtil_html_accdd44093d6d145dc92edeaaff3f5732"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#accdd44093d6d145dc92edeaaff3f5732">SVF::LLVMUtil::processArguments</a></div><div class="ttdeci">void processArguments(int argc, char **argv, int &amp;arg_num, char **arg_value, std::vector&lt; std::string &gt; &amp;moduleNameVec)</div><div class="ttdoc">Parse argument for multi-module analysis. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00436">LLVMUtil.cpp:436</a></div></div>
123
123
  <div class="ttc" id="classSVF_1_1PointsTo_html"><div class="ttname"><a href="classSVF_1_1PointsTo.html">SVF::PointsTo</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00028">PointsTo.h:28</a></div></div>
124
124
  <div class="ttc" id="classSVF_1_1SVFIR_html"><div class="ttname"><a href="classSVF_1_1SVFIR.html">SVF::SVFIR</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00043">SVFIR.h:43</a></div></div>
125
- <div class="ttc" id="classSVF_1_1SVFModule_html_aa03ab5272652290f30870c6e2d053d98"><div class="ttname"><a href="classSVF_1_1SVFModule.html#aa03ab5272652290f30870c6e2d053d98">SVF::SVFModule::buildSymbolTableInfo</a></div><div class="ttdeci">void buildSymbolTableInfo()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8cpp_source.html#l00030">SVFModule.cpp:30</a></div></div>
125
+ <div class="ttc" id="classSVF_1_1SVFModule_html_aa03ab5272652290f30870c6e2d053d98"><div class="ttname"><a href="classSVF_1_1SVFModule.html#aa03ab5272652290f30870c6e2d053d98">SVF::SVFModule::buildSymbolTableInfo</a></div><div class="ttdeci">void buildSymbolTableInfo()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8cpp_source.html#l00031">SVFModule.cpp:31</a></div></div>
126
126
  <div class="ttc" id="classSVF_1_1SVFIR_html_aa1943d53e75aef9b014953143c6894da"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00132">SVFIR.h:132</a></div></div>
127
127
  <div class="ttc" id="svf-ex_8cpp_html_af45b449c07f1c975eea45d40d1cc37f6"><div class="ttname"><a href="svf-ex_8cpp.html#af45b449c07f1c975eea45d40d1cc37f6">traverseOnICFG</a></div><div class="ttdeci">void traverseOnICFG(ICFG *icfg, const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="svf-ex_8cpp_source.html#l00080">svf-ex.cpp:80</a></div></div>
128
128
  <div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
@@ -154,7 +154,7 @@ Functions</h2></td></tr>
154
154
  <div class="fragment"><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;{</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">int</span> arg_num = 0;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">char</span> **arg_value = <span class="keyword">new</span> <span class="keywordtype">char</span>*[argc];</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; std::vector&lt;std::string&gt; moduleNameVec;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#accdd44093d6d145dc92edeaaff3f5732">LLVMUtil::processArguments</a>(argc, argv, arg_num, arg_value, moduleNameVec);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; cl::ParseCommandLineOptions(arg_num, arg_value,</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="stringliteral">&quot;Whole Program Points-to Analysis\n&quot;</span>);</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">if</span> (Options::WriteAnder == <span class="stringliteral">&quot;ir_annotator&quot;</span>)</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; LLVMModuleSet::getLLVMModuleSet()-&gt;preProcessBCs(moduleNameVec);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule = LLVMModuleSet::getLLVMModuleSet()-&gt;buildSVFModule(moduleNameVec);</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#aa03ab5272652290f30870c6e2d053d98">buildSymbolTableInfo</a>();</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="classSVF_1_1WPAPass.html">WPAPass</a> *wpa = <span class="keyword">new</span> <a class="code" href="classSVF_1_1WPAPass.html">WPAPass</a>();</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; wpa-&gt;<a class="code" href="classSVF_1_1WPAPass.html#a394dcd976c1ef08d9cadcba8f5d07c75">runOnModule</a>(svfModule);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFModule_html"><div class="ttname"><a href="classSVF_1_1SVFModule.html">SVF::SVFModule</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00041">SVFModule.h:41</a></div></div>
155
155
  <div class="ttc" id="classSVF_1_1WPAPass_html"><div class="ttname"><a href="classSVF_1_1WPAPass.html">SVF::WPAPass</a></div><div class="ttdef"><b>Definition:</b> <a href="WPAPass_8h_source.html#l00054">WPAPass.h:54</a></div></div>
156
156
  <div class="ttc" id="namespaceSVF_1_1LLVMUtil_html_accdd44093d6d145dc92edeaaff3f5732"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#accdd44093d6d145dc92edeaaff3f5732">SVF::LLVMUtil::processArguments</a></div><div class="ttdeci">void processArguments(int argc, char **argv, int &amp;arg_num, char **arg_value, std::vector&lt; std::string &gt; &amp;moduleNameVec)</div><div class="ttdoc">Parse argument for multi-module analysis. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00436">LLVMUtil.cpp:436</a></div></div>
157
- <div class="ttc" id="classSVF_1_1SVFModule_html_aa03ab5272652290f30870c6e2d053d98"><div class="ttname"><a href="classSVF_1_1SVFModule.html#aa03ab5272652290f30870c6e2d053d98">SVF::SVFModule::buildSymbolTableInfo</a></div><div class="ttdeci">void buildSymbolTableInfo()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8cpp_source.html#l00030">SVFModule.cpp:30</a></div></div>
157
+ <div class="ttc" id="classSVF_1_1SVFModule_html_aa03ab5272652290f30870c6e2d053d98"><div class="ttname"><a href="classSVF_1_1SVFModule.html#aa03ab5272652290f30870c6e2d053d98">SVF::SVFModule::buildSymbolTableInfo</a></div><div class="ttdeci">void buildSymbolTableInfo()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8cpp_source.html#l00031">SVFModule.cpp:31</a></div></div>
158
158
  <div class="ttc" id="classSVF_1_1WPAPass_html_a394dcd976c1ef08d9cadcba8f5d07c75"><div class="ttname"><a href="classSVF_1_1WPAPass.html#a394dcd976c1ef08d9cadcba8f5d07c75">SVF::WPAPass::runOnModule</a></div><div class="ttdeci">virtual void runOnModule(SVFModule *svfModule)</div><div class="ttdoc">Run pointer analysis on SVFModule. </div><div class="ttdef"><b>Definition:</b> <a href="WPAPass_8cpp_source.html#l00070">WPAPass.cpp:70</a></div></div>
159
159
  </div><!-- fragment -->
160
160
  </div>
@@ -76,7 +76,7 @@ $(function() {
76
76
  <div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
77
77
  <div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8h_source.html#l00035">CFGNormalizer.h:35</a></div></div>
78
78
  <div class="ttc" id="namespaceSVF_1_1LLVMUtil_html_accdd44093d6d145dc92edeaaff3f5732"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#accdd44093d6d145dc92edeaaff3f5732">SVF::LLVMUtil::processArguments</a></div><div class="ttdeci">void processArguments(int argc, char **argv, int &amp;arg_num, char **arg_value, std::vector&lt; std::string &gt; &amp;moduleNameVec)</div><div class="ttdoc">Parse argument for multi-module analysis. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00436">LLVMUtil.cpp:436</a></div></div>
79
- <div class="ttc" id="classSVF_1_1SVFModule_html_aa03ab5272652290f30870c6e2d053d98"><div class="ttname"><a href="classSVF_1_1SVFModule.html#aa03ab5272652290f30870c6e2d053d98">SVF::SVFModule::buildSymbolTableInfo</a></div><div class="ttdeci">void buildSymbolTableInfo()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8cpp_source.html#l00030">SVFModule.cpp:30</a></div></div>
79
+ <div class="ttc" id="classSVF_1_1SVFModule_html_aa03ab5272652290f30870c6e2d053d98"><div class="ttname"><a href="classSVF_1_1SVFModule.html#aa03ab5272652290f30870c6e2d053d98">SVF::SVFModule::buildSymbolTableInfo</a></div><div class="ttdeci">void buildSymbolTableInfo()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8cpp_source.html#l00031">SVFModule.cpp:31</a></div></div>
80
80
  <div class="ttc" id="classSVF_1_1WPAPass_html_a394dcd976c1ef08d9cadcba8f5d07c75"><div class="ttname"><a href="classSVF_1_1WPAPass.html#a394dcd976c1ef08d9cadcba8f5d07c75">SVF::WPAPass::runOnModule</a></div><div class="ttdeci">virtual void runOnModule(SVFModule *svfModule)</div><div class="ttdoc">Run pointer analysis on SVFModule. </div><div class="ttdef"><b>Definition:</b> <a href="WPAPass_8cpp_source.html#l00070">WPAPass.cpp:70</a></div></div>
81
81
  <div class="ttc" id="LLVMUtil_8h_html"><div class="ttname"><a href="LLVMUtil_8h.html">LLVMUtil.h</a></div></div>
82
82
  </div><!-- fragment --></div><!-- contents -->
@@ -422,11 +422,11 @@ protected:
422
422
  {
423
423
  DPIm dpm(oldDpm);
424
424
  dpm.setLocVar(edge->getSrcNode(),ptr);
425
- DOTIMESTAT(double start = DDAStat::getClk());
425
+ DOTIMESTAT(double start = DDAStat::getClk(true));
426
426
  /// handle context-/path- sensitivity
427
427
  if(handleBKCondition(dpm,edge)==false)
428
428
  {
429
- DOTIMESTAT(ddaStat->_TotalTimeOfBKCondition += DDAStat::getClk() - start);
429
+ DOTIMESTAT(ddaStat->_TotalTimeOfBKCondition += DDAStat::getClk(true) - start);
430
430
  DBOUT(DDDA, SVFUtil::outs() << "\t!!! infeasible path svfgNode: " << edge->getDstID() << " --| " << edge->getSrcID() << "\n");
431
431
  DOSTAT(ddaStat->_NumOfInfeasiblePath++);
432
432
  return;
@@ -562,9 +562,9 @@ protected:
562
562
  {
563
563
  if (unionDDAPts(dpm, pts))
564
564
  {
565
- DOSTAT(double start = DDAStat::getClk());
565
+ DOSTAT(double start = DDAStat::getClk(true));
566
566
  reCompute(dpm);
567
- DOSTAT(ddaStat->_AnaTimeCyclePerQuery += DDAStat::getClk() - start);
567
+ DOSTAT(ddaStat->_AnaTimeCyclePerQuery += DDAStat::getClk(true) - start);
568
568
  }
569
569
  }
570
570
  virtual inline const CPtSet& getCachedTLPointsTo(const DPIm& dpm)
@@ -48,95 +48,16 @@ class PointerAnalysis;
48
48
  class PTAStat: public SVFStat
49
49
  {
50
50
  public:
51
- static const char* TotalAnalysisTime; ///< Total analysis time
52
- static const char* SCCDetectionTime; ///< Total SCC detection time
53
- static const char* SCCMergeTime; ///< Total SCC merge time
54
-
55
- static const char* ProcessLoadStoreTime;///< time of processing loads and stores
56
- static const char* ProcessCopyGepTime; ///< time of processing copys and geps
57
- static const char* UpdateCallGraphTime; ///< time of updating call graph
58
-
59
- static const char* TotalNumOfPointers; ///< Total SVFIR value node
60
- static const char* TotalNumOfObjects; ///< Total SVFIR object node
61
- static const char* TotalNumOfFieldObjects; ///< Total SVFIR field object node
62
- static const char* MaxStructSize; ///< Max struct size
63
- static const char* TotalNumOfEdges; ///< Total SVFIR edge number
64
-
65
- static const char* NumOfAddrs; ///< SVFIR addr edge
66
- static const char* NumOfLoads; ///< SVFIR load edge
67
- static const char* NumOfStores; ///< SVFIR store edge
68
- static const char* NumOfCopys; ///< SVFIR copy edge
69
- static const char* NumOfGeps; ///< SVFIR gep edge
70
- static const char* NumOfCalls; ///< SVFIR call edge
71
- static const char* NumOfReturns; ///< SVFIR return edge
72
-
73
- static const char* NumOfProcessedAddrs; ///< SVFIR processed addr edge
74
- static const char* NumOfProcessedLoads; ///< SVFIR processed load edge
75
- static const char* NumOfProcessedStores; ///< SVFIR processed store edge
76
- static const char* NumOfProcessedCopys; ///< SVFIR processed copy edge
77
- static const char* NumOfProcessedGeps; ///< SVFIR processed gep edge
78
-
79
- static const char* NumOfSfr; ///< num of field representatives
80
- static const char* NumOfFieldExpand;
81
-
82
- static const char* NumOfFunctionObjs; ///< Function numbers
83
- static const char* NumOfGlobalObjs; ///< SVFIR global object node
84
- static const char* NumOfHeapObjs; ///< SVFIR heap object node
85
- static const char* NumOfStackObjs; ///< SVFIR stack object node
86
-
87
- static const char* NumOfObjsHasVarStruct; ///< SVFIR object node has var struct (maybe nested with array)
88
- static const char* NumOfObjsHasVarArray; ///< SVFIR object node has var array (maybe nested with struct)
89
- static const char* NumOfObjsHasConstStruct; ///< SVFIR object node has const struct (maybe nested with array)
90
- static const char* NumOfObjsHasConstArray; ///< SVFIR object node has const array (maybe nested with struct)
91
- static const char* NumOfNonPtrObjs; ///< SVFIR object node which is non pointer type object (do not have pts)
92
- static const char* NumOfConstantObjs; ///< SVFIR object node which is purely constant
93
-
94
- static const char* NumberOfFieldInsensitiveObj;
95
- static const char* NumberOfFieldSensitiveObj;
96
-
97
- static const char* NumOfPointers; ///< SVFIR value node, each of them maps to a llvm value
98
- static const char* NumOfGepFieldPointers; ///< SVFIR gep value node (field value, dynamically created dummy node)
99
-
100
- static const char* NumOfMemObjects; ///< SVFIR object node, each of them maps to a llvm value
101
- static const char* NumOfGepFieldObjects; ///< SVFIR gep object node (field obj, dynamically created dummy node)
102
-
103
- static const char* AveragePointsToSetSize; ///< Average points-to size of all variables
104
- static const char* AverageTopLevPointsToSetSize; ///< Average points-to size of top-level variables
105
- static const char* MaxPointsToSetSize; ///< Max points-to size
106
-
107
- static const char* NumOfIterations; ///< Number of iterations during resolution
108
-
109
- static const char* NumOfIndirectCallSites; ///< Number of indirect callsites
110
- static const char* NumOfIndirectEdgeSolved; ///< Number of indirect calledge resolved
111
-
112
- static const char* NumOfSCCDetection; ///< Number of scc detection performed
113
- static const char* NumOfCycles; ///< Number of scc cycles detected
114
- static const char* NumOfPWCCycles; ///< Number of scc cycles detected
115
- static const char* NumOfNodesInCycles; ///< Number of nodes in cycles detected
116
- static const char* MaxNumOfNodesInSCC; ///< max Number of nodes in one scc
117
-
118
- static const char* NumOfNullPointer; ///< Number of pointers points-to null
119
-
120
51
  PTAStat(PointerAnalysis* p);
121
52
  virtual ~PTAStat() {}
122
53
 
123
- NUMStatMap PTNumStatMap;
124
54
  NodeBS localVarInRecursion;
125
55
 
126
- double startTime;
127
- double endTime;
128
-
129
56
  void performStat() override;
130
57
 
131
- virtual void printStat(std::string str = "") override;
132
-
133
58
  void callgraphStat() override;
134
59
  private:
135
- void bitcastInstStat();
136
- void branchStat();
137
-
138
60
  PointerAnalysis* pta;
139
- std::string moduleName;
140
61
  };
141
62
 
142
63
  } // End namespace SVF
@@ -71,6 +71,7 @@ public:
71
71
  static double getClk(bool mark = false);
72
72
 
73
73
  NUMStatMap generalNumMap;
74
+ NUMStatMap PTNumStatMap;
74
75
  TIMEStatMap timeStatMap;
75
76
 
76
77
  double startTime;
@@ -78,7 +79,7 @@ public:
78
79
 
79
80
  virtual void performStat() = 0;
80
81
 
81
- virtual void printStat(std::string str = "") = 0;
82
+ virtual void printStat(std::string str = "");
82
83
 
83
84
  virtual void performStatPerQuery(NodeID) {}
84
85
 
@@ -86,8 +87,12 @@ public:
86
87
 
87
88
  virtual void callgraphStat() {}
88
89
 
89
- private:
90
+ static double timeOfBuildingLLVMModule;
91
+ static double timeOfBuildingSymbolTable;
92
+ static double timeOfBuildingSVFIR;
90
93
 
94
+ private:
95
+ void branchStat();
91
96
  std::string moduleName;
92
97
  }; // End class SVFStat
93
98
 
@@ -591,12 +591,12 @@ bool LockAnalysis::isProtectedByCommonLock(const Instruction *i1, const Instruct
591
591
  {
592
592
  numOfTotalQueries++;
593
593
  bool commonlock = false;
594
- DOTIMESTAT(double queryStart = PTAStat::getClk());
594
+ DOTIMESTAT(double queryStart = PTAStat::getClk(true));
595
595
  if (isInsideIntraLock(i1) && isInsideIntraLock(i2))
596
596
  commonlock = isProtectedByCommonCILock(i1,i2) ;
597
597
  else
598
598
  commonlock = isProtectedByCommonCxtLock(i1,i2);
599
- DOTIMESTAT(double queryEnd = PTAStat::getClk());
599
+ DOTIMESTAT(double queryEnd = PTAStat::getClk(true));
600
600
  DOTIMESTAT(lockQueriesTime += (queryEnd - queryStart) / TIMEINTERVAL);
601
601
  return commonlock;
602
602
  }
@@ -667,7 +667,7 @@ bool LockAnalysis::isProtectedByCommonCxtLock(const Instruction *i1, const Instr
667
667
  */
668
668
  bool LockAnalysis::isInSameSpan(const Instruction *i1, const Instruction *i2)
669
669
  {
670
- DOTIMESTAT(double queryStart = PTAStat::getClk());
670
+ DOTIMESTAT(double queryStart = PTAStat::getClk(true));
671
671
 
672
672
  bool sameSpan = false;
673
673
  if (isInsideIntraLock(i1) && isInsideIntraLock(i2))
@@ -675,7 +675,7 @@ bool LockAnalysis::isInSameSpan(const Instruction *i1, const Instruction *i2)
675
675
  else
676
676
  sameSpan = isInSameCSSpan(i1, i2);
677
677
 
678
- DOTIMESTAT(double queryEnd = PTAStat::getClk());
678
+ DOTIMESTAT(double queryEnd = PTAStat::getClk(true));
679
679
  DOTIMESTAT(lockQueriesTime += (queryEnd - queryStart) / TIMEINTERVAL);
680
680
  return sameSpan;
681
681
  }
package/lib/MTA/MHP.cpp CHANGED
@@ -627,9 +627,9 @@ bool MHP::mayHappenInParallel(const Instruction* i1, const Instruction* i2)
627
627
  {
628
628
  numOfTotalQueries++;
629
629
 
630
- DOTIMESTAT(double queryStart = PTAStat::getClk());
630
+ DOTIMESTAT(double queryStart = PTAStat::getClk(true));
631
631
  bool mhp=mayHappenInParallelCache(i1,i2);
632
- DOTIMESTAT(double queryEnd = PTAStat::getClk());
632
+ DOTIMESTAT(double queryEnd = PTAStat::getClk(true));
633
633
  DOTIMESTAT(interleavingQueriesTime += (queryEnd - queryStart) / TIMEINTERVAL);
634
634
 
635
635
  return mhp;
@@ -83,6 +83,8 @@ SVFModule* LLVMModuleSet::buildSVFModule(Module &mod)
83
83
 
84
84
  SVFModule* LLVMModuleSet::buildSVFModule(const std::vector<std::string> &moduleNameVec)
85
85
  {
86
+ double startTime = SVFStat::getClk(true);
87
+
86
88
  assert(llvmModuleSet && "LLVM Module set needs to be created!");
87
89
 
88
90
  loadModules(moduleNameVec);
@@ -94,6 +96,9 @@ SVFModule* LLVMModuleSet::buildSVFModule(const std::vector<std::string> &moduleN
94
96
 
95
97
  build();
96
98
 
99
+ double endTime = SVFStat::getClk(true);
100
+ SVFStat::timeOfBuildingLLVMModule = (endTime - startTime)/TIMEINTERVAL;
101
+
97
102
  return svfModule;
98
103
  }
99
104
 
@@ -49,6 +49,7 @@ using namespace LLVMUtil;
49
49
  */
50
50
  SVFIR* SVFIRBuilder::build(SVFModule* svfModule)
51
51
  {
52
+ double startTime = SVFStat::getClk(true);
52
53
 
53
54
  // We read SVFIR from a user-defined txt instead of parsing SVFIR from LLVM IR
54
55
  if (SVFModule::pagReadFromTXT())
@@ -141,6 +142,10 @@ SVFIR* SVFIRBuilder::build(SVFModule* svfModule)
141
142
  LLVMLoopAnalysis loopAnalysis;
142
143
  loopAnalysis.build(pag->getICFG());
143
144
  }
145
+
146
+ double endTime = SVFStat::getClk(true);
147
+ SVFStat::timeOfBuildingSVFIR = (endTime - startTime)/TIMEINTERVAL;
148
+
144
149
  return pag;
145
150
  }
146
151
 
@@ -1281,6 +1286,27 @@ void SVFIRBuilder::handleExtCall(CallSite cs, const SVFFunction *callee)
1281
1286
  else
1282
1287
  writeWrnMsg("We need two valid NodeIDs and an offset to add a Gep edge");
1283
1288
  }
1289
+ else if (op.getOperator() == "BinaryOPStmt")
1290
+ {
1291
+ if (op.getOperands().size() == 4)
1292
+ addBinaryOPEdge(op.getOperands()[0], op.getOperands()[1], op.getOperands()[2], op.getOperands()[3]);
1293
+ else
1294
+ writeWrnMsg("We need four valid NodeIDs to add a BinaryOP edge");
1295
+ }
1296
+ else if (op.getOperator() == "UnaryOPStmt")
1297
+ {
1298
+ if (op.getOperands().size() == 3)
1299
+ addUnaryOPEdge(op.getOperands()[0], op.getOperands()[1], op.getOperands()[2]);
1300
+ else
1301
+ writeWrnMsg("We need three valid NodeIDs to add a UnaryOP edge");
1302
+ }
1303
+ else if (op.getOperator() == "CmpStmt")
1304
+ {
1305
+ if (op.getOperands().size() == 4)
1306
+ addCmpEdge(op.getOperands()[0], op.getOperands()[1], op.getOperands()[2], op.getOperands()[3]);
1307
+ else
1308
+ writeWrnMsg("We need four valid NodeIDs to add a CmpStmt edge");
1309
+ }
1284
1310
  else if (op.getOperator() == "memset_like")
1285
1311
  {
1286
1312
  // this is for memset(void *str, int c, size_t n)
@@ -266,6 +266,48 @@ s32_t ExtAPI::getNodeIDType(std::string s)
266
266
  return -2;
267
267
  else if(argStr == "Obj")
268
268
  return -3;
269
+ else if(argStr == "Add")
270
+ return BinaryOperator::Add;
271
+ else if(argStr == "Sub")
272
+ return BinaryOperator::Sub;
273
+ else if(argStr == "Mul")
274
+ return BinaryOperator::Mul;
275
+ else if(argStr == "SDiv")
276
+ return BinaryOperator::SDiv;
277
+ else if(argStr == "SRem")
278
+ return BinaryOperator::SRem;
279
+ else if(argStr == "Xor")
280
+ return BinaryOperator::Xor;
281
+ else if(argStr == "And")
282
+ return BinaryOperator::And;
283
+ else if(argStr == "Or")
284
+ return BinaryOperator::Or;
285
+ else if(argStr == "AShr")
286
+ return BinaryOperator::AShr;
287
+ else if(argStr == "Shl")
288
+ return BinaryOperator::Shl;
289
+ else if(argStr == "ICMP_EQ")
290
+ return CmpInst::ICMP_EQ;
291
+ else if(argStr == "ICMP_NE")
292
+ return CmpInst::ICMP_NE;
293
+ else if(argStr == "ICMP_UGT")
294
+ return CmpInst::ICMP_UGT;
295
+ else if(argStr == "ICMP_SGT")
296
+ return CmpInst::ICMP_SGT;
297
+ else if(argStr == "ICMP_UGE")
298
+ return CmpInst::ICMP_UGE;
299
+ else if(argStr == "ICMP_SGE")
300
+ return CmpInst::ICMP_SGE;
301
+ else if(argStr == "ICMP_ULT")
302
+ return CmpInst::ICMP_ULT;
303
+ else if(argStr == "ICMP_SLT")
304
+ return CmpInst::ICMP_SLT;
305
+ else if(argStr == "ICMP_ULE")
306
+ return CmpInst::ICMP_ULE;
307
+ else if(argStr == "ICMP_SLE")
308
+ return CmpInst::ICMP_SLE;
309
+ else if(argStr == "FNeg")
310
+ return UnaryOperator::FNeg;
269
311
  else // offset
270
312
  {
271
313
  u32_t i=0;