svf-tools 1.0.855 → 1.0.857

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 (502) hide show
  1. package/SVF-doxygen/html/AndersenPWC_8h_source.html +4 -4
  2. package/SVF-doxygen/html/AndersenSCD_8cpp_source.html +2 -2
  3. package/SVF-doxygen/html/AndersenStat_8cpp_source.html +154 -163
  4. package/SVF-doxygen/html/Andersen_8cpp_source.html +2 -2
  5. package/SVF-doxygen/html/Andersen_8h_source.html +13 -13
  6. package/SVF-doxygen/html/CFBasicBlockGWTO_8h.html +109 -0
  7. package/SVF-doxygen/html/CFBasicBlockGWTO_8h_source.html +185 -0
  8. package/SVF-doxygen/html/CFLAlias_8cpp_source.html +2 -2
  9. package/SVF-doxygen/html/CFLAlias_8h_source.html +4 -4
  10. package/SVF-doxygen/html/CFLBase_8cpp_source.html +1 -1
  11. package/SVF-doxygen/html/CFLBase_8h_source.html +1 -1
  12. package/SVF-doxygen/html/CFLSVFGBuilder_8cpp_source.html +2 -2
  13. package/SVF-doxygen/html/CFLStat_8cpp_source.html +2 -2
  14. package/SVF-doxygen/html/CFLVF_8h_source.html +2 -2
  15. package/SVF-doxygen/html/CSC_8h.html +3 -3
  16. package/SVF-doxygen/html/CSC_8h_source.html +5 -5
  17. package/SVF-doxygen/html/ConsGNode_8h_source.html +4 -4
  18. package/SVF-doxygen/html/ContextDDA_8cpp_source.html +14 -14
  19. package/SVF-doxygen/html/ContextDDA_8h_source.html +6 -6
  20. package/SVF-doxygen/html/DDAClient_8cpp_source.html +5 -5
  21. package/SVF-doxygen/html/DDAClient_8h_source.html +1 -1
  22. package/SVF-doxygen/html/DDAPass_8cpp_source.html +7 -7
  23. package/SVF-doxygen/html/DDAPass_8h.html +3 -3
  24. package/SVF-doxygen/html/DDAPass_8h_source.html +4 -4
  25. package/SVF-doxygen/html/DDAStat_8cpp_source.html +10 -10
  26. package/SVF-doxygen/html/DDAStat_8h_source.html +1 -1
  27. package/SVF-doxygen/html/DDAVFSolver_8h.html +2 -2
  28. package/SVF-doxygen/html/DDAVFSolver_8h_source.html +5 -5
  29. package/SVF-doxygen/html/FSMPTA_8cpp_source.html +2 -2
  30. package/SVF-doxygen/html/FSMPTA_8h_source.html +5 -5
  31. package/SVF-doxygen/html/FlowDDA_8h_source.html +11 -11
  32. package/SVF-doxygen/html/FlowSensitiveStat_8cpp_source.html +236 -238
  33. package/SVF-doxygen/html/FlowSensitive_8cpp_source.html +3 -3
  34. package/SVF-doxygen/html/FlowSensitive_8h_source.html +7 -7
  35. package/SVF-doxygen/html/ICFGStat_8h_source.html +1 -1
  36. package/SVF-doxygen/html/ICFGWTO_8h.html +109 -0
  37. package/SVF-doxygen/html/ICFGWTO_8h_source.html +177 -0
  38. package/SVF-doxygen/html/LLVMModule_8cpp_source.html +2 -2
  39. package/SVF-doxygen/html/MTAAnnotator_8cpp_source.html +2 -2
  40. package/SVF-doxygen/html/MTAAnnotator_8h_source.html +1 -1
  41. package/SVF-doxygen/html/MTAStat_8cpp_source.html +3 -3
  42. package/SVF-doxygen/html/MTA_8cpp_source.html +3 -3
  43. package/SVF-doxygen/html/MemRegion_8cpp_source.html +3 -3
  44. package/SVF-doxygen/html/MemRegion_8h.html +3 -3
  45. package/SVF-doxygen/html/MemRegion_8h_source.html +4 -4
  46. package/SVF-doxygen/html/MemSSA_8cpp_source.html +1 -1
  47. package/SVF-doxygen/html/Options_8cpp_source.html +10 -10
  48. package/SVF-doxygen/html/PCG_8h_source.html +4 -4
  49. package/SVF-doxygen/html/PTAStat_8cpp_source.html +99 -87
  50. package/SVF-doxygen/html/PTAStat_8h_source.html +2 -2
  51. package/SVF-doxygen/html/PointerAnalysisImpl_8cpp_source.html +30 -30
  52. package/SVF-doxygen/html/PointerAnalysisImpl_8h_source.html +15 -15
  53. package/SVF-doxygen/html/PointerAnalysis_8cpp_source.html +42 -42
  54. package/SVF-doxygen/html/PointerAnalysis_8h.html +5 -5
  55. package/SVF-doxygen/html/PointerAnalysis_8h_source.html +409 -418
  56. package/SVF-doxygen/html/SCC_8h.html +2 -2
  57. package/SVF-doxygen/html/SCC_8h_source.html +2 -2
  58. package/SVF-doxygen/html/SVFGBuilder_8h_source.html +3 -3
  59. package/SVF-doxygen/html/SVFGStat_8cpp_source.html +16 -19
  60. package/SVF-doxygen/html/SVFGStat_8h.html +1 -1
  61. package/SVF-doxygen/html/SVFGStat_8h_source.html +3 -3
  62. package/SVF-doxygen/html/SVFG_8h_source.html +1 -1
  63. package/SVF-doxygen/html/SVFStat_8cpp_source.html +196 -186
  64. package/SVF-doxygen/html/SVFStat_8h_source.html +44 -41
  65. package/SVF-doxygen/html/SaberSVFGBuilder_8cpp_source.html +5 -5
  66. package/SVF-doxygen/html/SrcSnkDDA_8cpp_source.html +1 -1
  67. package/SVF-doxygen/html/Steensgaard_8cpp_source.html +2 -2
  68. package/SVF-doxygen/html/Steensgaard_8h_source.html +4 -4
  69. package/SVF-doxygen/html/TCT_8h.html +2 -2
  70. package/SVF-doxygen/html/TCT_8h_source.html +9 -9
  71. package/SVF-doxygen/html/ThreadCallGraph_8cpp_source.html +3 -3
  72. package/SVF-doxygen/html/ThreadCallGraph_8h_source.html +1 -1
  73. package/SVF-doxygen/html/TypeAnalysis_8cpp_source.html +3 -3
  74. package/SVF-doxygen/html/TypeAnalysis_8h_source.html +6 -6
  75. package/SVF-doxygen/html/VFG_8cpp_source.html +3 -3
  76. package/SVF-doxygen/html/VFG_8h_source.html +1 -1
  77. package/SVF-doxygen/html/VersionedFlowSensitiveStat_8cpp_source.html +77 -79
  78. package/SVF-doxygen/html/VersionedFlowSensitive_8cpp_source.html +6 -6
  79. package/SVF-doxygen/html/VersionedFlowSensitive_8h_source.html +4 -4
  80. package/SVF-doxygen/html/WPAPass_8cpp_source.html +12 -12
  81. package/SVF-doxygen/html/WPAPass_8h_source.html +1 -1
  82. package/SVF-doxygen/html/WPAStat_8h_source.html +9 -9
  83. package/SVF-doxygen/html/WTO_8h.html +25 -13
  84. package/SVF-doxygen/html/WTO_8h_source.html +794 -853
  85. package/SVF-doxygen/html/annotated.html +402 -397
  86. package/SVF-doxygen/html/classSVF_1_1Andersen-members.html +121 -123
  87. package/SVF-doxygen/html/classSVF_1_1Andersen.html +11 -17
  88. package/SVF-doxygen/html/classSVF_1_1AndersenBase-members.html +100 -102
  89. package/SVF-doxygen/html/classSVF_1_1AndersenBase.html +11 -17
  90. package/SVF-doxygen/html/classSVF_1_1AndersenSCD-members.html +124 -126
  91. package/SVF-doxygen/html/classSVF_1_1AndersenSCD.html +2 -8
  92. package/SVF-doxygen/html/classSVF_1_1AndersenSFR-members.html +129 -131
  93. package/SVF-doxygen/html/classSVF_1_1AndersenSFR.html +1 -7
  94. package/SVF-doxygen/html/classSVF_1_1AndersenStat-members.html +21 -20
  95. package/SVF-doxygen/html/classSVF_1_1AndersenStat.html +155 -161
  96. package/SVF-doxygen/html/classSVF_1_1AndersenWaveDiff-members.html +122 -124
  97. package/SVF-doxygen/html/classSVF_1_1AndersenWaveDiff.html +2 -8
  98. package/SVF-doxygen/html/classSVF_1_1BVDataPTAImpl-members.html +58 -60
  99. package/SVF-doxygen/html/classSVF_1_1BVDataPTAImpl.html +26 -32
  100. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTO-members.html +57 -50
  101. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTO.html +203 -1663
  102. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTO.png +0 -0
  103. package/SVF-doxygen/html/classSVF_1_1CFLAlias-members.html +78 -80
  104. package/SVF-doxygen/html/classSVF_1_1CFLAlias.html +4 -10
  105. package/SVF-doxygen/html/classSVF_1_1CFLBase-members.html +75 -77
  106. package/SVF-doxygen/html/classSVF_1_1CFLBase.html +1 -7
  107. package/SVF-doxygen/html/classSVF_1_1CFLSVFGBuilder.html +2 -2
  108. package/SVF-doxygen/html/classSVF_1_1CFLStat-members.html +19 -18
  109. package/SVF-doxygen/html/classSVF_1_1CFLStat.html +5 -2
  110. package/SVF-doxygen/html/classSVF_1_1CFLVF-members.html +77 -79
  111. package/SVF-doxygen/html/classSVF_1_1CFLVF.html +2 -8
  112. package/SVF-doxygen/html/classSVF_1_1CondPTAImpl-members.html +50 -52
  113. package/SVF-doxygen/html/classSVF_1_1CondPTAImpl.html +9 -15
  114. package/SVF-doxygen/html/classSVF_1_1ConstraintNode-members.html +34 -34
  115. package/SVF-doxygen/html/classSVF_1_1ConstraintNode.html +25 -65
  116. package/SVF-doxygen/html/classSVF_1_1ContextDDA-members.html +97 -99
  117. package/SVF-doxygen/html/classSVF_1_1ContextDDA.html +18 -24
  118. package/SVF-doxygen/html/classSVF_1_1DDAClient.html +3 -3
  119. package/SVF-doxygen/html/classSVF_1_1DDAPass.html +6 -6
  120. package/SVF-doxygen/html/classSVF_1_1DDAStat-members.html +18 -17
  121. package/SVF-doxygen/html/classSVF_1_1DDAStat.html +12 -9
  122. package/SVF-doxygen/html/classSVF_1_1DDAVFSolver.html +1 -1
  123. package/SVF-doxygen/html/classSVF_1_1FSMPTA-members.html +140 -142
  124. package/SVF-doxygen/html/classSVF_1_1FSMPTA.html +2 -8
  125. package/SVF-doxygen/html/classSVF_1_1FlowDDA-members.html +102 -104
  126. package/SVF-doxygen/html/classSVF_1_1FlowDDA.html +15 -21
  127. package/SVF-doxygen/html/classSVF_1_1FlowSensitive-members.html +133 -135
  128. package/SVF-doxygen/html/classSVF_1_1FlowSensitive.html +18 -24
  129. package/SVF-doxygen/html/classSVF_1_1FlowSensitiveStat-members.html +24 -23
  130. package/SVF-doxygen/html/classSVF_1_1FlowSensitiveStat.html +241 -240
  131. package/SVF-doxygen/html/classSVF_1_1FunptrDDAClient.html +2 -2
  132. package/SVF-doxygen/html/classSVF_1_1GenericNode.html +9 -10
  133. package/SVF-doxygen/html/classSVF_1_1GenericNode.png +0 -0
  134. package/SVF-doxygen/html/classSVF_1_1ICFGStat-members.html +19 -18
  135. package/SVF-doxygen/html/classSVF_1_1ICFGStat.html +4 -1
  136. package/SVF-doxygen/html/classSVF_1_1ICFGWTO-members.html +140 -0
  137. package/SVF-doxygen/html/classSVF_1_1ICFGWTO.html +379 -0
  138. package/SVF-doxygen/html/classSVF_1_1ICFGWTO.png +0 -0
  139. package/SVF-doxygen/html/classSVF_1_1LLVMModuleSet.html +2 -2
  140. package/SVF-doxygen/html/classSVF_1_1MRGenerator.html +3 -3
  141. package/SVF-doxygen/html/classSVF_1_1MTA.html +3 -3
  142. package/SVF-doxygen/html/classSVF_1_1MTAAnnotator.html +2 -2
  143. package/SVF-doxygen/html/classSVF_1_1MTASVFGBuilder.html +1 -1
  144. package/SVF-doxygen/html/classSVF_1_1MTAStat-members.html +20 -19
  145. package/SVF-doxygen/html/classSVF_1_1MTAStat.html +6 -3
  146. package/SVF-doxygen/html/classSVF_1_1MemSSA.html +5 -5
  147. package/SVF-doxygen/html/classSVF_1_1MemSSAStat-members.html +24 -23
  148. package/SVF-doxygen/html/classSVF_1_1MemSSAStat.html +7 -4
  149. package/SVF-doxygen/html/classSVF_1_1PCG.html +3 -3
  150. package/SVF-doxygen/html/classSVF_1_1POCRAlias-members.html +78 -80
  151. package/SVF-doxygen/html/classSVF_1_1POCRAlias.html +0 -6
  152. package/SVF-doxygen/html/classSVF_1_1POCRHybrid-members.html +78 -80
  153. package/SVF-doxygen/html/classSVF_1_1POCRHybrid.html +0 -6
  154. package/SVF-doxygen/html/classSVF_1_1PTAStat-members.html +19 -18
  155. package/SVF-doxygen/html/classSVF_1_1PTAStat.html +100 -85
  156. package/SVF-doxygen/html/classSVF_1_1PointerAnalysis-members.html +34 -36
  157. package/SVF-doxygen/html/classSVF_1_1PointerAnalysis.html +291 -356
  158. package/SVF-doxygen/html/classSVF_1_1SCCDetection.html +1 -1
  159. package/SVF-doxygen/html/classSVF_1_1SCCDetection_1_1GNodeSCCInfo.html +1 -1
  160. package/SVF-doxygen/html/classSVF_1_1SVFGStat-members.html +41 -40
  161. package/SVF-doxygen/html/classSVF_1_1SVFGStat.html +18 -18
  162. package/SVF-doxygen/html/classSVF_1_1SVFIRBuilder.html +1 -1
  163. package/SVF-doxygen/html/classSVF_1_1SVFStat-members.html +13 -12
  164. package/SVF-doxygen/html/classSVF_1_1SVFStat.html +208 -168
  165. package/SVF-doxygen/html/classSVF_1_1SaberSVFGBuilder.html +5 -5
  166. package/SVF-doxygen/html/classSVF_1_1SrcSnkDDA.html +1 -1
  167. package/SVF-doxygen/html/classSVF_1_1Steensgaard-members.html +109 -111
  168. package/SVF-doxygen/html/classSVF_1_1Steensgaard.html +4 -10
  169. package/SVF-doxygen/html/classSVF_1_1TCT.html +4 -4
  170. package/SVF-doxygen/html/classSVF_1_1ThreadCallGraph.html +2 -2
  171. package/SVF-doxygen/html/classSVF_1_1TypeAnalysis-members.html +103 -105
  172. package/SVF-doxygen/html/classSVF_1_1TypeAnalysis.html +9 -15
  173. package/SVF-doxygen/html/classSVF_1_1VFG.html +2 -2
  174. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitive-members.html +158 -160
  175. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitive.html +6 -12
  176. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitiveStat-members.html +24 -23
  177. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitiveStat.html +84 -83
  178. package/SVF-doxygen/html/classSVF_1_1WPAPass.html +12 -12
  179. package/SVF-doxygen/html/classSVF_1_1WTO-members.html +137 -0
  180. package/SVF-doxygen/html/classSVF_1_1WTO.html +1998 -0
  181. package/SVF-doxygen/html/classSVF_1_1WTOComponent-members.html +97 -0
  182. package/SVF-doxygen/html/classSVF_1_1WTOComponent.html +515 -0
  183. package/SVF-doxygen/html/classSVF_1_1WTOComponentVisitor-members.html +93 -0
  184. package/SVF-doxygen/html/classSVF_1_1WTOComponentVisitor.html +421 -0
  185. package/SVF-doxygen/html/classSVF_1_1WTOComponentVisitor.png +0 -0
  186. package/SVF-doxygen/html/classSVF_1_1WTOCycle-members.html +98 -0
  187. package/SVF-doxygen/html/classSVF_1_1WTOCycle.html +630 -0
  188. package/SVF-doxygen/html/classSVF_1_1WTOCycleDepth-members.html +24 -23
  189. package/SVF-doxygen/html/classSVF_1_1WTOCycleDepth.html +338 -317
  190. package/SVF-doxygen/html/classSVF_1_1WTONode-members.html +91 -0
  191. package/SVF-doxygen/html/classSVF_1_1WTONode.html +390 -0
  192. package/SVF-doxygen/html/classSVF_1_1WTO_1_1WTOCycleDepthBuilder-members.html +96 -0
  193. package/SVF-doxygen/html/classSVF_1_1WTO_1_1WTOCycleDepthBuilder.html +332 -0
  194. package/SVF-doxygen/html/classSVF_1_1WTO_1_1WTOCycleDepthBuilder.png +0 -0
  195. package/SVF-doxygen/html/classes.html +383 -377
  196. package/SVF-doxygen/html/dir_445b24f35a8ddd2effd3d23ee1278e0a.html +0 -2
  197. package/SVF-doxygen/html/dir_f63327fc9cf9e35b7653a5e341daceab.html +4 -2
  198. package/SVF-doxygen/html/dir_fc0329f850c815763e0c5b05933e8d55.html +4 -0
  199. package/SVF-doxygen/html/files.html +31 -29
  200. package/SVF-doxygen/html/functions.html +18 -30
  201. package/SVF-doxygen/html/functions_a.html +17 -14
  202. package/SVF-doxygen/html/functions_b.html +25 -25
  203. package/SVF-doxygen/html/functions_c.html +37 -51
  204. package/SVF-doxygen/html/functions_e.html +7 -4
  205. package/SVF-doxygen/html/functions_enum.html +2 -2
  206. package/SVF-doxygen/html/functions_eval_c.html +1 -1
  207. package/SVF-doxygen/html/functions_eval_n.html +1 -1
  208. package/SVF-doxygen/html/functions_f.html +26 -21
  209. package/SVF-doxygen/html/functions_func.html +14 -11
  210. package/SVF-doxygen/html/functions_func_b.html +6 -10
  211. package/SVF-doxygen/html/functions_func_c.html +30 -36
  212. package/SVF-doxygen/html/functions_func_e.html +5 -5
  213. package/SVF-doxygen/html/functions_func_f.html +8 -3
  214. package/SVF-doxygen/html/functions_func_g.html +15 -25
  215. package/SVF-doxygen/html/functions_func_h.html +3 -3
  216. package/SVF-doxygen/html/functions_func_i.html +18 -14
  217. package/SVF-doxygen/html/functions_func_n.html +6 -6
  218. package/SVF-doxygen/html/functions_func_o.html +16 -16
  219. package/SVF-doxygen/html/functions_func_p.html +4 -7
  220. package/SVF-doxygen/html/functions_func_s.html +1 -1
  221. package/SVF-doxygen/html/functions_func_t.html +7 -10
  222. package/SVF-doxygen/html/functions_func_v.html +4 -5
  223. package/SVF-doxygen/html/functions_func_w.html +16 -4
  224. package/SVF-doxygen/html/functions_func_~.html +10 -10
  225. package/SVF-doxygen/html/functions_g.html +14 -21
  226. package/SVF-doxygen/html/functions_h.html +9 -6
  227. package/SVF-doxygen/html/functions_i.html +32 -29
  228. package/SVF-doxygen/html/functions_l.html +3 -3
  229. package/SVF-doxygen/html/functions_n.html +25 -23
  230. package/SVF-doxygen/html/functions_o.html +31 -29
  231. package/SVF-doxygen/html/functions_p.html +21 -15
  232. package/SVF-doxygen/html/functions_r.html +1 -1
  233. package/SVF-doxygen/html/functions_rela_o.html +3 -3
  234. package/SVF-doxygen/html/functions_s.html +26 -23
  235. package/SVF-doxygen/html/functions_t.html +14 -20
  236. package/SVF-doxygen/html/functions_type_b.html +4 -0
  237. package/SVF-doxygen/html/functions_type_c.html +3 -9
  238. package/SVF-doxygen/html/functions_type_e.html +3 -0
  239. package/SVF-doxygen/html/functions_type_g.html +3 -0
  240. package/SVF-doxygen/html/functions_type_i.html +7 -8
  241. package/SVF-doxygen/html/functions_type_n.html +13 -9
  242. package/SVF-doxygen/html/functions_type_s.html +3 -0
  243. package/SVF-doxygen/html/functions_type_w.html +19 -6
  244. package/SVF-doxygen/html/functions_v.html +8 -9
  245. package/SVF-doxygen/html/functions_vars.html +18 -30
  246. package/SVF-doxygen/html/functions_vars_h.html +3 -0
  247. package/SVF-doxygen/html/functions_vars_p.html +3 -0
  248. package/SVF-doxygen/html/functions_vars_t.html +0 -3
  249. package/SVF-doxygen/html/functions_vars_w.html +4 -0
  250. package/SVF-doxygen/html/functions_w.html +47 -20
  251. package/SVF-doxygen/html/functions_~.html +10 -10
  252. package/SVF-doxygen/html/hierarchy.html +621 -614
  253. package/SVF-doxygen/html/namespaceSVF.html +127 -7
  254. package/SVF-doxygen/html/namespacemembers_c.html +9 -0
  255. package/SVF-doxygen/html/namespacemembers_i.html +14 -5
  256. package/SVF-doxygen/html/namespacemembers_type_c.html +9 -0
  257. package/SVF-doxygen/html/namespacemembers_type_i.html +9 -0
  258. package/SVF-doxygen/html/search/all_0.js +124 -127
  259. package/SVF-doxygen/html/search/all_1.js +495 -495
  260. package/SVF-doxygen/html/search/all_10.js +325 -325
  261. package/SVF-doxygen/html/search/all_11.js +225 -225
  262. package/SVF-doxygen/html/search/all_12.js +555 -554
  263. package/SVF-doxygen/html/search/all_13.js +201 -203
  264. package/SVF-doxygen/html/search/all_14.js +67 -67
  265. package/SVF-doxygen/html/search/all_15.js +168 -168
  266. package/SVF-doxygen/html/search/all_16.js +73 -63
  267. package/SVF-doxygen/html/search/all_17.js +1 -1
  268. package/SVF-doxygen/html/search/all_18.js +1 -1
  269. package/SVF-doxygen/html/search/all_19.js +11 -11
  270. package/SVF-doxygen/html/search/all_1a.js +175 -175
  271. package/SVF-doxygen/html/search/all_2.js +172 -173
  272. package/SVF-doxygen/html/search/all_3.js +648 -649
  273. package/SVF-doxygen/html/search/all_4.js +230 -230
  274. package/SVF-doxygen/html/search/all_5.js +120 -119
  275. package/SVF-doxygen/html/search/all_6.js +227 -226
  276. package/SVF-doxygen/html/search/all_7.js +1046 -1048
  277. package/SVF-doxygen/html/search/all_8.js +196 -191
  278. package/SVF-doxygen/html/search/all_9.js +579 -574
  279. package/SVF-doxygen/html/search/all_a.js +46 -46
  280. package/SVF-doxygen/html/search/all_b.js +26 -26
  281. package/SVF-doxygen/html/search/all_c.js +115 -115
  282. package/SVF-doxygen/html/search/all_d.js +197 -197
  283. package/SVF-doxygen/html/search/all_e.js +207 -207
  284. package/SVF-doxygen/html/search/all_f.js +116 -116
  285. package/SVF-doxygen/html/search/classes_0.js +26 -26
  286. package/SVF-doxygen/html/search/classes_1.js +9 -9
  287. package/SVF-doxygen/html/search/classes_10.js +74 -74
  288. package/SVF-doxygen/html/search/classes_11.js +14 -15
  289. package/SVF-doxygen/html/search/classes_12.js +2 -2
  290. package/SVF-doxygen/html/search/classes_13.js +10 -10
  291. package/SVF-doxygen/html/search/classes_14.js +20 -14
  292. package/SVF-doxygen/html/search/classes_15.js +1 -1
  293. package/SVF-doxygen/html/search/classes_2.js +78 -81
  294. package/SVF-doxygen/html/search/classes_3.js +37 -37
  295. package/SVF-doxygen/html/search/classes_4.js +9 -9
  296. package/SVF-doxygen/html/search/classes_5.js +28 -28
  297. package/SVF-doxygen/html/search/classes_6.js +104 -104
  298. package/SVF-doxygen/html/search/classes_7.js +38 -34
  299. package/SVF-doxygen/html/search/classes_8.js +58 -57
  300. package/SVF-doxygen/html/search/classes_9.js +1 -1
  301. package/SVF-doxygen/html/search/classes_a.js +12 -12
  302. package/SVF-doxygen/html/search/classes_b.js +29 -29
  303. package/SVF-doxygen/html/search/classes_c.js +6 -6
  304. package/SVF-doxygen/html/search/classes_d.js +18 -18
  305. package/SVF-doxygen/html/search/classes_e.js +36 -36
  306. package/SVF-doxygen/html/search/classes_f.js +25 -25
  307. package/SVF-doxygen/html/search/defines_0.js +3 -3
  308. package/SVF-doxygen/html/search/defines_1.js +2 -2
  309. package/SVF-doxygen/html/search/defines_2.js +30 -30
  310. package/SVF-doxygen/html/search/defines_3.js +20 -20
  311. package/SVF-doxygen/html/search/defines_4.js +2 -2
  312. package/SVF-doxygen/html/search/defines_5.js +4 -4
  313. package/SVF-doxygen/html/search/defines_6.js +2 -2
  314. package/SVF-doxygen/html/search/defines_7.js +5 -5
  315. package/SVF-doxygen/html/search/defines_8.js +11 -11
  316. package/SVF-doxygen/html/search/defines_9.js +9 -9
  317. package/SVF-doxygen/html/search/defines_a.js +2 -2
  318. package/SVF-doxygen/html/search/defines_b.js +1 -1
  319. package/SVF-doxygen/html/search/defines_c.js +3 -3
  320. package/SVF-doxygen/html/search/defines_d.js +2 -2
  321. package/SVF-doxygen/html/search/defines_e.js +7 -7
  322. package/SVF-doxygen/html/search/defines_f.js +3 -3
  323. package/SVF-doxygen/html/search/enums_0.js +3 -3
  324. package/SVF-doxygen/html/search/enums_1.js +2 -2
  325. package/SVF-doxygen/html/search/enums_10.js +1 -1
  326. package/SVF-doxygen/html/search/enums_11.js +1 -1
  327. package/SVF-doxygen/html/search/enums_2.js +8 -8
  328. package/SVF-doxygen/html/search/enums_3.js +1 -1
  329. package/SVF-doxygen/html/search/enums_4.js +3 -3
  330. package/SVF-doxygen/html/search/enums_5.js +1 -1
  331. package/SVF-doxygen/html/search/enums_6.js +2 -2
  332. package/SVF-doxygen/html/search/enums_7.js +2 -2
  333. package/SVF-doxygen/html/search/enums_8.js +4 -4
  334. package/SVF-doxygen/html/search/enums_9.js +1 -1
  335. package/SVF-doxygen/html/search/enums_a.js +1 -1
  336. package/SVF-doxygen/html/search/enums_b.js +7 -7
  337. package/SVF-doxygen/html/search/enums_c.js +1 -1
  338. package/SVF-doxygen/html/search/enums_d.js +4 -4
  339. package/SVF-doxygen/html/search/enums_e.js +2 -2
  340. package/SVF-doxygen/html/search/enums_f.js +4 -4
  341. package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
  342. package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
  343. package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
  344. package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
  345. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  346. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  347. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  348. package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
  349. package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
  350. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  351. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  352. package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
  353. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  354. package/SVF-doxygen/html/search/enumvalues_7.js +8 -8
  355. package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
  356. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  357. package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
  358. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  359. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  360. package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
  361. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  362. package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
  363. package/SVF-doxygen/html/search/files_0.js +14 -14
  364. package/SVF-doxygen/html/search/files_1.js +7 -7
  365. package/SVF-doxygen/html/search/files_10.js +8 -8
  366. package/SVF-doxygen/html/search/files_11.js +8 -8
  367. package/SVF-doxygen/html/search/files_12.js +2 -2
  368. package/SVF-doxygen/html/search/files_2.js +58 -57
  369. package/SVF-doxygen/html/search/files_3.js +14 -14
  370. package/SVF-doxygen/html/search/files_4.js +5 -5
  371. package/SVF-doxygen/html/search/files_5.js +13 -13
  372. package/SVF-doxygen/html/search/files_6.js +9 -9
  373. package/SVF-doxygen/html/search/files_7.js +15 -14
  374. package/SVF-doxygen/html/search/files_8.js +13 -13
  375. package/SVF-doxygen/html/search/files_9.js +18 -18
  376. package/SVF-doxygen/html/search/files_a.js +3 -3
  377. package/SVF-doxygen/html/search/files_b.js +2 -2
  378. package/SVF-doxygen/html/search/files_c.js +20 -20
  379. package/SVF-doxygen/html/search/files_d.js +4 -4
  380. package/SVF-doxygen/html/search/files_e.js +62 -62
  381. package/SVF-doxygen/html/search/files_f.js +8 -8
  382. package/SVF-doxygen/html/search/functions_0.js +13 -13
  383. package/SVF-doxygen/html/search/functions_1.js +365 -364
  384. package/SVF-doxygen/html/search/functions_10.js +139 -140
  385. package/SVF-doxygen/html/search/functions_11.js +140 -140
  386. package/SVF-doxygen/html/search/functions_12.js +289 -289
  387. package/SVF-doxygen/html/search/functions_13.js +71 -72
  388. package/SVF-doxygen/html/search/functions_14.js +39 -39
  389. package/SVF-doxygen/html/search/functions_15.js +71 -71
  390. package/SVF-doxygen/html/search/functions_16.js +36 -32
  391. package/SVF-doxygen/html/search/functions_17.js +3 -3
  392. package/SVF-doxygen/html/search/functions_18.js +175 -175
  393. package/SVF-doxygen/html/search/functions_2.js +90 -91
  394. package/SVF-doxygen/html/search/functions_3.js +260 -262
  395. package/SVF-doxygen/html/search/functions_4.js +78 -78
  396. package/SVF-doxygen/html/search/functions_5.js +53 -53
  397. package/SVF-doxygen/html/search/functions_6.js +61 -60
  398. package/SVF-doxygen/html/search/functions_7.js +854 -857
  399. package/SVF-doxygen/html/search/functions_8.js +148 -148
  400. package/SVF-doxygen/html/search/functions_9.js +422 -421
  401. package/SVF-doxygen/html/search/functions_a.js +30 -30
  402. package/SVF-doxygen/html/search/functions_b.js +2 -2
  403. package/SVF-doxygen/html/search/functions_c.js +25 -25
  404. package/SVF-doxygen/html/search/functions_d.js +79 -79
  405. package/SVF-doxygen/html/search/functions_e.js +35 -35
  406. package/SVF-doxygen/html/search/functions_f.js +56 -56
  407. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  408. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  409. package/SVF-doxygen/html/search/related_0.js +2 -2
  410. package/SVF-doxygen/html/search/related_1.js +2 -2
  411. package/SVF-doxygen/html/search/related_2.js +3 -3
  412. package/SVF-doxygen/html/search/related_3.js +2 -2
  413. package/SVF-doxygen/html/search/related_4.js +2 -2
  414. package/SVF-doxygen/html/search/related_5.js +1 -1
  415. package/SVF-doxygen/html/search/related_6.js +2 -2
  416. package/SVF-doxygen/html/search/related_7.js +4 -4
  417. package/SVF-doxygen/html/search/related_8.js +2 -2
  418. package/SVF-doxygen/html/search/related_9.js +4 -4
  419. package/SVF-doxygen/html/search/related_a.js +19 -19
  420. package/SVF-doxygen/html/search/related_b.js +4 -4
  421. package/SVF-doxygen/html/search/related_c.js +2 -2
  422. package/SVF-doxygen/html/search/related_d.js +12 -12
  423. package/SVF-doxygen/html/search/related_e.js +2 -2
  424. package/SVF-doxygen/html/search/related_f.js +2 -2
  425. package/SVF-doxygen/html/search/typedefs_0.js +19 -19
  426. package/SVF-doxygen/html/search/typedefs_1.js +27 -26
  427. package/SVF-doxygen/html/search/typedefs_10.js +63 -62
  428. package/SVF-doxygen/html/search/typedefs_11.js +13 -13
  429. package/SVF-doxygen/html/search/typedefs_12.js +11 -11
  430. package/SVF-doxygen/html/search/typedefs_13.js +33 -33
  431. package/SVF-doxygen/html/search/typedefs_14.js +11 -8
  432. package/SVF-doxygen/html/search/typedefs_2.js +129 -129
  433. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  434. package/SVF-doxygen/html/search/typedefs_4.js +18 -17
  435. package/SVF-doxygen/html/search/typedefs_5.js +41 -41
  436. package/SVF-doxygen/html/search/typedefs_6.js +57 -56
  437. package/SVF-doxygen/html/search/typedefs_7.js +47 -44
  438. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  439. package/SVF-doxygen/html/search/typedefs_9.js +6 -6
  440. package/SVF-doxygen/html/search/typedefs_a.js +29 -29
  441. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  442. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  443. package/SVF-doxygen/html/search/typedefs_d.js +14 -14
  444. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  445. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  446. package/SVF-doxygen/html/search/variables_0.js +148 -151
  447. package/SVF-doxygen/html/search/variables_1.js +76 -76
  448. package/SVF-doxygen/html/search/variables_10.js +99 -98
  449. package/SVF-doxygen/html/search/variables_11.js +45 -45
  450. package/SVF-doxygen/html/search/variables_12.js +91 -91
  451. package/SVF-doxygen/html/search/variables_13.js +73 -74
  452. package/SVF-doxygen/html/search/variables_14.js +14 -14
  453. package/SVF-doxygen/html/search/variables_15.js +49 -49
  454. package/SVF-doxygen/html/search/variables_16.js +10 -9
  455. package/SVF-doxygen/html/search/variables_17.js +1 -1
  456. package/SVF-doxygen/html/search/variables_18.js +2 -2
  457. package/SVF-doxygen/html/search/variables_2.js +38 -38
  458. package/SVF-doxygen/html/search/variables_3.js +142 -142
  459. package/SVF-doxygen/html/search/variables_4.js +50 -50
  460. package/SVF-doxygen/html/search/variables_5.js +37 -37
  461. package/SVF-doxygen/html/search/variables_6.js +66 -66
  462. package/SVF-doxygen/html/search/variables_7.js +34 -34
  463. package/SVF-doxygen/html/search/variables_8.js +8 -7
  464. package/SVF-doxygen/html/search/variables_9.js +78 -78
  465. package/SVF-doxygen/html/search/variables_a.js +4 -4
  466. package/SVF-doxygen/html/search/variables_b.js +10 -10
  467. package/SVF-doxygen/html/search/variables_c.js +45 -45
  468. package/SVF-doxygen/html/search/variables_d.js +55 -55
  469. package/SVF-doxygen/html/search/variables_e.js +123 -123
  470. package/SVF-doxygen/html/search/variables_f.js +30 -30
  471. package/SVF-doxygen/html/structSVF_1_1has__edgetype.html +97 -0
  472. package/SVF-doxygen/html/structSVF_1_1has__edgetype.png +0 -0
  473. package/SVF-doxygen/html/structSVF_1_1has__edgetype_3_01T_00_01std_1_1void__t_3_01typename_01T_1_1EdgeType_01_4_01_4.html +97 -0
  474. package/SVF-doxygen/html/structSVF_1_1has__edgetype_3_01T_00_01std_1_1void__t_3_01typename_01T_1_1EdgeType_01_4_01_4.png +0 -0
  475. package/SVF-doxygen/html/structSVF_1_1has__nodetype.html +97 -0
  476. package/SVF-doxygen/html/structSVF_1_1has__nodetype.png +0 -0
  477. package/SVF-doxygen/html/structSVF_1_1has__nodetype_3_01T_00_01std_1_1void__t_3_01typename_01T_1_1NodeType_01_4_01_4.html +97 -0
  478. package/SVF-doxygen/html/structSVF_1_1has__nodetype_3_01T_00_01std_1_1void__t_3_01typename_01T_1_1NodeType_01_4_01_4.png +0 -0
  479. package/SVF-doxygen/html/svf-ex_8cpp.html +2 -2
  480. package/SVF-doxygen/html/svf-ex_8cpp_source.html +3 -3
  481. package/package.json +1 -1
  482. package/svf/include/AbstractExecution/CFBasicBlockGWTO.h +83 -0
  483. package/svf/include/AbstractExecution/ICFGWTO.h +78 -0
  484. package/svf/include/DDA/DDAPass.h +2 -2
  485. package/svf/include/DDA/DDAVFSolver.h +2 -2
  486. package/svf/include/Graphs/SVFGStat.h +1 -1
  487. package/svf/include/Graphs/WTO.h +859 -0
  488. package/svf/include/MSSA/MemRegion.h +3 -3
  489. package/svf/include/MTA/TCT.h +2 -2
  490. package/svf/include/MemoryModel/PointerAnalysis.h +5 -14
  491. package/svf/include/Util/SVFStat.h +3 -0
  492. package/svf/include/WPA/CSC.h +3 -3
  493. package/svf/lib/DDA/DDAStat.cpp +2 -2
  494. package/svf/lib/Graphs/SVFGStat.cpp +2 -4
  495. package/svf/lib/MemoryModel/PointerAnalysis.cpp +1 -1
  496. package/svf/lib/Util/PTAStat.cpp +14 -4
  497. package/svf/lib/Util/SVFStat.cpp +13 -3
  498. package/svf/lib/WPA/AndersenStat.cpp +3 -8
  499. package/svf/lib/WPA/FlowSensitiveStat.cpp +1 -2
  500. package/svf/lib/WPA/VersionedFlowSensitiveStat.cpp +1 -2
  501. package/svf/include/AbstractExecution/WTO.h +0 -897
  502. /package/svf/include/{Util → Graphs}/SCC.h +0 -0
