svf-tools 1.0.562 → 1.0.565

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 (187) hide show
  1. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +7 -38
  2. package/SVF-doxygen/html/html/BreakConstantExpr_8h_source.html +1 -2
  3. package/SVF-doxygen/html/html/CFGNormalizer_8cpp_source.html +11 -10
  4. package/SVF-doxygen/html/html/CFGNormalizer_8h_source.html +10 -9
  5. package/SVF-doxygen/html/html/CFLGrammar_8txt.html +37 -37
  6. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +2 -3
  7. package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +1 -2
  8. package/SVF-doxygen/html/html/CPPUtil_8h.html +4 -4
  9. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +3 -3
  10. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +7 -7
  11. package/SVF-doxygen/html/html/DDAStat_8h_source.html +1 -1
  12. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +2 -2
  13. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +3 -3
  14. package/SVF-doxygen/html/html/ICFGStat_8h_source.html +2 -2
  15. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +2 -2
  16. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +10 -10
  17. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +2 -2
  18. package/SVF-doxygen/html/html/MHP_8cpp_source.html +2 -2
  19. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +1 -2
  20. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +4 -4
  21. package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
  22. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +1 -1
  23. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +1 -1
  24. package/SVF-doxygen/html/html/PEGGrammar_8txt.html +37 -138
  25. package/SVF-doxygen/html/html/PTAStat_8cpp.html +0 -1
  26. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +9 -111
  27. package/SVF-doxygen/html/html/PTAStat_8h_source.html +7 -69
  28. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +1 -1
  29. package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +6 -6
  30. package/SVF-doxygen/html/html/SVFGStat_8h_source.html +1 -1
  31. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +2 -1
  32. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +37 -37
  33. package/SVF-doxygen/html/html/SVFModule_8cpp.html +1 -0
  34. package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +6 -2
  35. package/SVF-doxygen/html/html/SVFModule_8h_source.html +1 -1
  36. package/SVF-doxygen/html/html/SVFStat_8cpp_source.html +65 -3
  37. package/SVF-doxygen/html/html/SVFStat_8h_source.html +16 -11
  38. package/SVF-doxygen/html/html/SVFUtil_8h.html +1 -1
  39. package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +1 -2
  40. package/SVF-doxygen/html/html/Util_2BasicTypes_8h.html +1 -1
  41. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +3 -3
  42. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +1 -1
  43. package/SVF-doxygen/html/html/cfl_8cpp.html +1 -1
  44. package/SVF-doxygen/html/html/cfl_8cpp_source.html +1 -1
  45. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +5 -5
  46. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +5 -5
  47. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +1 -1
  48. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat-members.html +18 -68
  49. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +23 -208
  50. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +3 -3
  51. package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +1 -1
  52. package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer-members.html +12 -11
  53. package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer.html +63 -28
  54. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +1 -1
  55. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +8 -11
  56. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +3 -3
  57. package/SVF-doxygen/html/html/classSVF_1_1DDAStat-members.html +17 -67
  58. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +22 -176
  59. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +4 -4
  60. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +12 -12
  61. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +3 -3
  62. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +13 -13
  63. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat-members.html +20 -70
  64. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +20 -188
  65. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat-members.html +17 -67
  66. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +18 -172
  67. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +36 -34
  68. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +5 -5
  69. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +3 -3
  70. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +2 -2
  71. package/SVF-doxygen/html/html/classSVF_1_1MTAStat-members.html +23 -73
  72. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +26 -180
  73. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +2 -2
  74. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat-members.html +22 -72
  75. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +18 -172
  76. package/SVF-doxygen/html/html/classSVF_1_1MergeFunctionRets.html +2 -3
  77. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +3 -3
  78. package/SVF-doxygen/html/html/classSVF_1_1PTAStat-members.html +11 -64
  79. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +33 -1830
  80. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +1 -1
  81. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat-members.html +48 -98
  82. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +32 -186
  83. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +125 -122
  84. package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +5 -2
  85. package/SVF-doxygen/html/html/classSVF_1_1SVFStat-members.html +22 -17
  86. package/SVF-doxygen/html/html/classSVF_1_1SVFStat.html +237 -34
  87. package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +1 -1
  88. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +1 -1
  89. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +1 -1
  90. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +6 -6
  91. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat-members.html +17 -67
  92. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +20 -187
  93. package/SVF-doxygen/html/html/dda_8cpp.html +1 -1
  94. package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
  95. package/SVF-doxygen/html/html/functions_a.html +5 -9
  96. package/SVF-doxygen/html/html/functions_b.html +8 -8
  97. package/SVF-doxygen/html/html/functions_c.html +2 -2
  98. package/SVF-doxygen/html/html/functions_e.html +2 -3
  99. package/SVF-doxygen/html/html/functions_f.html +6 -6
  100. package/SVF-doxygen/html/html/functions_func_b.html +6 -6
  101. package/SVF-doxygen/html/html/functions_func_p.html +4 -5
  102. package/SVF-doxygen/html/html/functions_func_s.html +1 -1
  103. package/SVF-doxygen/html/html/functions_m.html +1 -9
  104. package/SVF-doxygen/html/html/functions_n.html +0 -114
  105. package/SVF-doxygen/html/html/functions_o.html +6 -6
  106. package/SVF-doxygen/html/html/functions_p.html +15 -24
  107. package/SVF-doxygen/html/html/functions_s.html +12 -21
  108. package/SVF-doxygen/html/html/functions_t.html +14 -22
  109. package/SVF-doxygen/html/html/functions_u.html +0 -3
  110. package/SVF-doxygen/html/html/functions_v.html +6 -6
  111. package/SVF-doxygen/html/html/functions_vars_a.html +0 -4
  112. package/SVF-doxygen/html/html/functions_vars_e.html +1 -2
  113. package/SVF-doxygen/html/html/functions_vars_m.html +1 -9
  114. package/SVF-doxygen/html/html/functions_vars_n.html +0 -114
  115. package/SVF-doxygen/html/html/functions_vars_p.html +1 -7
  116. package/SVF-doxygen/html/html/functions_vars_s.html +1 -8
  117. package/SVF-doxygen/html/html/functions_vars_t.html +9 -15
  118. package/SVF-doxygen/html/html/functions_vars_u.html +0 -3
  119. package/SVF-doxygen/html/html/functions_w.html +11 -11
  120. package/SVF-doxygen/html/html/globals_a.html +0 -1
  121. package/SVF-doxygen/html/html/globals_c.html +5 -6
  122. package/SVF-doxygen/html/html/globals_e.html +0 -1
  123. package/SVF-doxygen/html/html/globals_f.html +2 -3
  124. package/SVF-doxygen/html/html/globals_func.html +3 -0
  125. package/SVF-doxygen/html/html/globals_g.html +5 -7
  126. package/SVF-doxygen/html/html/globals_m.html +3 -6
  127. package/SVF-doxygen/html/html/globals_vars.html +10 -19
  128. package/SVF-doxygen/html/html/mta_8cpp.html +1 -1
  129. package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
  130. package/SVF-doxygen/html/html/namespaceSVF.html +2 -2
  131. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +1 -1
  132. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +4 -4
  133. package/SVF-doxygen/html/html/saber_8cpp.html +1 -1
  134. package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
  135. package/SVF-doxygen/html/html/search/all_1.js +2 -3
  136. package/SVF-doxygen/html/html/search/all_10.js +10 -12
  137. package/SVF-doxygen/html/html/search/all_12.js +7 -9
  138. package/SVF-doxygen/html/html/search/all_13.js +7 -9
  139. package/SVF-doxygen/html/html/search/all_14.js +1 -1
  140. package/SVF-doxygen/html/html/search/all_15.js +4 -4
  141. package/SVF-doxygen/html/html/search/all_16.js +2 -2
  142. package/SVF-doxygen/html/html/search/all_2.js +2 -2
  143. package/SVF-doxygen/html/html/search/all_3.js +2 -2
  144. package/SVF-doxygen/html/html/search/all_5.js +3 -3
  145. package/SVF-doxygen/html/html/search/all_6.js +4 -4
  146. package/SVF-doxygen/html/html/search/all_7.js +4 -4
  147. package/SVF-doxygen/html/html/search/all_c.js +1 -1
  148. package/SVF-doxygen/html/html/search/all_d.js +3 -5
  149. package/SVF-doxygen/html/html/search/all_e.js +5 -41
  150. package/SVF-doxygen/html/html/search/all_f.js +3 -3
  151. package/SVF-doxygen/html/html/search/functions_1.js +2 -2
  152. package/SVF-doxygen/html/html/search/functions_11.js +1 -1
  153. package/SVF-doxygen/html/html/search/functions_5.js +1 -0
  154. package/SVF-doxygen/html/html/search/functions_f.js +3 -3
  155. package/SVF-doxygen/html/html/search/variables_1.js +2 -3
  156. package/SVF-doxygen/html/html/search/variables_10.js +1 -3
  157. package/SVF-doxygen/html/html/search/variables_12.js +1 -3
  158. package/SVF-doxygen/html/html/search/variables_13.js +4 -6
  159. package/SVF-doxygen/html/html/search/variables_14.js +1 -1
  160. package/SVF-doxygen/html/html/search/variables_3.js +1 -1
  161. package/SVF-doxygen/html/html/search/variables_5.js +2 -2
  162. package/SVF-doxygen/html/html/search/variables_6.js +2 -2
  163. package/SVF-doxygen/html/html/search/variables_7.js +4 -4
  164. package/SVF-doxygen/html/html/search/variables_c.js +1 -1
  165. package/SVF-doxygen/html/html/search/variables_d.js +3 -5
  166. package/SVF-doxygen/html/html/search/variables_e.js +4 -40
  167. package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
  168. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
  169. package/SVF-doxygen/html/html/wpa_8cpp.html +1 -1
  170. package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
  171. package/include/CFL/CFGNormalizer.h +3 -1
  172. package/include/CFL/PEGGrammar.txt +5 -18
  173. package/include/DDA/DDAVFSolver.h +4 -4
  174. package/include/Util/PTAStat.h +0 -79
  175. package/include/Util/SVFStat.h +7 -2
  176. package/lib/CFL/CFGNormalizer.cpp +57 -6
  177. package/lib/MTA/LockAnalysis.cpp +4 -4
  178. package/lib/MTA/MHP.cpp +2 -2
  179. package/lib/SVF-FE/LLVMModule.cpp +5 -0
  180. package/lib/SVF-FE/SVFIRBuilder.cpp +5 -0
  181. package/lib/Util/PTAStat.cpp +7 -254
  182. package/lib/Util/SVFModule.cpp +4 -0
  183. package/lib/Util/SVFStat.cpp +202 -2
  184. package/lib/WPA/AndersenStat.cpp +31 -31
  185. package/lib/WPA/FlowSensitiveStat.cpp +14 -14
  186. package/lib/WPA/VersionedFlowSensitiveStat.cpp +13 -13
  187. package/package.json +1 -1
