svf-tools 1.0.618 → 1.0.620

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 (385) hide show
  1. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +2 -2
  2. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +8 -8
  3. package/SVF-doxygen/html/html/Andersen_8h_source.html +4 -3
  4. package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +3 -3
  5. package/SVF-doxygen/html/html/CFLBase_8cpp_source.html +4 -4
  6. package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +2 -2
  7. package/SVF-doxygen/html/html/CFLVF_8cpp_source.html +3 -3
  8. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +2 -2
  9. package/SVF-doxygen/html/html/CommandLine_8h.html +129 -0
  10. package/SVF-doxygen/html/html/CommandLine_8h_source.html +132 -0
  11. package/SVF-doxygen/html/html/ConsGNode_8h_source.html +5 -5
  12. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +4 -4
  13. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +2 -2
  14. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +2 -2
  15. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +20 -19
  16. package/SVF-doxygen/html/html/DDAPass_8h_source.html +9 -9
  17. package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +2 -2
  18. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +6 -6
  19. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +1 -1
  20. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +7 -7
  21. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +1 -1
  22. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +2 -2
  23. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +2 -2
  24. package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +2 -2
  25. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +21 -20
  26. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +17 -17
  27. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +2 -2
  28. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +2 -2
  29. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +2 -2
  30. package/SVF-doxygen/html/html/MHP_8cpp_source.html +2 -2
  31. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +3 -3
  32. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +2 -2
  33. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +2 -2
  34. package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
  35. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +2 -2
  36. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +3 -3
  37. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +6 -6
  38. package/SVF-doxygen/html/html/Options_8cpp.html +1 -0
  39. package/SVF-doxygen/html/html/Options_8cpp_source.html +123 -119
  40. package/SVF-doxygen/html/html/Options_8h.html +1 -1
  41. package/SVF-doxygen/html/html/Options_8h_source.html +124 -120
  42. package/SVF-doxygen/html/html/PCG_8cpp.html +2 -1
  43. package/SVF-doxygen/html/html/PCG_8cpp_source.html +13 -12
  44. package/SVF-doxygen/html/html/PCG_8h_source.html +12 -12
  45. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +4 -4
  46. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +13 -13
  47. package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +1 -1
  48. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +5 -5
  49. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +5 -5
  50. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +4 -4
  51. package/SVF-doxygen/html/html/SVFIR2ItvExeState_8cpp_source.html +2 -2
  52. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +4 -3
  53. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +1 -1
  54. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +5 -4
  55. package/SVF-doxygen/html/html/SVFStat_8cpp_source.html +3 -3
  56. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +2 -2
  57. package/SVF-doxygen/html/html/SVFType_8h.html +2 -2
  58. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +2 -2
  59. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +2 -2
  60. package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +2 -2
  61. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +5 -5
  62. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +7 -7
  63. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +4 -4
  64. package/SVF-doxygen/html/html/TCT_8cpp_source.html +2 -2
  65. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -2
  66. package/SVF-doxygen/html/html/VFG_8cpp_source.html +2 -2
  67. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +4 -4
  68. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +10 -9
  69. package/SVF-doxygen/html/html/WPAPass_8h_source.html +4 -4
  70. package/SVF-doxygen/html/html/Z3Expr_8cpp_source.html +2 -2
  71. package/SVF-doxygen/html/html/annotated.html +6 -2
  72. package/SVF-doxygen/html/html/cfl_8cpp.html +3 -85
  73. package/SVF-doxygen/html/html/cfl_8cpp_source.html +3 -5
  74. package/SVF-doxygen/html/html/classOption-members.html +99 -0
  75. package/SVF-doxygen/html/html/classOption.html +567 -0
  76. package/SVF-doxygen/html/html/classOption.png +0 -0
  77. package/SVF-doxygen/html/html/classOptionBase-members.html +95 -0
  78. package/SVF-doxygen/html/html/classOptionBase.html +823 -0
  79. package/SVF-doxygen/html/html/classOptionBase.png +0 -0
  80. package/SVF-doxygen/html/html/classOptionMap-members.html +97 -0
  81. package/SVF-doxygen/html/html/classOptionMap.html +428 -0
  82. package/SVF-doxygen/html/html/classOptionMap.png +0 -0
  83. package/SVF-doxygen/html/html/classOptionMultiple-members.html +97 -0
  84. package/SVF-doxygen/html/html/classOptionMultiple.html +460 -0
  85. package/SVF-doxygen/html/html/classOptionMultiple.png +0 -0
  86. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +2 -2
  87. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +16 -15
  88. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +9 -9
  89. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +6 -6
  90. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +6 -6
  91. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +2 -2
  92. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +2 -2
  93. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +6 -6
  94. package/SVF-doxygen/html/html/classSVF_1_1CFLBase.html +7 -7
  95. package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder.html +2 -2
  96. package/SVF-doxygen/html/html/classSVF_1_1CFLNode.html +4 -4
  97. package/SVF-doxygen/html/html/classSVF_1_1CFLVF.html +5 -5
  98. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +2 -2
  99. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +2 -2
  100. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +2 -2
  101. package/SVF-doxygen/html/html/classSVF_1_1CondStdSet.html +2 -2
  102. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode-members.html +26 -26
  103. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +72 -72
  104. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +2 -2
  105. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +2 -2
  106. package/SVF-doxygen/html/html/classSVF_1_1CoreBitVector.html +8 -8
  107. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +2 -2
  108. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +36 -35
  109. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +2 -2
  110. package/SVF-doxygen/html/html/classSVF_1_1ExeState.html +4 -4
  111. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +2 -2
  112. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +2 -2
  113. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +11 -11
  114. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +22 -8
  115. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
  116. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +2 -2
  117. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +2 -2
  118. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +2 -2
  119. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +2 -2
  120. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +1 -1
  121. package/SVF-doxygen/html/html/classSVF_1_1IntervalExeState.html +8 -8
  122. package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +2 -2
  123. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +73 -72
  124. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +2 -2
  125. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +2 -2
  126. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +2 -2
  127. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +2 -2
  128. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +2 -2
  129. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +1 -1
  130. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +10 -10
  131. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +6 -6
  132. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +12 -12
  133. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +2 -2
  134. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +4 -4
  135. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator.html +2 -2
  136. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +8 -8
  137. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +2 -2
  138. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +2 -2
  139. package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +120 -120
  140. package/SVF-doxygen/html/html/classSVF_1_1Options.html +613 -613
  141. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +28 -28
  142. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +2 -2
  143. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +18 -18
  144. package/SVF-doxygen/html/html/classSVF_1_1PointsTo.html +2 -2
  145. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +2 -2
  146. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +2 -2
  147. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +3 -3
  148. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +7 -7
  149. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +9 -9
  150. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +9 -8
  151. package/SVF-doxygen/html/html/classSVF_1_1SVFIR2ItvExeState.html +2 -2
  152. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +18 -18
  153. package/SVF-doxygen/html/html/classSVF_1_1SVFStat.html +6 -6
  154. package/SVF-doxygen/html/html/classSVF_1_1SVFType.html +1 -1
  155. package/SVF-doxygen/html/html/classSVF_1_1SaberCondAllocator.html +3 -3
  156. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +2 -2
  157. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +9 -9
  158. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +2 -2
  159. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +11 -11
  160. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +10 -10
  161. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +4 -4
  162. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +2 -2
  163. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +2 -2
  164. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +2 -2
  165. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +2 -2
  166. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +8 -8
  167. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +2 -2
  168. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +6 -6
  169. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +27 -26
  170. package/SVF-doxygen/html/html/classSVF_1_1Z3Expr.html +6 -6
  171. package/SVF-doxygen/html/html/classes.html +113 -112
  172. package/SVF-doxygen/html/html/dda_8cpp.html +51 -248
  173. package/SVF-doxygen/html/html/dda_8cpp_source.html +9 -10
  174. package/SVF-doxygen/html/html/dir_95e22971b5dbae2382075a3453e365b4.html +2 -0
  175. package/SVF-doxygen/html/html/files.html +18 -17
  176. package/SVF-doxygen/html/html/functions_a.html +7 -7
  177. package/SVF-doxygen/html/html/functions_b.html +9 -6
  178. package/SVF-doxygen/html/html/functions_c.html +48 -46
  179. package/SVF-doxygen/html/html/functions_d.html +20 -17
  180. package/SVF-doxygen/html/html/functions_e.html +6 -3
  181. package/SVF-doxygen/html/html/functions_f.html +19 -16
  182. package/SVF-doxygen/html/html/functions_func_b.html +5 -2
  183. package/SVF-doxygen/html/html/functions_func_c.html +36 -30
  184. package/SVF-doxygen/html/html/functions_func_e.html +5 -2
  185. package/SVF-doxygen/html/html/functions_func_f.html +4 -1
  186. package/SVF-doxygen/html/html/functions_func_g.html +12 -6
  187. package/SVF-doxygen/html/html/functions_func_i.html +18 -7
  188. package/SVF-doxygen/html/html/functions_func_n.html +4 -1
  189. package/SVF-doxygen/html/html/functions_func_o.html +28 -13
  190. package/SVF-doxygen/html/html/functions_func_p.html +13 -4
  191. package/SVF-doxygen/html/html/functions_func_s.html +20 -19
  192. package/SVF-doxygen/html/html/functions_func_u.html +3 -0
  193. package/SVF-doxygen/html/html/functions_g.html +16 -10
  194. package/SVF-doxygen/html/html/functions_h.html +1 -1
  195. package/SVF-doxygen/html/html/functions_i.html +38 -23
  196. package/SVF-doxygen/html/html/functions_k.html +1 -1
  197. package/SVF-doxygen/html/html/functions_l.html +7 -7
  198. package/SVF-doxygen/html/html/functions_m.html +12 -12
  199. package/SVF-doxygen/html/html/functions_n.html +6 -2
  200. package/SVF-doxygen/html/html/functions_o.html +46 -25
  201. package/SVF-doxygen/html/html/functions_p.html +55 -33
  202. package/SVF-doxygen/html/html/functions_r.html +6 -6
  203. package/SVF-doxygen/html/html/functions_s.html +30 -29
  204. package/SVF-doxygen/html/html/functions_t.html +4 -4
  205. package/SVF-doxygen/html/html/functions_type_o.html +7 -0
  206. package/SVF-doxygen/html/html/functions_type_p.html +6 -0
  207. package/SVF-doxygen/html/html/functions_u.html +6 -3
  208. package/SVF-doxygen/html/html/functions_v.html +10 -8
  209. package/SVF-doxygen/html/html/functions_vars_a.html +7 -7
  210. package/SVF-doxygen/html/html/functions_vars_b.html +1 -1
  211. package/SVF-doxygen/html/html/functions_vars_c.html +12 -12
  212. package/SVF-doxygen/html/html/functions_vars_d.html +18 -15
  213. package/SVF-doxygen/html/html/functions_vars_e.html +2 -2
  214. package/SVF-doxygen/html/html/functions_vars_f.html +6 -6
  215. package/SVF-doxygen/html/html/functions_vars_g.html +2 -2
  216. package/SVF-doxygen/html/html/functions_vars_h.html +1 -1
  217. package/SVF-doxygen/html/html/functions_vars_i.html +10 -6
  218. package/SVF-doxygen/html/html/functions_vars_k.html +1 -1
  219. package/SVF-doxygen/html/html/functions_vars_l.html +4 -4
  220. package/SVF-doxygen/html/html/functions_vars_m.html +11 -11
  221. package/SVF-doxygen/html/html/functions_vars_n.html +3 -2
  222. package/SVF-doxygen/html/html/functions_vars_o.html +5 -2
  223. package/SVF-doxygen/html/html/functions_vars_p.html +28 -21
  224. package/SVF-doxygen/html/html/functions_vars_r.html +5 -5
  225. package/SVF-doxygen/html/html/functions_vars_s.html +10 -10
  226. package/SVF-doxygen/html/html/functions_vars_t.html +4 -4
  227. package/SVF-doxygen/html/html/functions_vars_u.html +3 -3
  228. package/SVF-doxygen/html/html/functions_vars_v.html +6 -4
  229. package/SVF-doxygen/html/html/functions_vars_w.html +3 -3
  230. package/SVF-doxygen/html/html/functions_w.html +11 -7
  231. package/SVF-doxygen/html/html/globals_d.html +4 -4
  232. package/SVF-doxygen/html/html/globals_e.html +6 -6
  233. package/SVF-doxygen/html/html/globals_f.html +2 -2
  234. package/SVF-doxygen/html/html/globals_func.html +6 -58
  235. package/SVF-doxygen/html/html/globals_i.html +4 -12
  236. package/SVF-doxygen/html/html/globals_l.html +2 -2
  237. package/SVF-doxygen/html/html/globals_r.html +4 -4
  238. package/SVF-doxygen/html/html/globals_s.html +0 -4
  239. package/SVF-doxygen/html/html/globals_type.html +3 -0
  240. package/SVF-doxygen/html/html/globals_u.html +3 -0
  241. package/SVF-doxygen/html/html/globals_vars.html +43 -12
  242. package/SVF-doxygen/html/html/hierarchy.html +197 -182
  243. package/SVF-doxygen/html/html/include_2MTA_2MTAResultValidator_8h_source.html +1 -1
  244. package/SVF-doxygen/html/html/menudata.js +1 -2
  245. package/SVF-doxygen/html/html/mta_8cpp.html +4 -47
  246. package/SVF-doxygen/html/html/mta_8cpp_source.html +4 -4
  247. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +1 -1
  248. package/SVF-doxygen/html/html/saber_8cpp.html +38 -136
  249. package/SVF-doxygen/html/html/saber_8cpp_source.html +8 -7
  250. package/SVF-doxygen/html/html/search/all_1.js +7 -7
  251. package/SVF-doxygen/html/html/search/all_10.js +31 -26
  252. package/SVF-doxygen/html/html/search/all_11.js +8 -8
  253. package/SVF-doxygen/html/html/search/all_12.js +19 -20
  254. package/SVF-doxygen/html/html/search/all_13.js +7 -7
  255. package/SVF-doxygen/html/html/search/all_14.js +5 -4
  256. package/SVF-doxygen/html/html/search/all_15.js +6 -6
  257. package/SVF-doxygen/html/html/search/all_16.js +4 -4
  258. package/SVF-doxygen/html/html/search/all_2.js +2 -1
  259. package/SVF-doxygen/html/html/search/all_3.js +16 -14
  260. package/SVF-doxygen/html/html/search/all_4.js +18 -17
  261. package/SVF-doxygen/html/html/search/all_5.js +6 -5
  262. package/SVF-doxygen/html/html/search/all_6.js +9 -8
  263. package/SVF-doxygen/html/html/search/all_7.js +4 -2
  264. package/SVF-doxygen/html/html/search/all_8.js +1 -1
  265. package/SVF-doxygen/html/html/search/all_9.js +12 -9
  266. package/SVF-doxygen/html/html/search/all_b.js +2 -2
  267. package/SVF-doxygen/html/html/search/all_c.js +7 -7
  268. package/SVF-doxygen/html/html/search/all_d.js +12 -12
  269. package/SVF-doxygen/html/html/search/all_e.js +4 -3
  270. package/SVF-doxygen/html/html/search/all_f.js +24 -6
  271. package/SVF-doxygen/html/html/search/classes_c.js +15 -0
  272. package/SVF-doxygen/html/html/search/files_2.js +1 -0
  273. package/SVF-doxygen/html/html/search/functions_1.js +1 -0
  274. package/SVF-doxygen/html/html/search/functions_10.js +0 -2
  275. package/SVF-doxygen/html/html/search/functions_11.js +1 -2
  276. package/SVF-doxygen/html/html/search/functions_13.js +1 -0
  277. package/SVF-doxygen/html/html/search/functions_2.js +1 -0
  278. package/SVF-doxygen/html/html/search/functions_3.js +0 -2
  279. package/SVF-doxygen/html/html/search/functions_4.js +1 -3
  280. package/SVF-doxygen/html/html/search/functions_5.js +2 -1
  281. package/SVF-doxygen/html/html/search/functions_6.js +2 -0
  282. package/SVF-doxygen/html/html/search/functions_8.js +3 -1
  283. package/SVF-doxygen/html/html/search/functions_b.js +1 -1
  284. package/SVF-doxygen/html/html/search/functions_d.js +1 -0
  285. package/SVF-doxygen/html/html/search/functions_e.js +5 -1
  286. package/SVF-doxygen/html/html/search/functions_f.js +2 -0
  287. package/SVF-doxygen/html/html/search/typedefs_12.js +1 -1
  288. package/SVF-doxygen/html/html/search/typedefs_7.js +1 -1
  289. package/SVF-doxygen/html/html/search/typedefs_d.js +2 -0
  290. package/SVF-doxygen/html/html/search/typedefs_e.js +2 -0
  291. package/SVF-doxygen/html/html/search/variables_1.js +7 -7
  292. package/SVF-doxygen/html/html/search/variables_10.js +23 -21
  293. package/SVF-doxygen/html/html/search/variables_11.js +7 -5
  294. package/SVF-doxygen/html/html/search/variables_12.js +10 -10
  295. package/SVF-doxygen/html/html/search/variables_13.js +7 -7
  296. package/SVF-doxygen/html/html/search/variables_14.js +3 -3
  297. package/SVF-doxygen/html/html/search/variables_15.js +4 -4
  298. package/SVF-doxygen/html/html/search/variables_16.js +3 -3
  299. package/SVF-doxygen/html/html/search/variables_2.js +1 -1
  300. package/SVF-doxygen/html/html/search/variables_3.js +12 -12
  301. package/SVF-doxygen/html/html/search/variables_4.js +18 -15
  302. package/SVF-doxygen/html/html/search/variables_5.js +5 -2
  303. package/SVF-doxygen/html/html/search/variables_6.js +7 -6
  304. package/SVF-doxygen/html/html/search/variables_7.js +2 -2
  305. package/SVF-doxygen/html/html/search/variables_8.js +1 -1
  306. package/SVF-doxygen/html/html/search/variables_9.js +7 -6
  307. package/SVF-doxygen/html/html/search/variables_b.js +1 -1
  308. package/SVF-doxygen/html/html/search/variables_c.js +5 -4
  309. package/SVF-doxygen/html/html/search/variables_d.js +11 -11
  310. package/SVF-doxygen/html/html/search/variables_e.js +3 -3
  311. package/SVF-doxygen/html/html/search/variables_f.js +3 -2
  312. package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +4 -4
  313. package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +1 -1
  314. package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +2 -2
  315. package/SVF-doxygen/html/html/structSVF_1_1GrammarBase_1_1Symbol.html +4 -4
  316. package/SVF-doxygen/html/html/svf-ex_8cpp.html +12 -55
  317. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +8 -8
  318. package/SVF-doxygen/html/html/tools_2MTA_2MTAResultValidator_8h_source.html +1 -1
  319. package/SVF-doxygen/html/html/wpa_8cpp.html +4 -47
  320. package/SVF-doxygen/html/html/wpa_8cpp_source.html +4 -4
  321. package/include/Util/CommandLine.h +527 -0
  322. package/include/Util/Options.h +124 -124
  323. package/include/WPA/Andersen.h +5 -5
  324. package/lib/AbstractExecution/SVFIR2ItvExeState.cpp +2 -2
  325. package/lib/CFL/CFLAlias.cpp +5 -5
  326. package/lib/CFL/CFLBase.cpp +4 -4
  327. package/lib/CFL/CFLGraphBuilder.cpp +2 -2
  328. package/lib/CFL/CFLVF.cpp +5 -5
  329. package/lib/CMakeLists.txt +8 -4
  330. package/lib/DDA/ContextDDA.cpp +1 -1
  331. package/lib/DDA/DDAPass.cpp +14 -13
  332. package/lib/DDA/FlowDDA.cpp +1 -1
  333. package/lib/Graphs/ConsG.cpp +10 -10
  334. package/lib/Graphs/ICFG.cpp +1 -1
  335. package/lib/Graphs/IRGraph.cpp +2 -2
  336. package/lib/Graphs/SVFG.cpp +5 -5
  337. package/lib/Graphs/SVFGOPT.cpp +5 -5
  338. package/lib/Graphs/VFG.cpp +1 -1
  339. package/lib/MSSA/MemRegion.cpp +2 -2
  340. package/lib/MSSA/MemSSA.cpp +4 -4
  341. package/lib/MSSA/SVFGBuilder.cpp +4 -4
  342. package/lib/MTA/FSMPTA.cpp +13 -13
  343. package/lib/MTA/MHP.cpp +1 -1
  344. package/lib/MTA/MTA.cpp +2 -2
  345. package/lib/MTA/MTAStat.cpp +1 -1
  346. package/lib/MTA/PCG.cpp +8 -2
  347. package/lib/MTA/TCT.cpp +2 -2
  348. package/lib/MemoryModel/PointerAnalysis.cpp +13 -13
  349. package/lib/MemoryModel/PointerAnalysisImpl.cpp +13 -13
  350. package/lib/MemoryModel/PointsTo.cpp +1 -1
  351. package/lib/SABER/DoubleFreeChecker.cpp +1 -1
  352. package/lib/SABER/LeakChecker.cpp +1 -1
  353. package/lib/SABER/SaberCondAllocator.cpp +1 -1
  354. package/lib/SABER/SrcSnkDDA.cpp +5 -5
  355. package/lib/SVF-LLVM/CHGBuilder.cpp +1 -1
  356. package/lib/SVF-LLVM/DCHG.cpp +1 -1
  357. package/lib/SVF-LLVM/LLVMLoopAnalysis.cpp +2 -2
  358. package/lib/SVF-LLVM/LLVMModule.cpp +10 -4
  359. package/lib/SVF-LLVM/SVFIRBuilder.cpp +8 -8
  360. package/lib/SVF-LLVM/SymbolTableBuilder.cpp +5 -5
  361. package/lib/SVFIR/SVFIR.cpp +4 -4
  362. package/lib/SVFIR/SVFStatements.cpp +16 -16
  363. package/lib/SVFIR/SVFVariables.cpp +5 -5
  364. package/lib/SVFIR/SymbolTableInfo.cpp +6 -6
  365. package/lib/Util/NodeIDAllocator.cpp +9 -9
  366. package/lib/Util/Options.cpp +426 -412
  367. package/lib/Util/SVFStat.cpp +5 -5
  368. package/lib/Util/SVFUtil.cpp +1 -1
  369. package/lib/Util/Z3Expr.cpp +2 -2
  370. package/lib/WPA/Andersen.cpp +13 -13
  371. package/lib/WPA/AndersenSCD.cpp +3 -3
  372. package/lib/WPA/FlowSensitive.cpp +8 -8
  373. package/lib/WPA/TypeAnalysis.cpp +1 -1
  374. package/lib/WPA/VersionedFlowSensitive.cpp +4 -4
  375. package/lib/WPA/WPAPass.cpp +10 -9
  376. package/package.json +1 -1
  377. package/tools/CFL/cfl.cpp +6 -14
  378. package/tools/DDA/dda.cpp +39 -29
  379. package/tools/Example/svf-ex.cpp +5 -8
  380. package/tools/MTA/LockResultValidator.cpp +2 -2
  381. package/tools/MTA/MTAAnnotator.cpp +5 -5
  382. package/tools/MTA/MTAResultValidator.cpp +8 -8
  383. package/tools/MTA/mta.cpp +5 -8
  384. package/tools/SABER/saber.cpp +23 -17
  385. package/tools/WPA/wpa.cpp +6 -9