@@ -1,897 +0,0 @@
1
- //===- WTO.h -- Weakest Topological Order Analysis-------------------------//
2
- //
3
- // SVF: Static Value-Flow Analysis
4
- //
5
- // Copyright (C) <2013-> <Yulei Sui>
6
- //
7
-
8
- // This program is free software: you can redistribute it and/or modify
9
- // it under the terms of the GNU General Public License as published by
10
- // the Free Software Foundation, either version 3 of the License, or
11
- // (at your option) any later version.
12
-
13
- // This program is distributed in the hope that it will be useful,
14
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- // GNU General Public License for more details.
17
-
18
- // You should have received a copy of the GNU General Public License
19
- // along with this program. If not, see <http://www.gnu.org/licenses/>.
20
- //
21
- //===----------------------------------------------------------------------===//
22
-
23
- /*
24
- * WTO.h
25
- *
26
- * The implementation is based on F. Bourdoncle's paper:
27
- * "Efficient chaotic iteration strategies with widenings", Formal
28
- * Methods in Programming and Their Applications, 1993, pages 128-141.
29
- *
30
- * Created on: Jul 3, 2022
31
- * Author: Xiao Cheng, Jiawei Wang
32
- *
33
- */
34
-
35
- #ifndef WTO_H_
36
- #define WTO_H_
37
-
38
- #include "SVFIR/SVFType.h"
39
- #include "SVFIR/SVFValue.h"
40
- #include "Graphs/CFBasicBlockG.h"
41
-
42
-
43
- namespace SVF
44
- {
45
-
46
- class CFBasicBlockGWTO;
47
-
48
- class CFBasicBlockGWTONode;
49
-
50
- class CFBasicBlockGWTOCycle;
51
-
52
- /*!
53
- * Cycle depth of a WTO Component
54
- *
55
- * The cycle depth is represented as **a list of cycle's heads**,
56
- * **from the outermost to the innermost**.
57
- *
58
- * e.g., consider the following nested cycle:
59
- *
60
- * -->1 --> 2 --> 3 --> 4
61
- * \ /
62
- * <-- 6 <-- 5 <--
63
- * \ /
64
- * >7>
65
- *
66
- * where C1: (1 2 3 4 5 6 7) is the outer cycle, where 1 is the head,
67
- * and C2: (5 6 7) is the inner cycle, where 5 is the head.
68
- *
69
- * The cycle depth is as following:
70
- * ---------------------------------
71
- * | Node NO. | Cycle Depth |
72
- * --------------------------------
73
- * | 1 (head of C1) | [ ] |
74
- * --------------------------------
75
- * | 2, 3, 4 | [1] |
76
- * --------------------------------
77
- * | 5 (head of C2) | [1] |
78
- * --------------------------------
79
- * | 6, 7 | [1, 5] |
80
- * --------------------------------
81
- */
82
- template <typename NodeRef>
83
- class WTOCycleDepth
84
- {
85
- public:
86
- typedef std::vector<NodeRef> NodeRefList;
87
- typedef typename NodeRefList::const_iterator Iterator;
88
-
89
- private:
90
- NodeRefList _heads;
91
-
92
- public:
93
- /// Default Constructor
94
- WTOCycleDepth() = default;
95
-
96
- /// Default Copy Constructor
97
- WTOCycleDepth(const WTOCycleDepth &) = default;
98
-
99
- /// Default Move Constructor
100
- WTOCycleDepth(WTOCycleDepth &&) = default;
101
-
102
- /// Default Copy Operator=
103
- WTOCycleDepth &operator=(const WTOCycleDepth &) = default;
104
-
105
- /// Default Move Operator=
106
- WTOCycleDepth &operator=(WTOCycleDepth &&) = default;
107
-
108
- /// Default Destructor
109
- ~WTOCycleDepth() = default;
110
-
111
- /// Add a cycle head to the end of the head list
112
- void push_back(NodeRef head)
113
- {
114
- _heads.push_back(head);
115
- }
116
-
117
- Iterator begin() const
118
- {
119
- return _heads.cbegin();
120
- }
121
-
122
- Iterator end() const
123
- {
124
- return _heads.cend();
125
- }
126
-
127
- /// Convert the wto-cycle-depth to a string
128
- std::string toString() const
129
- {
130
- std::string str;
131
- std::stringstream rawstr(str);
132
- rawstr << "[";
133
- for (auto it = begin(), et = end(); it != et;)
134
- {
135
- rawstr << (*it)->getName().data();
136
- ++it;
137
- if (it != et)
138
- {
139
- rawstr << ", ";
140
- }
141
- }
142
- rawstr << "]";
143
- return rawstr.str();
144
- }
145
-
146
- private:
147
- /// Compare the given wto-cycle-depth
148
- int compare(const WTOCycleDepth &other) const
149
- {
150
- if (this == &other)
151
- {
152
- return 0; // 0 - equals
153
- }
154
-
155
- auto this_it = begin();
156
- auto other_it = other.begin();
157
- while (this_it != end())
158
- {
159
- if (other_it == other.end())
160
- {
161
- return 1; // `this` is inside `other`
162
- }
163
- else if (*this_it == *other_it)
164
- {
165
- ++this_it;
166
- ++other_it;
167
- }
168
- else
169
- {
170
- return 2; // not comparable
171
- }
172
- }
173
- if (other_it == other.end())
174
- {
175
- return 0; // equals
176
- }
177
- else
178
- {
179
- return -1; // `other` is inside `this`
180
- }
181
- }
182
-
183
- public:
184
-
185
- /// Overloading operators
186
- //@{
187
- /// Return the common prefix of the given wto-cycle-depth
188
- WTOCycleDepth operator^(const WTOCycleDepth &other) const
189
- {
190
- WTOCycleDepth res;
191
- for (auto this_it = begin(), other_it = other.begin();
192
- this_it != end() && other_it != other.end();
193
- ++this_it, ++other_it)
194
- {
195
- if (*this_it == *other_it)
196
- {
197
- res.push_back(*this_it);
198
- }
199
- else
200
- {
201
- break;
202
- }
203
- }
204
- return res;
205
- }
206
-
207
- /// Less than other's depth - `other` is inside `this`
208
- bool operator<(const WTOCycleDepth &other) const
209
- {
210
- return compare(other) == -1;
211
- }
212
-
213
- /// Less than or Equal with other's depth
214
- bool operator<=(const WTOCycleDepth &other) const
215
- {
216
- return compare(other) <= 0;
217
- }
218
-
219
- /// Equal with other's depth
220
- bool operator==(const WTOCycleDepth &other) const
221
- {
222
- return compare(other) == 0;
223
- }
224
-
225
- /// Greater than other's depth - `this` is inside `other`
226
- bool operator>(const WTOCycleDepth &other) const
227
- {
228
- return compare(other) == 1;
229
- }
230
-
231
- /// Greater than or Equal with other's depth
232
- bool operator>=(const WTOCycleDepth &other) const
233
- {
234
- return operator<=(other);
235
- }
236
-
237
- /// Dump into CMD
238
- friend std::ostream &operator<<(std::ostream &o, const WTOCycleDepth &CFBasicBlockGWTO)
239
- {
240
- o << CFBasicBlockGWTO.toString();
241
- return o;
242
- }
243
- //@}
244
-
245
- }; // end class WTOCycleDepth
246
-
247
- /*!
248
- * Weak topological order (WTO) visitor
249
- */
250
- class WTOVisitor
251
- {
252
-
253
- public:
254
- /// Default Constructor
255
- WTOVisitor() = default;
256
-
257
- /// Default Copy Constructor
258
- WTOVisitor(const WTOVisitor &) noexcept = default;
259
-
260
- /// Default Move Constructor
261
- WTOVisitor(WTOVisitor &&) noexcept = default;
262
-
263
- /// Default Copy Operator=
264
- WTOVisitor &operator=(const WTOVisitor &) noexcept = default;
265
-
266
- /// Default Move Operator=
267
- WTOVisitor &operator=(WTOVisitor &&) noexcept = default;
268
-
269
- /// Default Destructor
270
- virtual ~WTOVisitor() = default;
271
-
272
- /// Visit WTO Node
273
- virtual void visit(const CFBasicBlockGWTONode &) = 0;
274
-
275
- /// Visit WTO Cycle
276
- virtual void visit(const CFBasicBlockGWTOCycle &) = 0;
277
-
278
- }; // end class WTOVisitor
279
-
280
- /*!
281
- * Base class for a WTO component for CFBasicBlockG
282
- *
283
- * A WTO component can be either a node or cycle
284
- */
285
- class CFBasicBlockGWTOComp
286
- {
287
-
288
- public:
289
- enum WtoCT
290
- {
291
- Node, Cycle
292
- };
293
-
294
- public:
295
- /// Default Constructor
296
- CFBasicBlockGWTOComp(WtoCT k) : _type(k) {};
297
-
298
- /// Copy Constructor
299
- CFBasicBlockGWTOComp(const CFBasicBlockGWTOComp &) noexcept = default;
300
-
301
- /// Move Constructor
302
- CFBasicBlockGWTOComp(CFBasicBlockGWTOComp &&) noexcept = default;
303
-
304
- /// Copy Operator=
305
- CFBasicBlockGWTOComp &operator=(const CFBasicBlockGWTOComp &) noexcept = default;
306
-
307
- /// Move Operator=
308
- CFBasicBlockGWTOComp &operator=(CFBasicBlockGWTOComp &&) noexcept = default;
309
-
310
- /// Default Destructor
311
- virtual ~CFBasicBlockGWTOComp() = default;
312
-
313
- /// Accept a visitor
314
- virtual void accept(WTOVisitor *) const = 0;
315
-
316
- /// Return the WTO Kind (node or cycle)
317
- inline WtoCT getKind() const
318
- {
319
- return _type;
320
- }
321
-
322
- virtual std::string toString() const = 0;
323
-
324
- friend std::ostream &operator<<(std::ostream &o, const CFBasicBlockGWTOComp &CFBasicBlockGWTO)
325
- {
326
- o << CFBasicBlockGWTO.toString();
327
- return o;
328
- }
329
-
330
- private:
331
-
332
- WtoCT _type;
333
-
334
- }; // end class CFBasicBlockGWTOComp
335
-
336
-
337
- /*!
338
- * WTO node for CFBasicBlockG
339
- */
340
- class CFBasicBlockGWTONode final : public CFBasicBlockGWTOComp
341
- {
342
- private:
343
- const CFBasicBlockNode *_node;
344
-
345
- public:
346
- /// Constructor
347
- explicit CFBasicBlockGWTONode(const CFBasicBlockNode *node) : CFBasicBlockGWTOComp(CFBasicBlockGWTOComp::Node), _node(node) {}
348
-
349
- /// Return the graph node
350
- const CFBasicBlockNode *node() const
351
- {
352
- return _node;
353
- }
354
-
355
- /// Accept a visitor
356
- void accept(WTOVisitor *v) const override
357
- {
358
- v->visit(*this);
359
- }
360
-
361
- /// Convert the node to string
362
- std::string toString() const override
363
- {
364
- return std::string(_node->getName().data());
365
- }
366
-
367
- /// ClassOf
368
- //@{
369
- static inline bool classof(const CFBasicBlockGWTONode *)
370
- {
371
- return true;
372
- }
373
-
374
- static inline bool classof(const CFBasicBlockGWTOComp *c)
375
- {
376
- return c->getKind() == CFBasicBlockGWTOComp::Node;
377
- }
378
- ///@}
379
-
380
- }; // end class CFBasicBlockGWTONode
381
-
382
-
383
- /*!
384
- * WTO cycle for CFBasicBlockG
385
- */
386
- class CFBasicBlockGWTOCycle final : public CFBasicBlockGWTOComp
387
- {
388
- private:
389
- typedef std::list<const CFBasicBlockGWTOComp *> WtoComponentRefList;
390
- typedef WtoComponentRefList::const_iterator Iterator;
391
-
392
- private:
393
- /// Head of the cycle
394
- const CFBasicBlockNode *_head;
395
-
396
- /// List of components
397
- WtoComponentRefList _components;
398
-
399
- public:
400
- /// Constructor
401
- CFBasicBlockGWTOCycle(const CFBasicBlockNode *head, WtoComponentRefList components)
402
- : CFBasicBlockGWTOComp(CFBasicBlockGWTOComp::Cycle), _head(head), _components(std::move(components)) {}
403
-
404
- /// Return the head of the cycle
405
- const CFBasicBlockNode *head() const
406
- {
407
- return _head;
408
- }
409
-
410
- Iterator begin() const
411
- {
412
- return _components.cbegin();
413
- }
414
-
415
- Iterator end() const
416
- {
417
- return _components.cend();
418
- }
419
-
420
- /// Accept a visitor
421
- void accept(WTOVisitor *v) const override
422
- {
423
- v->visit(*this);
424
- }
425
-
426
- /// ClassOf
427
- //@{
428
- static inline bool classof(const CFBasicBlockGWTOCycle *)
429
- {
430
- return true;
431
- }
432
-
433
- static inline bool classof(const CFBasicBlockGWTOComp *c)
434
- {
435
- return c->getKind() == CFBasicBlockGWTOComp::Cycle;
436
- }
437
- ///@}
438
-
439
- std::string toString() const override
440
- {
441
- std::string str;
442
- std::stringstream rawstr(str);
443
- rawstr << "(";
444
- rawstr << _head->getName().data() << ", ";
445
- for (auto it = begin(), et = end(); it != et;)
446
- {
447
- rawstr << (*it)->toString();
448
- ++it;
449
- if (it != et)
450
- {
451
- rawstr << ", ";
452
- }
453
- }
454
- rawstr << ")";
455
- return rawstr.str();
456
- }
457
-
458
- }; // end class CFBasicBlockGWTOCycle
459
-
460
-
461
- /*!
462
- * Weak topological order for CFBasicBlockG
463
- */
464
- class CFBasicBlockGWTO
465
- {
466
-
467
- public:
468
- typedef WTOCycleDepth<const CFBasicBlockNode*> CFBasicBlockGWTOCycleDepth;
469
- typedef Set<const CFBasicBlockNode *> NodeRefSet;
470
-
471
- protected:
472
- typedef std::list<const CFBasicBlockGWTOComp *> WTOCompRefList;
473
- typedef Set <const CFBasicBlockGWTOComp *> WTOCompRefSet;
474
- typedef Map<const CFBasicBlockNode *, const CFBasicBlockGWTOCycle *> NodeRefToWTOCycleMap;
475
- typedef Map<const CFBasicBlockNode *, NodeRefSet> NodeRefToNodeRefSetMap;
476
-
477
- typedef u32_t CycleDepthNumber;
478
- typedef Map<const CFBasicBlockNode *, CycleDepthNumber> NodeRefToCycleDepthNumber;
479
- typedef std::vector<const CFBasicBlockNode *> CFBasicBlockNodes;
480
- typedef std::shared_ptr<CFBasicBlockGWTOCycleDepth> CFBasicBlockGWTOCycleDepthPtr;
481
- typedef Map<const CFBasicBlockNode *, CFBasicBlockGWTOCycleDepthPtr> NodeRefToWTOCycleDepthPtr;
482
-
483
- public:
484
- typedef typename WTOCompRefList::const_iterator Iterator;
485
-
486
- protected:
487
- WTOCompRefList _components;
488
- WTOCompRefSet _allComponents;
489
- NodeRefToWTOCycleMap _headToCycle;
490
- NodeRefToNodeRefSetMap _headToTails;
491
- NodeRefToWTOCycleDepthPtr _nodeToDepth;
492
- NodeRefToCycleDepthNumber _nodeToCDN;
493
- CycleDepthNumber _num;
494
- CFBasicBlockNodes _stack;
495
- CFBasicBlockGraph* _graph;
496
-
497
- public:
498
- explicit CFBasicBlockGWTO() : _num(0) {}
499
-
500
- explicit CFBasicBlockGWTO(CFBasicBlockGraph* graph, const CFBasicBlockNode *entry) : _num(0), _graph(graph)
501
- {
502
- build(entry);
503
- }
504
-
505
- CFBasicBlockGWTO(const CFBasicBlockGWTO &other) = default;
506
-
507
- CFBasicBlockGWTO(CFBasicBlockGWTO &&other) = default;
508
-
509
- CFBasicBlockGWTO &operator=(const CFBasicBlockGWTO &other) = default;
510
-
511
- CFBasicBlockGWTO &operator=(CFBasicBlockGWTO &&other) = default;
512
-
513
- ~CFBasicBlockGWTO()
514
- {
515
- for (const auto &component: _allComponents)
516
- {
517
- delete component;
518
- }
519
- }
520
-
521
- Iterator begin() const
522
- {
523
- return _components.cbegin();
524
- }
525
-
526
- Iterator end() const
527
- {
528
- return _components.cend();
529
- }
530
-
531
- bool isHead(const CFBasicBlockNode *node) const
532
- {
533
- return _headToCycle.find(node) != _headToCycle.end();
534
- }
535
-
536
- typename NodeRefToWTOCycleMap::const_iterator headBegin() const
537
- {
538
- return _headToCycle.cbegin();
539
- }
540
-
541
- typename NodeRefToWTOCycleMap::const_iterator headEnd() const
542
- {
543
- return _headToCycle.cend();
544
- }
545
-
546
- const NodeRefSet &getTails(const CFBasicBlockNode *node) const
547
- {
548
- auto it = _headToTails.find(node);
549
- assert(it != _headToTails.end() && "node not found");
550
- return it->second;
551
- }
552
-
553
-
554
- /// Get the wto-cycle-depth of the given node
555
- const CFBasicBlockGWTOCycleDepth &getWTOCycleDepth(const CFBasicBlockNode *n) const
556
- {
557
- auto it = _nodeToDepth.find(n);
558
- assert(it != _nodeToDepth.end() && "node not found");
559
- return *(it->second);
560
- }
561
-
562
- /// Whether the given node is in the node to cycle getCDN
563
- inline bool inNodeToCycleDepth(const CFBasicBlockNode *n) const
564
- {
565
- auto it = _nodeToDepth.find(n);
566
- return it != _nodeToDepth.end();
567
- }
568
-
569
- /// Accept the given visitor
570
- void accept(WTOVisitor* v)
571
- {
572
- for (const auto &c: _components)
573
- {
574
- c->accept(v);
575
- }
576
- }
577
-
578
- std::string toString() const
579
- {
580
- std::string str;
581
- std::stringstream rawstr(str);
582
- rawstr << "[";
583
- for (auto it = begin(), et = end(); it != et;)
584
- {
585
- rawstr << (*it)->toString();
586
- ++it;
587
- if (it != et)
588
- {
589
- rawstr << ", ";
590
- }
591
- }
592
- rawstr << "]";
593
- return rawstr.str();
594
- }
595
-
596
- friend std::ostream &operator<<(std::ostream &o, const CFBasicBlockGWTO &CFBasicBlockGWTO)
597
- {
598
- o << CFBasicBlockGWTO.toString();
599
- return o;
600
- }
601
-
602
- protected:
603
-
604
- inline void build(const CFBasicBlockNode *entry)
605
- {
606
- visit(entry, _components);
607
- _nodeToCDN.clear();
608
- _stack.clear();
609
- buildNodeToWTOCycleDepth();
610
- build_tails();
611
- }
612
-
613
- /// Visitor to build the WTO cycle getCDN of each node
614
- class WTOCycleDepthBuilder final
615
- : public WTOVisitor
616
- {
617
- private:
618
- CFBasicBlockGWTOCycleDepthPtr _wtoCycleDepth;
619
- NodeRefToWTOCycleDepthPtr &_nodeToWTOCycleDepth;
620
-
621
- public:
622
- explicit WTOCycleDepthBuilder(NodeRefToWTOCycleDepthPtr &nodeToWTOCycleDepth)
623
- : _wtoCycleDepth(std::make_shared<CFBasicBlockGWTOCycleDepth>()),
624
- _nodeToWTOCycleDepth(nodeToWTOCycleDepth) {}
625
-
626
- void visit(const CFBasicBlockGWTOCycle &cycle) override
627
- {
628
- const CFBasicBlockNode *head = cycle.head();
629
- CFBasicBlockGWTOCycleDepthPtr previous_nesting = _wtoCycleDepth;
630
- _nodeToWTOCycleDepth.insert(std::make_pair(head, _wtoCycleDepth));
631
- _wtoCycleDepth = std::make_shared<CFBasicBlockGWTOCycleDepth>(*_wtoCycleDepth);
632
- _wtoCycleDepth->push_back(head);
633
- for (auto it = cycle.begin(), et = cycle.end(); it != et; ++it)
634
- {
635
- (*it)->accept(this);
636
- }
637
- _wtoCycleDepth = previous_nesting;
638
- }
639
-
640
- void visit(const CFBasicBlockGWTONode &node) override
641
- {
642
- _nodeToWTOCycleDepth.insert(
643
- std::make_pair(node.node(), _wtoCycleDepth));
644
- }
645
-
646
- }; // end class WTOCycleDepthBuilder
647
-
648
- /// Visitor to build the tails of each head/loop
649
- class TailBuilder : public WTOVisitor
650
- {
651
- protected:
652
- NodeRefSet &_tails;
653
- const CFBasicBlockGWTOCycleDepth &_headWTOCycleDepth;
654
- const CFBasicBlockNode *_head;
655
- NodeRefToWTOCycleDepthPtr &_nodeToWTOCycleDepth;
656
- CFBasicBlockGraph* _graph;
657
-
658
- public:
659
-
660
- explicit TailBuilder(CFBasicBlockGraph* graph, NodeRefToWTOCycleDepthPtr &nodeToWTOCycleDepth, NodeRefSet &tails, const CFBasicBlockNode *head,
661
- const CFBasicBlockGWTOCycleDepth &headWTOCycleDepth) : _tails(tails), _headWTOCycleDepth(headWTOCycleDepth), _head(head), _nodeToWTOCycleDepth(
662
- nodeToWTOCycleDepth), _graph(graph)
663
- {
664
- }
665
-
666
- void visit(const CFBasicBlockGWTOCycle &cycle) override
667
- {
668
- for (auto it = cycle.begin(), et = cycle.end(); it != et; ++it)
669
- {
670
- (*it)->accept(this);
671
- }
672
- }
673
-
674
- virtual void visit(const CFBasicBlockGWTONode &node) override
675
- {
676
- if(const CallICFGNode* callNode = SVFUtil::dyn_cast<CallICFGNode>(node.node()->getICFGNodes().front()))
677
- {
678
- const CFBasicBlockNode *succ = _graph->getCFBasicBlockNode(callNode->getRetICFGNode()->getId());
679
- const CFBasicBlockGWTOCycleDepth &succNesting = getWTOCycleDepth(succ);
680
- if (succ != _head && succNesting <= _headWTOCycleDepth)
681
- {
682
- _tails.insert(node.node());
683
- }
684
- }
685
- else
686
- {
687
- for (const auto &edge: node.node()->getOutEdges())
688
- {
689
- if(edge->getICFGEdge() && !edge->getICFGEdge()->isIntraCFGEdge()) continue;
690
- const CFBasicBlockNode *succ = edge->getDstNode();
691
- const CFBasicBlockGWTOCycleDepth &succNesting = getWTOCycleDepth(succ);
692
- if (succ != _head && succNesting <= _headWTOCycleDepth)
693
- {
694
- _tails.insert(node.node());
695
- }
696
- }
697
- }
698
- }
699
-
700
- protected:
701
- /// Get the wto-cycle-depth of the given node
702
- const CFBasicBlockGWTOCycleDepth &getWTOCycleDepth(const CFBasicBlockNode *n) const
703
- {
704
- auto it = _nodeToWTOCycleDepth.find(n);
705
- assert(it != _nodeToWTOCycleDepth.end() && "node not found");
706
- return *(it->second);
707
- }
708
-
709
- };
710
-
711
- protected:
712
- /// Get the cycle depth number of the given node
713
- CycleDepthNumber getCDN(const CFBasicBlockNode *n) const
714
- {
715
- auto it = _nodeToCDN.find(n);
716
- if (it != _nodeToCDN.end())
717
- {
718
- return it->second;
719
- }
720
- else
721
- {
722
- return 0;
723
- }
724
- }
725
-
726
- /// Set the cycle depth number of the given node
727
- void setCDN(const CFBasicBlockNode *n, const CycleDepthNumber &Depth)
728
- {
729
- auto res = _nodeToCDN.insert(std::make_pair(n, Depth));
730
- if (!res.second)
731
- {
732
- (res.first)->second = Depth;
733
- }
734
- }
735
-
736
- /// Pop a node from the stack
737
- const CFBasicBlockNode *pop()
738
- {
739
- assert(!_stack.empty() && "empty stack");
740
- const CFBasicBlockNode *top = _stack.back();
741
- _stack.pop_back();
742
- return top;
743
- }
744
-
745
- /// Push a node on the stack
746
- void push(const CFBasicBlockNode *n)
747
- {
748
- _stack.push_back(n);
749
- }
750
-
751
- const CFBasicBlockGWTONode *newNode(const CFBasicBlockNode *node)
752
- {
753
- const CFBasicBlockGWTONode *ptr = new CFBasicBlockGWTONode(node);
754
- _allComponents.insert(ptr);
755
- return ptr;
756
- }
757
-
758
- const CFBasicBlockGWTOCycle *newCycle(const CFBasicBlockNode *node, const WTOCompRefList &partition)
759
- {
760
- const CFBasicBlockGWTOCycle *ptr = new CFBasicBlockGWTOCycle(node, std::move(partition));
761
- _allComponents.insert(ptr);
762
- return ptr;
763
- }
764
-
765
- /// Create the cycle component for the given node
766
- const CFBasicBlockGWTOCycle *component(const CFBasicBlockNode *node)
767
- {
768
- WTOCompRefList partition;
769
- if (const CallICFGNode* callNode = SVFUtil::dyn_cast<CallICFGNode>(node->getICFGNodes().front()))
770
- {
771
- const CFBasicBlockNode *succ = _graph->getCFBasicBlockNode(callNode->getRetICFGNode()->getId());
772
- if (getCDN(succ) == 0)
773
- {
774
- visit(succ, partition);
775
- }
776
- }
777
- else
778
- {
779
- for (auto it = node->getOutEdges().begin(), et = node->getOutEdges().end(); it != et; ++it)
780
- {
781
- if((*it)->getICFGEdge() && !(*it)->getICFGEdge()->isIntraCFGEdge()) continue;
782
- const CFBasicBlockNode *succ = (*it)->getDstNode();
783
- if (getCDN(succ) == 0)
784
- {
785
- visit(succ, partition);
786
- }
787
- }
788
- }
789
- const CFBasicBlockGWTOCycle *ptr = newCycle(node, partition);
790
- _headToCycle.emplace(node, ptr);
791
- return ptr;
792
- }
793
-
794
- /// Main algorithm to build WTO
795
- virtual CycleDepthNumber visit(const CFBasicBlockNode *node, WTOCompRefList &partition)
796
- {
797
- CycleDepthNumber head(0);
798
- CycleDepthNumber min(0);
799
- bool loop;
800
-
801
- push(node);
802
- _num += CycleDepthNumber(1);
803
- head = _num;
804
- setCDN(node, head);
805
- loop = false;
806
- if (const CallICFGNode* callNode = SVFUtil::dyn_cast<CallICFGNode>(node->getICFGNodes().front()))
807
- {
808
- const CFBasicBlockNode *succ = _graph->getCFBasicBlockNode(callNode->getRetICFGNode()->getId());
809
- CycleDepthNumber succ_dfn = getCDN(succ);
810
- if (succ_dfn == CycleDepthNumber(0))
811
- {
812
- min = visit(succ, partition);
813
- }
814
- else
815
- {
816
- min = succ_dfn;
817
- }
818
- if (min <= head)
819
- {
820
- head = min;
821
- loop = true;
822
- }
823
- }
824
- else
825
- {
826
- for (auto it = node->getOutEdges().begin(), et = node->getOutEdges().end(); it != et; ++it)
827
- {
828
- if((*it)->getICFGEdge() && !(*it)->getICFGEdge()->isIntraCFGEdge()) continue;
829
- const CFBasicBlockNode *succ = (*it)->getDstNode();
830
- if (succ->getFunction() != node->getFunction())
831
- continue;
832
- CycleDepthNumber succ_dfn = getCDN(succ);
833
- if (succ_dfn == CycleDepthNumber(0))
834
- {
835
- min = visit(succ, partition);
836
- }
837
- else
838
- {
839
- min = succ_dfn;
840
- }
841
- if (min <= head)
842
- {
843
- head = min;
844
- loop = true;
845
- }
846
- }
847
- }
848
- if (head == getCDN(node))
849
- {
850
- setCDN(node, UINT_MAX);
851
- const CFBasicBlockNode *element = pop();
852
- if (loop)
853
- {
854
- while (element != node)
855
- {
856
- setCDN(element, 0);
857
- element = pop();
858
- }
859
- partition.push_front(component(node));
860
- }
861
- else
862
- {
863
- partition.push_front(newNode(node));
864
- }
865
- }
866
- return head;
867
- }
868
-
869
- /// Build the node to WTO cycle depth table
870
- void buildNodeToWTOCycleDepth()
871
- {
872
- WTOCycleDepthBuilder builder(_nodeToDepth);
873
- for (auto it = begin(), et = end(); it != et; ++it)
874
- {
875
- (*it)->accept(&builder);
876
- }
877
- }
878
-
879
- /// Build the tails for each cycle
880
- virtual void build_tails()
881
- {
882
- for (const auto &head: _headToCycle)
883
- {
884
- NodeRefSet tails;
885
- TailBuilder builder(_graph, _nodeToDepth, tails, head.first, getWTOCycleDepth(head.first));
886
- for (auto it = head.second->begin(), eit = head.second->end(); it != eit; ++it)
887
- {
888
- (*it)->accept(&builder);
889
- }
890
- _headToTails.emplace(head.first, tails);
891
- }
892
- }
893
-
894
- }; // end class CFBasicBlockGWTO
895
-
896
- } // end namespace SVF
897
- #endif /* WTO_H_ */