@@ -2,7 +2,7 @@
2
2
  //
3
3
  // SVF: Static Value-Flow Analysis
4
4
  //
5
- // Copyright (C) <2013-2017> <Yulei Sui>
5
+ // Copyright (C) <2013-> <Yulei Sui>
6
6
  //
7
7
 
8
8
  // This program is free software: you can redistribute it and/or modify
@@ -31,6 +31,12 @@
31
31
  #include "Util/SVFStat.h"
32
32
 
33
33
  using namespace SVF;
34
+ using namespace std;
35
+
36
+ double SVFStat::timeOfBuildingLLVMModule = 0;
37
+ double SVFStat::timeOfBuildingSVFIR = 0;
38
+ double SVFStat::timeOfBuildingSymbolTable = 0;
39
+
34
40
 
35
41
  SVFStat::SVFStat() : startTime(0), endTime(0)
36
42
  {
@@ -55,4 +61,198 @@ double SVFStat::getClk(bool mark)
55
61
 
56
62
  assert(false && "PTAStat::getClk: unknown clock type");
57
63
  abort();
58
- }
64
+ }
65
+
66
+ void SVFStat::printStat(string statname)
67
+ {
68
+
69
+ std::string moduleName(SymbolTableInfo::SymbolInfo()->getModule()->getModuleIdentifier());
70
+ std::vector<std::string> names = SVFUtil::split(moduleName,'/');
71
+ if (names.size() > 1)
72
+ {
73
+ moduleName = names[names.size() - 1];
74
+ }
75
+
76
+ SVFUtil::outs() << "\n*********" << statname << "***************\n";
77
+ SVFUtil::outs() << "################ (program : " << moduleName << ")###############\n";
78
+ SVFUtil::outs().flags(std::ios::left);
79
+ unsigned field_width = 20;
80
+ for(NUMStatMap::iterator it = generalNumMap.begin(), eit = generalNumMap.end(); it!=eit; ++it)
81
+ {
82
+ // format out put with width 20 space
83
+ std::cout << std::setw(field_width) << it->first << it->second << "\n";
84
+ }
85
+ SVFUtil::outs() << "-------------------------------------------------------\n";
86
+ for(TIMEStatMap::iterator it = timeStatMap.begin(), eit = timeStatMap.end(); it!=eit; ++it)
87
+ {
88
+ // format out put with width 20 space
89
+ SVFUtil::outs() << std::setw(field_width) << it->first << it->second << "\n";
90
+ }
91
+ for(NUMStatMap::iterator it = PTNumStatMap.begin(), eit = PTNumStatMap.end(); it!=eit; ++it)
92
+ {
93
+ // format out put with width 20 space
94
+ SVFUtil::outs() << std::setw(field_width) << it->first << it->second << "\n";
95
+ }
96
+
97
+ SVFUtil::outs() << "#######################################################" << std::endl;
98
+ SVFUtil::outs().flush();
99
+ generalNumMap.clear();
100
+ PTNumStatMap.clear();
101
+ timeStatMap.clear();
102
+ }
103
+
104
+ void SVFStat::performStat()
105
+ {
106
+
107
+ SVFIR* pag = SVFIR::getPAG();
108
+ u32_t numOfFunction = 0;
109
+ u32_t numOfGlobal = 0;
110
+ u32_t numOfStack = 0;
111
+ u32_t numOfHeap = 0;
112
+ u32_t numOfHasVarArray = 0;
113
+ u32_t numOfHasVarStruct = 0;
114
+ u32_t numOfHasConstArray = 0;
115
+ u32_t numOfHasConstStruct = 0;
116
+ u32_t numOfScalar = 0;
117
+ u32_t numOfConstant = 0;
118
+ u32_t fiObjNumber = 0;
119
+ u32_t fsObjNumber = 0;
120
+ Set<SymID> memObjSet;
121
+ for(SVFIR::iterator it = pag->begin(), eit = pag->end(); it!=eit; ++it)
122
+ {
123
+ PAGNode* node = it->second;
124
+ if(ObjVar* obj = SVFUtil::dyn_cast<ObjVar>(node))
125
+ {
126
+ const MemObj* mem = obj->getMemObj();
127
+ if (memObjSet.insert(mem->getId()).second == false)
128
+ continue;
129
+ if(mem->isBlackHoleObj())
130
+ continue;
131
+ if(mem->isFunction())
132
+ numOfFunction++;
133
+ if(mem->isGlobalObj())
134
+ numOfGlobal++;
135
+ if(mem->isStack())
136
+ numOfStack++;
137
+ if(mem->isHeap())
138
+ numOfHeap++;
139
+ if(mem->isVarArray())
140
+ numOfHasVarArray++;
141
+ if(mem->isVarStruct())
142
+ numOfHasVarStruct++;
143
+ if(mem->isConstantArray())
144
+ numOfHasConstArray++;
145
+ if(mem->isConstantStruct())
146
+ numOfHasConstStruct++;
147
+ if(mem->hasPtrObj() == false)
148
+ numOfScalar++;
149
+ if(mem->isConstDataOrConstGlobal())
150
+ numOfConstant++;
151
+
152
+ if (mem->isFieldInsensitive())
153
+ fiObjNumber++;
154
+ else
155
+ fsObjNumber++;
156
+ }
157
+ }
158
+
159
+
160
+
161
+ generalNumMap["TotalPointers"] = pag->getValueNodeNum() + pag->getFieldValNodeNum();
162
+ generalNumMap["TotalObjects"] = pag->getObjectNodeNum();
163
+ generalNumMap["TotalFieldObjects"] = pag->getFieldObjNodeNum();
164
+ generalNumMap["MaxStructSize"] = SymbolTableInfo::SymbolInfo()->getMaxStructSize();
165
+ generalNumMap["TotalSVFStmts"] = pag->getPAGEdgeNum();
166
+ generalNumMap["TotalPTASVFStmts"] = pag->getPTAPAGEdgeNum();
167
+ generalNumMap["FIObjNum"] = fiObjNumber;
168
+ generalNumMap["FSObjNum"] = fsObjNumber;
169
+
170
+ generalNumMap["AddrsNum"] = pag->getSVFStmtSet(SVFStmt::Addr).size();
171
+ generalNumMap["LoadsNum"] = pag->getSVFStmtSet(SVFStmt::Load).size();
172
+ generalNumMap["StoresNum"] = pag->getSVFStmtSet(SVFStmt::Store).size();
173
+ generalNumMap["CopysNum"] = pag->getSVFStmtSet(SVFStmt::Copy).size();
174
+ generalNumMap["GepsNum"] = pag->getSVFStmtSet(SVFStmt::Gep).size();
175
+ generalNumMap["CallsNum"] = pag->getSVFStmtSet(SVFStmt::Call).size();
176
+ generalNumMap["ReturnsNum"] = pag->getSVFStmtSet(SVFStmt::Ret).size();
177
+
178
+ generalNumMap["FunctionObjs"] = numOfFunction;
179
+ generalNumMap["GlobalObjs"] = numOfGlobal;
180
+ generalNumMap["HeapObjs"] = numOfHeap;
181
+ generalNumMap["StackObjs"] = numOfStack;
182
+
183
+ generalNumMap["VarStructObj"] = numOfHasVarStruct;
184
+ generalNumMap["VarArrayObj"] = numOfHasVarArray;
185
+ generalNumMap["ConstStructObj"] = numOfHasConstStruct;
186
+ generalNumMap["ConstArrayObj"] = numOfHasConstArray;
187
+ generalNumMap["NonPtrObj"] = numOfScalar;
188
+ generalNumMap["ConstantObj"] = numOfConstant;
189
+
190
+ generalNumMap["IndCallSites"] = pag->getIndirectCallsites().size();
191
+ generalNumMap["TotalCallSite"] = pag->getCallSiteSet().size();
192
+
193
+ timeStatMap["LLVMIRTime"] = SVFStat::timeOfBuildingLLVMModule;
194
+ timeStatMap["SymbolTableTime"] = SVFStat::timeOfBuildingSymbolTable;
195
+ timeStatMap["SVFIRTime"] = SVFStat::timeOfBuildingSVFIR;
196
+
197
+ // REFACTOR-TODO bitcastInstStat();
198
+ branchStat();
199
+
200
+ printStat("General Stats");
201
+
202
+ }
203
+
204
+
205
+ void SVFStat::branchStat()
206
+ {
207
+ SVFModule* module = SVFIR::getPAG()->getModule();
208
+ u32_t numOfBB_2Succ = 0;
209
+ u32_t numOfBB_3Succ = 0;
210
+ for (SVFModule::llvm_const_iterator funIter = module->llvmFunBegin(), funEiter = module->llvmFunEnd();
211
+ funIter != funEiter; ++funIter)
212
+ {
213
+ const Function* func = *funIter;
214
+ for (Function::const_iterator bbIt = func->begin(), bbEit = func->end();
215
+ bbIt != bbEit; ++bbIt)
216
+ {
217
+ const BasicBlock& bb = *bbIt;
218
+ u32_t numOfSucc = bb.getTerminator()->getNumSuccessors();
219
+ if (numOfSucc == 2)
220
+ numOfBB_2Succ++;
221
+ else if (numOfSucc > 2)
222
+ numOfBB_3Succ++;
223
+ }
224
+ }
225
+
226
+ generalNumMap["BBWith2Succ"] = numOfBB_2Succ;
227
+ generalNumMap["BBWith3Succ"] = numOfBB_3Succ;
228
+ }
229
+
230
+ /* REFACTOR-TODO
231
+ void PTAStat::bitcastInstStat()
232
+ {
233
+ SVFModule* module = pta->getModule();
234
+ u32_t numberOfBitCast = 0;
235
+ for (SVFModule::llvm_const_iterator funIter = module->llvmFunBegin(), funEiter = module->llvmFunEnd();
236
+ funIter != funEiter; ++funIter)
237
+ {
238
+ const Function* func = *funIter;
239
+ for (Function::const_iterator bbIt = func->begin(), bbEit = func->end();
240
+ bbIt != bbEit; ++bbIt)
241
+ {
242
+ const BasicBlock& bb = *bbIt;
243
+ for (BasicBlock::const_iterator instIt = bb.begin(), instEit = bb.end();
244
+ instIt != instEit; ++instIt)
245
+ {
246
+ const Instruction& inst = *instIt;
247
+ if (const BitCastInst* bitcast = SVFUtil::dyn_cast<BitCastInst>(&inst))
248
+ {
249
+ if (SVFUtil::isa<PointerType>(bitcast->getSrcTy()))
250
+ numberOfBitCast++;
251
+ }
252
+ }
253
+ }
254
+ }
255
+
256
+ generalNumMap["BitCastNumber"] = numberOfBitCast;
257
+ }
258
+ */
@@ -306,49 +306,49 @@ void AndersenStat::performStat()
306
306
 