@@ -66,7 +66,7 @@ $(function() {
66
66
  <div class="title">MTA.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="MTA_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- MTA.h -- Analysis of multithreaded programs-------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> * MTA.cpp</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Created on: May 14, 2014</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> * Author: Yulei Sui, Peng Di</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="MTA_8h.html">MTA/MTA.h</a>&quot;</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="MHP_8h.html">MTA/MHP.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="TCT_8h.html">MTA/TCT.h</a>&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="LockAnalysis_8h.html">MTA/LockAnalysis.h</a>&quot;</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="MTAStat_8h.html">MTA/MTAStat.h</a>&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>&quot;</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="FSMPTA_8h.html">MTA/FSMPTA.h</a>&quot;</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>&quot;</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVFUtil.html">SVFUtil</a>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classSVF_1_1MTA.html#ab25d605ed6040a9ad6ed6fcec4e8d338"> 44</a></span>&#160;<a class="code" href="classSVF_1_1MTA.html#ab25d605ed6040a9ad6ed6fcec4e8d338">MTA::MTA</a>() : tcg(nullptr), tct(nullptr), mhp(nullptr), lsa(nullptr)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="classSVF_1_1MTA.html#abd4addbfd11a9479edd8625ed1947b9f">stat</a> = std::make_unique&lt;MTAStat&gt;();</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSVF_1_1MTA.html#a77b2f1d3de217219ea9346b5bbce4b5f"> 49</a></span>&#160;<a class="code" href="classSVF_1_1MTA.html#a77b2f1d3de217219ea9346b5bbce4b5f">MTA::~MTA</a>()</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;{</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTA.html#a308ca0fa99b3c95f3e62b27522b6aeaa">tcg</a>)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MTA.html#a308ca0fa99b3c95f3e62b27522b6aeaa">tcg</a>;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="comment">//if (tct)</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="comment">// delete tct;</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MTA.html#a957925a4ae00e48f77a58697853f3cc3">mhp</a>;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MTA.html#a80a44f3aa41d4259523c94044983c509">lsa</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;</div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classSVF_1_1MTA.html#ad9172b17fa738bff616771df6f9e9c37"> 62</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MTA.html#ad9172b17fa738bff616771df6f9e9c37">MTA::runOnModule</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;{</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="classSVF_1_1MTA.html#a957925a4ae00e48f77a58697853f3cc3">mhp</a> = <a class="code" href="classSVF_1_1MTA.html#a4f2f17975aabd2c4b9a3b2fbf3b1a487">computeMHP</a>(pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">getModule</a>());</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="classSVF_1_1MTA.html#a80a44f3aa41d4259523c94044983c509">lsa</a> = <a class="code" href="classSVF_1_1MTA.html#a0f4805f195ebd42d81127b1a79333c75">computeLocksets</a>(<a class="code" href="classSVF_1_1MTA.html#a957925a4ae00e48f77a58697853f3cc3">mhp</a>-&gt;<a class="code" href="classSVF_1_1MHP.html#a033936547612c54326a604f0ff1e39a6">getTCT</a>());</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment"> if (Options::AndersenAnno) {</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment"> pta = mhp-&gt;getTCT()-&gt;getPTA();</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment"> if (pta-&gt;printStat())</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment"> stat-&gt;performMHPPairStat(mhp,lsa);</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment"> AndersenWaveDiff::releaseAndersenWaveDiff();</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment"> } else if (Options::FSAnno) {</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment"> reportMemoryUsageKB(&quot;Mem before analysis&quot;);</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment"> DBOUT(DGENERAL, outs() &lt;&lt; pasMsg(&quot;FSMPTA analysis\n&quot;));</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment"> DBOUT(DMTA, outs() &lt;&lt; pasMsg(&quot;FSMPTA analysis\n&quot;));</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"> DOTIMESTAT(double ptStart = stat-&gt;getClk());</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"> pta = FSMPTA::createFSMPTA(module, mhp,lsa);</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment"> DOTIMESTAT(double ptEnd = stat-&gt;getClk());</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment"> DOTIMESTAT(stat-&gt;FSMPTATime += (ptEnd - ptStart) / TIMEINTERVAL);</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment"> reportMemoryUsageKB(&quot;Mem after analysis&quot;);</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment"> if (pta-&gt;printStat())</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment"> stat-&gt;performMHPPairStat(mhp,lsa);</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment"> FSMPTA::releaseFSMPTA();</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment"> }</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment"> if (DoInstrumentation) {</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment"> DBOUT(DGENERAL, outs() &lt;&lt; pasMsg(&quot;ThreadSanitizer Instrumentation\n&quot;));</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment"> DBOUT(DMTA, outs() &lt;&lt; pasMsg(&quot;ThreadSanitizer Instrumentation\n&quot;));</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment"> TSan tsan;</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="comment"> tsan.doInitialization(*pta-&gt;getModule());</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="comment"> for (Module::iterator it = pta-&gt;getModule()-&gt;begin(), eit = pta-&gt;getModule()-&gt;end(); it != eit; ++it) {</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="comment"> tsan.runOnFunction(*it);</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="comment"> }</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="comment"> if (pta-&gt;printStat())</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="comment"> PrintStatistics();</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="comment"> }</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;}</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classSVF_1_1MTA.html#a0f4805f195ebd42d81127b1a79333c75"> 113</a></span>&#160;<a class="code" href="classSVF_1_1LockAnalysis.html">LockAnalysis</a>* <a class="code" href="classSVF_1_1MTA.html#a0f4805f195ebd42d81127b1a79333c75">MTA::computeLocksets</a>(<a class="code" href="classSVF_1_1TCT.html">TCT</a>* <a class="code" href="classSVF_1_1MTA.html#a3f5c5c6689491beb8edfa25c0ad871d9">tct</a>)</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;{</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="classSVF_1_1LockAnalysis.html">LockAnalysis</a>* <a class="code" href="classSVF_1_1MTA.html#a80a44f3aa41d4259523c94044983c509">lsa</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1LockAnalysis.html">LockAnalysis</a>(tct);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; lsa-&gt;<a class="code" href="classSVF_1_1LockAnalysis.html#ad1516b6cb1dbd06b8dff04ae3c944621">analyze</a>();</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MTA.html#a80a44f3aa41d4259523c94044983c509">lsa</a>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;}</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="classSVF_1_1MTA.html#a4f2f17975aabd2c4b9a3b2fbf3b1a487"> 120</a></span>&#160;<a class="code" href="classSVF_1_1MHP.html">MHP</a>* <a class="code" href="classSVF_1_1MTA.html#a4f2f17975aabd2c4b9a3b2fbf3b1a487">MTA::computeMHP</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* module)</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;{</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;MTA analysis\n&quot;</span>));</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a217a1ccdaec1abb103cf6b0373631234">DMTA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;MTA analysis\n&quot;</span>));</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">PAG::getPAG</a>();</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta = <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a48ff6fc4badc79ad3204ae9bd95cc540">AndersenWaveDiff::createAndersenWaveDiff</a>(pag);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#a841be22581a7896d8924564e7199f62b">dump</a>(<span class="stringliteral">&quot;ptacg&quot;</span>);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;Build TCT\n&quot;</span>));</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a217a1ccdaec1abb103cf6b0373631234">DMTA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;Build TCT\n&quot;</span>));</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="SVFType_8h.html#ab6f41e9db3675dc689c5492418885041">DOTIMESTAT</a>(<span class="keywordtype">double</span> tctStart = <a class="code" href="classSVF_1_1MTA.html#abd4addbfd11a9479edd8625ed1947b9f">stat</a>-&gt;getClk());</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="classSVF_1_1MTA.html#a3f5c5c6689491beb8edfa25c0ad871d9">tct</a> = std::make_unique&lt;TCT&gt;(pta);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="classSVF_1_1MTA.html#a308ca0fa99b3c95f3e62b27522b6aeaa">tcg</a> = tct-&gt;getThreadCallGraph();</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="SVFType_8h.html#ab6f41e9db3675dc689c5492418885041">DOTIMESTAT</a>(<span class="keywordtype">double</span> tctEnd = <a class="code" href="classSVF_1_1MTA.html#abd4addbfd11a9479edd8625ed1947b9f">stat</a>-&gt;getClk());</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="SVFType_8h.html#ab6f41e9db3675dc689c5492418885041">DOTIMESTAT</a>(<a class="code" href="classSVF_1_1MTA.html#abd4addbfd11a9479edd8625ed1947b9f">stat</a>-&gt;TCTTime += (tctEnd - tctStart) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">if</span> (pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4880571f57542afc50da506dfe273183">printStat</a>())</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="classSVF_1_1MTA.html#abd4addbfd11a9479edd8625ed1947b9f">stat</a>-&gt;performThreadCallGraphStat(tcg);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="classSVF_1_1MTA.html#abd4addbfd11a9479edd8625ed1947b9f">stat</a>-&gt;performTCTStat(tct.get());</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; tcg-&gt;dump(<span class="stringliteral">&quot;tcg&quot;</span>);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;MHP analysis\n&quot;</span>));</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a217a1ccdaec1abb103cf6b0373631234">DMTA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;MHP analysis\n&quot;</span>));</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="code" href="SVFType_8h.html#ab6f41e9db3675dc689c5492418885041">DOTIMESTAT</a>(<span class="keywordtype">double</span> mhpStart = <a class="code" href="classSVF_1_1MTA.html#abd4addbfd11a9479edd8625ed1947b9f">stat</a>-&gt;getClk());</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <a class="code" href="classSVF_1_1MHP.html">MHP</a>* <a class="code" href="classSVF_1_1MTA.html#a957925a4ae00e48f77a58697853f3cc3">mhp</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MHP.html">MHP</a>(tct.get());</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; mhp-&gt;<a class="code" href="classSVF_1_1MHP.html#a02457fa6e3c85c897ec3b3d8db18cc4b">analyze</a>();</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="SVFType_8h.html#ab6f41e9db3675dc689c5492418885041">DOTIMESTAT</a>(<span class="keywordtype">double</span> mhpEnd = <a class="code" href="classSVF_1_1MTA.html#abd4addbfd11a9479edd8625ed1947b9f">stat</a>-&gt;getClk());</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="SVFType_8h.html#ab6f41e9db3675dc689c5492418885041">DOTIMESTAT</a>(<a class="code" href="classSVF_1_1MTA.html#abd4addbfd11a9479edd8625ed1947b9f">stat</a>-&gt;MHPTime += (mhpEnd - mhpStart) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;MHP analysis finish\n&quot;</span>));</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a217a1ccdaec1abb103cf6b0373631234">DMTA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;MHP analysis finish\n&quot;</span>));</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MTA.html#a957925a4ae00e48f77a58697853f3cc3">mhp</a>;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;}</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment">// * Check (1) write-write race</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="comment">// * (2) write-read race</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="comment">// * (3) read-read race</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment">// * when two memory access may-happen in parallel and are not protected by the same lock</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="comment">// * (excluding global constraints because they are initialized before running the main function)</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="comment">// */</span></div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classSVF_1_1MTA.html#af9558955c068ce922872c259dde1786e"> 166</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTA.html#af9558955c068ce922872c259dde1786e">MTA::detect</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* module)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;{</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;Starting Race Detection\n&quot;</span>));</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <a class="code" href="classSVF_1_1MTA.html#a61ad028aa33e2fc5c9d05b9f735bd62e">LoadSet</a> loads;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="classSVF_1_1MTA.html#a6bcd86c36f8f4307c4951a23021af92e">StoreSet</a> stores;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>();</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVFInstruction*&gt;</a> needcheckinst;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="comment">// Add symbols for all of the functions and the instructions in them.</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F : module-&gt;<a class="code" href="classSVF_1_1SVFModule.html#abbaf48d9702ec1f38dc6ae137ca630a1">getFunctionSet</a>())</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="comment">// collect and create symbols inside the function body</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* svfbb : F-&gt;getBasicBlockList())</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst : svfbb-&gt;getInstructionList())</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; {</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* stmt : pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a570ad42ad516e3fabb91a3563b618c0b">getSVFStmtList</a>(pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(svfInst)))</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;LoadStmt&gt;(stmt))</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; loads.insert(svfInst);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;StoreStmt&gt;(stmt))</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; stores.insert(svfInst);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; }</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; }</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">for</span> (LoadSet::const_iterator lit = loads.begin(), elit = loads.end(); lit != elit; ++lit)</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* load = *lit;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordtype">bool</span> loadneedcheck = <span class="keyword">false</span>;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">for</span> (StoreSet::const_iterator sit = stores.begin(), esit = stores.end(); sit != esit; ++sit)</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; {</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* store = *sit;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; loadneedcheck = <span class="keyword">true</span>;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; needcheckinst.insert(store);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">if</span> (loadneedcheck)</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; needcheckinst.insert(load);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;HP needcheck: &quot;</span> &lt;&lt; needcheckinst.size() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;}</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;</div><div class="ttc" id="classSVF_1_1MHP_html"><div class="ttname"><a href="classSVF_1_1MHP.html">SVF::MHP</a></div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00045">MHP.h:45</a></div></div>
69
+ <a href="MTA_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- MTA.h -- Analysis of multithreaded programs-------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> * MTA.cpp</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Created on: May 14, 2014</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> * Author: Yulei Sui, Peng Di</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="MTA_8h.html">MTA/MTA.h</a>&quot;</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="MHP_8h.html">MTA/MHP.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="TCT_8h.html">MTA/TCT.h</a>&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="LockAnalysis_8h.html">MTA/LockAnalysis.h</a>&quot;</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="MTAStat_8h.html">MTA/MTAStat.h</a>&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>&quot;</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="FSMPTA_8h.html">MTA/FSMPTA.h</a>&quot;</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>&quot;</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVFUtil.html">SVFUtil</a>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classSVF_1_1MTA.html#ab25d605ed6040a9ad6ed6fcec4e8d338"> 44</a></span>&#160;<a class="code" href="classSVF_1_1MTA.html#ab25d605ed6040a9ad6ed6fcec4e8d338">MTA::MTA</a>() : tcg(nullptr), tct(nullptr), mhp(nullptr), lsa(nullptr)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="classSVF_1_1MTA.html#abd4addbfd11a9479edd8625ed1947b9f">stat</a> = std::make_unique&lt;MTAStat&gt;();</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSVF_1_1MTA.html#a77b2f1d3de217219ea9346b5bbce4b5f"> 49</a></span>&#160;<a class="code" href="classSVF_1_1MTA.html#a77b2f1d3de217219ea9346b5bbce4b5f">MTA::~MTA</a>()</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;{</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MTA.html#a308ca0fa99b3c95f3e62b27522b6aeaa">tcg</a>)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MTA.html#a308ca0fa99b3c95f3e62b27522b6aeaa">tcg</a>;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="comment">//if (tct)</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="comment">// delete tct;</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MTA.html#a957925a4ae00e48f77a58697853f3cc3">mhp</a>;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MTA.html#a80a44f3aa41d4259523c94044983c509">lsa</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;</div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classSVF_1_1MTA.html#ad9172b17fa738bff616771df6f9e9c37"> 62</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MTA.html#ad9172b17fa738bff616771df6f9e9c37">MTA::runOnModule</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;{</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="classSVF_1_1MTA.html#a957925a4ae00e48f77a58697853f3cc3">mhp</a> = <a class="code" href="classSVF_1_1MTA.html#a4f2f17975aabd2c4b9a3b2fbf3b1a487">computeMHP</a>(pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">getModule</a>());</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="classSVF_1_1MTA.html#a80a44f3aa41d4259523c94044983c509">lsa</a> = <a class="code" href="classSVF_1_1MTA.html#a0f4805f195ebd42d81127b1a79333c75">computeLocksets</a>(<a class="code" href="classSVF_1_1MTA.html#a957925a4ae00e48f77a58697853f3cc3">mhp</a>-&gt;<a class="code" href="classSVF_1_1MHP.html#a033936547612c54326a604f0ff1e39a6">getTCT</a>());</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment"> if (Options::AndersenAnno()) {</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment"> pta = mhp-&gt;getTCT()-&gt;getPTA();</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment"> if (pta-&gt;printStat())</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment"> stat-&gt;performMHPPairStat(mhp,lsa);</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment"> AndersenWaveDiff::releaseAndersenWaveDiff();</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment"> } else if (Options::FSAnno()) {</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment"> reportMemoryUsageKB(&quot;Mem before analysis&quot;);</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment"> DBOUT(DGENERAL, outs() &lt;&lt; pasMsg(&quot;FSMPTA analysis\n&quot;));</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment"> DBOUT(DMTA, outs() &lt;&lt; pasMsg(&quot;FSMPTA analysis\n&quot;));</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"> DOTIMESTAT(double ptStart = stat-&gt;getClk());</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"> pta = FSMPTA::createFSMPTA(module, mhp,lsa);</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment"> DOTIMESTAT(double ptEnd = stat-&gt;getClk());</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment"> DOTIMESTAT(stat-&gt;FSMPTATime += (ptEnd - ptStart) / TIMEINTERVAL);</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment"> reportMemoryUsageKB(&quot;Mem after analysis&quot;);</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment"> if (pta-&gt;printStat())</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment"> stat-&gt;performMHPPairStat(mhp,lsa);</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment"> FSMPTA::releaseFSMPTA();</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment"> }</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment"> if (DoInstrumentation) {</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment"> DBOUT(DGENERAL, outs() &lt;&lt; pasMsg(&quot;ThreadSanitizer Instrumentation\n&quot;));</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment"> DBOUT(DMTA, outs() &lt;&lt; pasMsg(&quot;ThreadSanitizer Instrumentation\n&quot;));</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment"> TSan tsan;</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="comment"> tsan.doInitialization(*pta-&gt;getModule());</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="comment"> for (Module::iterator it = pta-&gt;getModule()-&gt;begin(), eit = pta-&gt;getModule()-&gt;end(); it != eit; ++it) {</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="comment"> tsan.runOnFunction(*it);</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="comment"> }</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="comment"> if (pta-&gt;printStat())</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="comment"> PrintStatistics();</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="comment"> }</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;}</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classSVF_1_1MTA.html#a0f4805f195ebd42d81127b1a79333c75"> 113</a></span>&#160;<a class="code" href="classSVF_1_1LockAnalysis.html">LockAnalysis</a>* <a class="code" href="classSVF_1_1MTA.html#a0f4805f195ebd42d81127b1a79333c75">MTA::computeLocksets</a>(<a class="code" href="classSVF_1_1TCT.html">TCT</a>* <a class="code" href="classSVF_1_1MTA.html#a3f5c5c6689491beb8edfa25c0ad871d9">tct</a>)</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;{</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="classSVF_1_1LockAnalysis.html">LockAnalysis</a>* <a class="code" href="classSVF_1_1MTA.html#a80a44f3aa41d4259523c94044983c509">lsa</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1LockAnalysis.html">LockAnalysis</a>(tct);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; lsa-&gt;<a class="code" href="classSVF_1_1LockAnalysis.html#ad1516b6cb1dbd06b8dff04ae3c944621">analyze</a>();</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MTA.html#a80a44f3aa41d4259523c94044983c509">lsa</a>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;}</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="classSVF_1_1MTA.html#a4f2f17975aabd2c4b9a3b2fbf3b1a487"> 120</a></span>&#160;<a class="code" href="classSVF_1_1MHP.html">MHP</a>* <a class="code" href="classSVF_1_1MTA.html#a4f2f17975aabd2c4b9a3b2fbf3b1a487">MTA::computeMHP</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* module)</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;{</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;MTA analysis\n&quot;</span>));</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a217a1ccdaec1abb103cf6b0373631234">DMTA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;MTA analysis\n&quot;</span>));</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">PAG::getPAG</a>();</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta = <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a48ff6fc4badc79ad3204ae9bd95cc540">AndersenWaveDiff::createAndersenWaveDiff</a>(pag);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#a841be22581a7896d8924564e7199f62b">dump</a>(<span class="stringliteral">&quot;ptacg&quot;</span>);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;Build TCT\n&quot;</span>));</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a217a1ccdaec1abb103cf6b0373631234">DMTA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;Build TCT\n&quot;</span>));</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="SVFType_8h.html#ab6f41e9db3675dc689c5492418885041">DOTIMESTAT</a>(<span class="keywordtype">double</span> tctStart = <a class="code" href="classSVF_1_1MTA.html#abd4addbfd11a9479edd8625ed1947b9f">stat</a>-&gt;getClk());</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="classSVF_1_1MTA.html#a3f5c5c6689491beb8edfa25c0ad871d9">tct</a> = std::make_unique&lt;TCT&gt;(pta);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="classSVF_1_1MTA.html#a308ca0fa99b3c95f3e62b27522b6aeaa">tcg</a> = tct-&gt;getThreadCallGraph();</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="SVFType_8h.html#ab6f41e9db3675dc689c5492418885041">DOTIMESTAT</a>(<span class="keywordtype">double</span> tctEnd = <a class="code" href="classSVF_1_1MTA.html#abd4addbfd11a9479edd8625ed1947b9f">stat</a>-&gt;getClk());</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="SVFType_8h.html#ab6f41e9db3675dc689c5492418885041">DOTIMESTAT</a>(<a class="code" href="classSVF_1_1MTA.html#abd4addbfd11a9479edd8625ed1947b9f">stat</a>-&gt;TCTTime += (tctEnd - tctStart) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">if</span> (pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4880571f57542afc50da506dfe273183">printStat</a>())</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="classSVF_1_1MTA.html#abd4addbfd11a9479edd8625ed1947b9f">stat</a>-&gt;performThreadCallGraphStat(tcg);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="classSVF_1_1MTA.html#abd4addbfd11a9479edd8625ed1947b9f">stat</a>-&gt;performTCTStat(tct.get());</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; tcg-&gt;dump(<span class="stringliteral">&quot;tcg&quot;</span>);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;MHP analysis\n&quot;</span>));</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a217a1ccdaec1abb103cf6b0373631234">DMTA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;MHP analysis\n&quot;</span>));</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="code" href="SVFType_8h.html#ab6f41e9db3675dc689c5492418885041">DOTIMESTAT</a>(<span class="keywordtype">double</span> mhpStart = <a class="code" href="classSVF_1_1MTA.html#abd4addbfd11a9479edd8625ed1947b9f">stat</a>-&gt;getClk());</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <a class="code" href="classSVF_1_1MHP.html">MHP</a>* <a class="code" href="classSVF_1_1MTA.html#a957925a4ae00e48f77a58697853f3cc3">mhp</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MHP.html">MHP</a>(tct.get());</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; mhp-&gt;<a class="code" href="classSVF_1_1MHP.html#a02457fa6e3c85c897ec3b3d8db18cc4b">analyze</a>();</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="SVFType_8h.html#ab6f41e9db3675dc689c5492418885041">DOTIMESTAT</a>(<span class="keywordtype">double</span> mhpEnd = <a class="code" href="classSVF_1_1MTA.html#abd4addbfd11a9479edd8625ed1947b9f">stat</a>-&gt;getClk());</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="SVFType_8h.html#ab6f41e9db3675dc689c5492418885041">DOTIMESTAT</a>(<a class="code" href="classSVF_1_1MTA.html#abd4addbfd11a9479edd8625ed1947b9f">stat</a>-&gt;MHPTime += (mhpEnd - mhpStart) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;MHP analysis finish\n&quot;</span>));</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a217a1ccdaec1abb103cf6b0373631234">DMTA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;MHP analysis finish\n&quot;</span>));</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MTA.html#a957925a4ae00e48f77a58697853f3cc3">mhp</a>;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;}</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment">// * Check (1) write-write race</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="comment">// * (2) write-read race</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="comment">// * (3) read-read race</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment">// * when two memory access may-happen in parallel and are not protected by the same lock</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="comment">// * (excluding global constraints because they are initialized before running the main function)</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="comment">// */</span></div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classSVF_1_1MTA.html#af9558955c068ce922872c259dde1786e"> 166</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTA.html#af9558955c068ce922872c259dde1786e">MTA::detect</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* module)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;{</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;Starting Race Detection\n&quot;</span>));</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <a class="code" href="classSVF_1_1MTA.html#a61ad028aa33e2fc5c9d05b9f735bd62e">LoadSet</a> loads;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="classSVF_1_1MTA.html#a6bcd86c36f8f4307c4951a23021af92e">StoreSet</a> stores;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>();</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVFInstruction*&gt;</a> needcheckinst;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="comment">// Add symbols for all of the functions and the instructions in them.</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F : module-&gt;<a class="code" href="classSVF_1_1SVFModule.html#abbaf48d9702ec1f38dc6ae137ca630a1">getFunctionSet</a>())</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="comment">// collect and create symbols inside the function body</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* svfbb : F-&gt;getBasicBlockList())</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst : svfbb-&gt;getInstructionList())</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; {</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* stmt : pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a570ad42ad516e3fabb91a3563b618c0b">getSVFStmtList</a>(pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(svfInst)))</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;LoadStmt&gt;(stmt))</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; loads.insert(svfInst);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;StoreStmt&gt;(stmt))</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; stores.insert(svfInst);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; }</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; }</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">for</span> (LoadSet::const_iterator lit = loads.begin(), elit = loads.end(); lit != elit; ++lit)</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* load = *lit;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordtype">bool</span> loadneedcheck = <span class="keyword">false</span>;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">for</span> (StoreSet::const_iterator sit = stores.begin(), esit = stores.end(); sit != esit; ++sit)</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; {</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* store = *sit;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; loadneedcheck = <span class="keyword">true</span>;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; needcheckinst.insert(store);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">if</span> (loadneedcheck)</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; needcheckinst.insert(load);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;HP needcheck: &quot;</span> &lt;&lt; needcheckinst.size() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;}</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;</div><div class="ttc" id="classSVF_1_1MHP_html"><div class="ttname"><a href="classSVF_1_1MHP.html">SVF::MHP</a></div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00045">MHP.h:45</a></div></div>
70
70
  <div class="ttc" id="Andersen_8h_html"><div class="ttname"><a href="Andersen_8h.html">Andersen.h</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1SVFInstruction_html"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html">SVF::SVFInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00570">SVFValue.h:570</a></div></div>
72
72
  <div class="ttc" id="MHP_8h_html"><div class="ttname"><a href="MHP_8h.html">MHP.h</a></div></div>