307
307
  constraintGraphStat();
308
308
 
309
- timeStatMap[TotalAnalysisTime] = (endTime - startTime)/TIMEINTERVAL;
310
- timeStatMap[SCCDetectionTime] = Andersen::timeOfSCCDetection;
311
- timeStatMap[SCCMergeTime] = Andersen::timeOfSCCMerges;
309
+ timeStatMap["TotalTime"] = (endTime - startTime)/TIMEINTERVAL;
310
+ timeStatMap["SCCDetectTime"] = Andersen::timeOfSCCDetection;
311
+ timeStatMap["SCCMergeTime"] = Andersen::timeOfSCCMerges;
312
312
  timeStatMap[CollapseTime] = Andersen::timeOfCollapse;
313
313
 
314
- timeStatMap[ProcessLoadStoreTime] = Andersen::timeOfProcessLoadStore;
315
- timeStatMap[ProcessCopyGepTime] = Andersen::timeOfProcessCopyGep;
316
- timeStatMap[UpdateCallGraphTime] = Andersen::timeOfUpdateCallGraph;
314
+ timeStatMap["LoadStoreTime"] = Andersen::timeOfProcessLoadStore;
315
+ timeStatMap["CopyGepTime"] = Andersen::timeOfProcessCopyGep;
316
+ timeStatMap["UpdateCGTime"] = Andersen::timeOfUpdateCallGraph;
317
317
 
318
- PTNumStatMap[TotalNumOfPointers] = pag->getValueNodeNum() + pag->getFieldValNodeNum();
319
- PTNumStatMap[TotalNumOfObjects] = pag->getObjectNodeNum() + pag->getFieldObjNodeNum();
318
+ PTNumStatMap["TotalPointers"] = pag->getValueNodeNum() + pag->getFieldValNodeNum();
319
+ PTNumStatMap["TotalObjects"] = pag->getObjectNodeNum() + pag->getFieldObjNodeNum();
320
320
 
321
321
 
322
- PTNumStatMap[NumOfProcessedAddrs] = Andersen::numOfProcessedAddr;
323
- PTNumStatMap[NumOfProcessedCopys] = Andersen::numOfProcessedCopy;
324
- PTNumStatMap[NumOfProcessedGeps] = Andersen::numOfProcessedGep;
325
- PTNumStatMap[NumOfProcessedLoads] = Andersen::numOfProcessedLoad;
326
- PTNumStatMap[NumOfProcessedStores] = Andersen::numOfProcessedStore;
322
+ PTNumStatMap["AddrProcessed"] = Andersen::numOfProcessedAddr;
323
+ PTNumStatMap["CopyProcessed"] = Andersen::numOfProcessedCopy;
324
+ PTNumStatMap["GepProcessed"] = Andersen::numOfProcessedGep;
325
+ PTNumStatMap["LoadProcessed"] = Andersen::numOfProcessedLoad;
326
+ PTNumStatMap["StoreProcessed"] = Andersen::numOfProcessedStore;
327
327
 
328
- PTNumStatMap[NumOfSfr] = Andersen::numOfSfrs;
329
- PTNumStatMap[NumOfFieldExpand] = Andersen::numOfFieldExpand;
328
+ PTNumStatMap["NumOfSFRs"] = Andersen::numOfSfrs;
329
+ PTNumStatMap["NumOfFieldExpand"] = Andersen::numOfFieldExpand;
330
330
 
331
- PTNumStatMap[NumOfPointers] = pag->getValueNodeNum();
332
- PTNumStatMap[NumOfMemObjects] = pag->getObjectNodeNum();
333
- PTNumStatMap[NumOfGepFieldPointers] = pag->getFieldValNodeNum();
334
- PTNumStatMap[NumOfGepFieldObjects] = pag->getFieldObjNodeNum();
331
+ PTNumStatMap["Pointers"] = pag->getValueNodeNum();
332
+ PTNumStatMap["MemObjects"] = pag->getObjectNodeNum();
333
+ PTNumStatMap["DummyFieldPtrs"] = pag->getFieldValNodeNum();
334
+ PTNumStatMap["FieldObjs"] = pag->getFieldObjNodeNum();
335
335
 
336
- timeStatMap[AveragePointsToSetSize] = (double)totalPtsSize/totalPointers;;
337
- timeStatMap[AverageTopLevPointsToSetSize] = (double)totalTopLevPtsSize/totalTopLevPointers;;
336
+ timeStatMap["AvgPtsSetSize"] = (double)totalPtsSize/totalPointers;;
337
+ timeStatMap["AvgTopLvlPtsSize"] = (double)totalTopLevPtsSize/totalTopLevPointers;;
338
338
 
339
- PTNumStatMap[MaxPointsToSetSize] = _MaxPtsSize;
339
+ PTNumStatMap["MaxPtsSetSize"] = _MaxPtsSize;
340
340
 
341
- PTNumStatMap[NumOfIterations] = pta->numOfIteration;
341
+ PTNumStatMap["SolveIterations"] = pta->numOfIteration;
342
342
 
343
- PTNumStatMap[NumOfIndirectCallSites] = consCG->getIndirectCallsites().size();
344
- PTNumStatMap[NumOfIndirectEdgeSolved] = pta->getNumOfResolvedIndCallEdge();
343
+ PTNumStatMap["IndCallSites"] = consCG->getIndirectCallsites().size();
344
+ PTNumStatMap["IndEdgeSolved"] = pta->getNumOfResolvedIndCallEdge();
345
345
 
346
- PTNumStatMap[NumOfSCCDetection] = Andersen::numOfSCCDetection;
347
- PTNumStatMap[NumOfCycles] = _NumOfCycles;
348
- PTNumStatMap[NumOfPWCCycles] = _NumOfPWCCycles;
349
- PTNumStatMap[NumOfNodesInCycles] = _NumOfNodesInCycles;
350
- PTNumStatMap[MaxNumOfNodesInSCC] = _MaxNumOfNodesInSCC;
351
- PTNumStatMap[NumOfNullPointer] = _NumOfNullPtr;
346
+ PTNumStatMap["NumOfSCCDetect"] = Andersen::numOfSCCDetection;
347
+ PTNumStatMap["TotalCycleNum"] = _NumOfCycles;
348
+ PTNumStatMap["TotalPWCCycleNum"] = _NumOfPWCCycles;
349
+ PTNumStatMap["NodesInCycles"] = _NumOfNodesInCycles;
350
+ PTNumStatMap["MaxNodesInSCC"] = _MaxNumOfNodesInSCC;
351
+ PTNumStatMap["NullPointer"] = _NumOfNullPtr;
352
352
  PTNumStatMap["PointsToConstPtr"] = _NumOfConstantPtr;
353
353
  PTNumStatMap["PointsToBlkPtr"] = _NumOfBlackholePtr;
354
354
 
@@ -120,8 +120,8 @@ void FlowSensitiveStat::performStat()
120
120
  }
121
121
  }
122
122
 
123
- PTNumStatMap[NumberOfFieldInsensitiveObj] = fiObjNumber;
124
- PTNumStatMap[NumberOfFieldSensitiveObj] = fsObjNumber;
123
+ PTNumStatMap["FIObjNum"] = fiObjNumber;
124
+ PTNumStatMap["FSObjNum"] = fsObjNumber;
125
125
 
126
126
  unsigned numOfCopy = 0;
127
127
  unsigned numOfStore = 0;
@@ -138,7 +138,7 @@ void FlowSensitiveStat::performStat()
138
138
 
139
139
  PTAStat::performStat();
140
140
 
141
- timeStatMap[TotalAnalysisTime] = (endTime - startTime)/TIMEINTERVAL;
141
+ timeStatMap["TotalTime"] = (endTime - startTime)/TIMEINTERVAL;
142
142
  timeStatMap["SolveTime"] = fspta->solveTime;
143
143
  timeStatMap["SCCTime"] = fspta->sccTime;
144
144
  timeStatMap["ProcessTime"] = fspta->processTime;
@@ -154,22 +154,22 @@ void FlowSensitiveStat::performStat()
154
154
  timeStatMap["UpdateCGTime"] = fspta->updateCallGraphTime;
155
155
  timeStatMap["PhiTime"] = fspta->phiTime;
156
156
 
157
- PTNumStatMap[TotalNumOfPointers] = pag->getValueNodeNum() + pag->getFieldValNodeNum();
158
- PTNumStatMap[TotalNumOfObjects] = pag->getObjectNodeNum() + pag->getFieldObjNodeNum();
157
+ PTNumStatMap["TotalPointers"] = pag->getValueNodeNum() + pag->getFieldValNodeNum();
158
+ PTNumStatMap["TotalObjects"] = pag->getObjectNodeNum() + pag->getFieldObjNodeNum();
159
159
 
160
- PTNumStatMap[NumOfPointers] = pag->getValueNodeNum();
161
- PTNumStatMap[NumOfMemObjects] = pag->getObjectNodeNum();
162
- PTNumStatMap[NumOfGepFieldPointers] = pag->getFieldValNodeNum();
163
- PTNumStatMap[NumOfGepFieldObjects] = pag->getFieldObjNodeNum();
160
+ PTNumStatMap["Pointers"] = pag->getValueNodeNum();
161
+ PTNumStatMap["MemObjects"] = pag->getObjectNodeNum();
162
+ PTNumStatMap["DummyFieldPtrs"] = pag->getFieldValNodeNum();
163
+ PTNumStatMap["FieldObjs"] = pag->getFieldObjNodeNum();
164
164
 
165
- PTNumStatMap[NumOfCopys] = numOfCopy;
166
- PTNumStatMap[NumOfStores] = numOfStore;
165
+ PTNumStatMap["CopysNum"] = numOfCopy;
166
+ PTNumStatMap["StoresNum"] = numOfStore;
167
167
 
168
- PTNumStatMap[NumOfIterations] = fspta->numOfIteration;
168
+ PTNumStatMap["SolveIterations"] = fspta->numOfIteration;
169
169
 
170
- PTNumStatMap[NumOfIndirectEdgeSolved] = fspta->getNumOfResolvedIndCallEdge();
170
+ PTNumStatMap["IndEdgeSolved"] = fspta->getNumOfResolvedIndCallEdge();
171
171
 
172
- PTNumStatMap[NumOfNullPointer] = _NumOfNullPtr;
172
+ PTNumStatMap["NullPointer"] = _NumOfNullPtr;
173
173
  PTNumStatMap["PointsToConstPtr"] = _NumOfConstantPtr;
174
174
  PTNumStatMap["PointsToBlkPtr"] = _NumOfBlackholePtr;
175
175
 
@@ -65,8 +65,8 @@ void VersionedFlowSensitiveStat::performStat()
65
65
  }
66
66
  }
67
67
 
68
- PTNumStatMap[NumberOfFieldInsensitiveObj] = fiObjNumber;
69
- PTNumStatMap[NumberOfFieldSensitiveObj] = fsObjNumber;
68
+ PTNumStatMap["FIObjNum"] = fiObjNumber;
69
+ PTNumStatMap["FSObjNum"] = fsObjNumber;
70
70
 
71
71
  unsigned numOfCopy = 0;
72
72
  unsigned numOfStore = 0;
@@ -79,7 +79,7 @@ void VersionedFlowSensitiveStat::performStat()
79
79
 
80
80
  PTAStat::performStat();
81
81
 
82
- timeStatMap[TotalAnalysisTime] = (endTime - startTime)/TIMEINTERVAL;
82
+ timeStatMap["TotalTime"] = (endTime - startTime)/TIMEINTERVAL;
83
83
  timeStatMap["SolveTime"] = vfspta->solveTime;
84
84
  timeStatMap["SCCTime"] = vfspta->sccTime;
85
85
  timeStatMap["ProcessTime"] = vfspta->processTime;
@@ -98,13 +98,13 @@ void VersionedFlowSensitiveStat::performStat()
98
98
  timeStatMap["PrelabelingTime"] = vfspta->prelabelingTime;
99
99
  timeStatMap["VersionPropTime"] = vfspta->versionPropTime;
100
100
 
101
- PTNumStatMap[TotalNumOfPointers] = pag->getValueNodeNum() + pag->getFieldValNodeNum();
102
- PTNumStatMap[TotalNumOfObjects] = pag->getObjectNodeNum() + pag->getFieldObjNodeNum();
101
+ PTNumStatMap["TotalPointers"] = pag->getValueNodeNum() + pag->getFieldValNodeNum();
102
+ PTNumStatMap["TotalObjects"] = pag->getObjectNodeNum() + pag->getFieldObjNodeNum();
103
103
 
104
- PTNumStatMap[NumOfPointers] = pag->getValueNodeNum();
105
- PTNumStatMap[NumOfMemObjects] = pag->getObjectNodeNum();
106
- PTNumStatMap[NumOfGepFieldPointers] = pag->getFieldValNodeNum();
107
- PTNumStatMap[NumOfGepFieldObjects] = pag->getFieldObjNodeNum();
104
+ PTNumStatMap["Pointers"] = pag->getValueNodeNum();
105
+ PTNumStatMap["MemObjects"] = pag->getObjectNodeNum();
106
+ PTNumStatMap["DummyFieldPtrs"] = pag->getFieldValNodeNum();
107
+ PTNumStatMap["FieldObjs"] = pag->getFieldObjNodeNum();
108
108
 
109
109
  PTNumStatMap["TotalVersions"] = _NumVersions;
110
110
  PTNumStatMap["MaxVersionsForObj"] = _MaxVersions;
@@ -113,12 +113,12 @@ void VersionedFlowSensitiveStat::performStat()
113
113
  PTNumStatMap["TotalExistingVPts"] = _NumUsedVersions;
114
114
  PTNumStatMap["TotalSingleVObjs"] = _NumSingleVersion;
115
115
 
116
- PTNumStatMap[NumOfCopys] = numOfCopy;
117
- PTNumStatMap[NumOfStores] = numOfStore;
116
+ PTNumStatMap["CopysNum"] = numOfCopy;
117
+ PTNumStatMap["StoresNum"] = numOfStore;
118
118
 
119
- PTNumStatMap[NumOfIterations] = vfspta->numOfIteration;
119
+ PTNumStatMap["SolveIterations"] = vfspta->numOfIteration;
120
120
 
121
- PTNumStatMap[NumOfIndirectEdgeSolved] = vfspta->getNumOfResolvedIndCallEdge();
121
+ PTNumStatMap["IndEdgeSolved"] = vfspta->getNumOfResolvedIndCallEdge();
122
122
 
123
123
  PTNumStatMap["StrongUpdates"] = vfspta->svfgHasSU.count();
124
124
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svf-tools",
3
- "version": "1.0.562",
3
+ "version": "1.0.565",
4
4
  "description": "* <b>[TypeClone](https://github.com/SVF-tools/SVF/wiki/TypeClone) published in our [ECOOP paper](https://yuleisui.github.io/publications/ecoop20.pdf) is now available in SVF </b> * <b>SVF now uses a single script for its build. Just type [`source ./build.sh`](https://github.com/SVF-tools/SVF/blob/master/build.sh) in your terminal, that's it!</b> * <b>SVF now supports LLVM-10.0.0! </b> * <b>We thank [bsauce](https://github.com/bsauce) for writing a user manual of SVF ([link1](https://www.jianshu.com/p/068a08ec749c) and [link2](https://www.jianshu.com/p/777c30d4240e)) in Chinese </b> * <b>SVF now supports LLVM-9.0.0 (Thank [Byoungyoung Lee](https://github.com/SVF-tools/SVF/issues/142) for his help!). </b> * <b>SVF now supports a set of [field-sensitive pointer analyses](https://yuleisui.github.io/publications/sas2019a.pdf). </b> * <b>[Use SVF as an external lib](https://github.com/SVF-tools/SVF/wiki/Using-SVF-as-a-lib-in-your-own-tool) for your own project (Contributed by [Hongxu Chen](https://github.com/HongxuChen)). </b> * <b>SVF now supports LLVM-7.0.0. </b> * <b>SVF now supports Docker. [Try SVF in Docker](https://github.com/SVF-tools/SVF/wiki/Try-SVF-in-Docker)! </b> * <b>SVF now supports [LLVM-6.0.0](https://github.com/svf-tools/SVF/pull/38) (Contributed by [Jack Anthony](https://github.com/jackanth)). </b> * <b>SVF now supports [LLVM-4.0.0](https://github.com/svf-tools/SVF/pull/23) (Contributed by Jared Carlson. Thank [Jared](https://github.com/jcarlson23) and [Will](https://github.com/dtzWill) for their in-depth [discussions](https://github.com/svf-tools/SVF/pull/18) about updating SVF!) </b> * <b>SVF now supports analysis for C++ programs.</b> <br />",
5
5
  "main": "index.js",
6
6
  "scripts": {