svf-tools 1.0.483 → 1.0.486

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 (275) hide show
  1. package/SVF-doxygen/html/html/AndersenHCD_8cpp_source.html +2 -1
  2. package/SVF-doxygen/html/html/AndersenHLCD_8cpp_source.html +2 -1
  3. package/SVF-doxygen/html/html/AndersenLCD_8cpp_source.html +2 -1
  4. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +2 -1
  5. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +2 -1
  6. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +2 -1
  7. package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +2 -1
  8. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +3 -2
  9. package/SVF-doxygen/html/html/Andersen_8h_source.html +2 -2
  10. package/SVF-doxygen/html/html/BDDExpr_8cpp_source.html +2 -1
  11. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +2 -2
  12. package/SVF-doxygen/html/html/CFGNormalizer_8cpp_source.html +32 -32
  13. package/SVF-doxygen/html/html/CFGNormalizer_8h_source.html +11 -11
  14. package/SVF-doxygen/html/html/CFLAlias_8cpp.html +1 -0
  15. package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +46 -13
  16. package/SVF-doxygen/html/html/CFLAlias_8h_source.html +36 -13
  17. package/SVF-doxygen/html/html/CFLGramGraphChecker_8h_source.html +3 -3
  18. package/SVF-doxygen/html/html/CFLGrammar_8cpp_source.html +8 -8
  19. package/SVF-doxygen/html/html/CFLGrammar_8h_source.html +74 -77
  20. package/SVF-doxygen/html/html/CFLGrammar_8txt.html +165 -39
  21. package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +4 -4
  22. package/SVF-doxygen/html/html/CFLGraphBuilder_8h_source.html +2 -2
  23. package/SVF-doxygen/html/html/CFLGraph_8cpp_source.html +3 -3
  24. package/SVF-doxygen/html/html/CFLGraph_8h_source.html +3 -3
  25. package/SVF-doxygen/html/html/CFLSolver_8cpp_source.html +16 -16
  26. package/SVF-doxygen/html/html/CFLSolver_8h_source.html +10 -10
  27. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +3 -2
  28. package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +2 -2
  29. package/SVF-doxygen/html/html/CHG_8cpp_source.html +3 -2
  30. package/SVF-doxygen/html/html/CHG_8h_source.html +1 -1
  31. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +2 -2
  32. package/SVF-doxygen/html/html/CPPUtil_8h.html +4 -4
  33. package/SVF-doxygen/html/html/CSC_8cpp_source.html +2 -1
  34. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +3 -2
  35. package/SVF-doxygen/html/html/Casting_8h_source.html +2 -1
  36. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +4 -3
  37. package/SVF-doxygen/html/html/ConsG_8h_source.html +1 -1
  38. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +2 -1
  39. package/SVF-doxygen/html/html/DCHG_8h_source.html +1 -1
  40. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +2 -1
  41. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +2 -1
  42. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +2 -1
  43. package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +1 -1
  44. package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +2 -1
  45. package/SVF-doxygen/html/html/ExeState_8cpp_source.html +2 -1
  46. package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +2 -2
  47. package/SVF-doxygen/html/html/ExtAPI_8h.html +2 -2
  48. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +2 -2
  49. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +2 -1
  50. package/SVF-doxygen/html/html/FileChecker_8cpp_source.html +2 -1
  51. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +2 -1
  52. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +2 -1
  53. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +2 -1
  54. package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h_source.html +1 -1
  55. package/SVF-doxygen/html/html/GenericGraph_8h_source.html +1 -1
  56. package/SVF-doxygen/html/html/GrammarBuilder_8cpp_source.html +3 -3
  57. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +6 -4
  58. package/SVF-doxygen/html/html/GraphPrinter_8h_source.html +2 -2
  59. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +2 -1
  60. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +3 -2
  61. package/SVF-doxygen/html/html/ICFG_8h_source.html +1 -1
  62. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +3 -2
  63. package/SVF-doxygen/html/html/IRGraph_8h_source.html +1 -1
  64. package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +2 -1
  65. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +2 -2
  66. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +2 -1
  67. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +2 -1
  68. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +3 -2
  69. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +3 -2
  70. package/SVF-doxygen/html/html/MHP_8cpp_source.html +3 -2
  71. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +3 -2
  72. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +2 -2
  73. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +3 -2
  74. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +2 -2
  75. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +2 -2
  76. package/SVF-doxygen/html/html/MTA_8cpp_source.html +3 -2
  77. package/SVF-doxygen/html/html/MTA_8h_source.html +2 -2
  78. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +2 -1
  79. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +2 -1
  80. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +3 -2
  81. package/SVF-doxygen/html/html/OfflineConsG_8h_source.html +1 -1
  82. package/SVF-doxygen/html/html/Options_8cpp_source.html +4 -4
  83. package/SVF-doxygen/html/html/Options_8h_source.html +4 -4
  84. package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +2 -1
  85. package/SVF-doxygen/html/html/PCG_8cpp_source.html +3 -2
  86. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +3 -2
  87. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +1 -1
  88. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +2 -1
  89. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +3 -2
  90. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +2 -1
  91. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +2 -1
  92. package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +1 -1
  93. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +2 -1
  94. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +2 -1
  95. package/SVF-doxygen/html/html/SVFGReadWrite_8cpp_source.html +3 -2
  96. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +3 -2
  97. package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
  98. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +3 -2
  99. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +2 -2
  100. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +2 -1
  101. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +2 -1
  102. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +2 -2
  103. package/SVF-doxygen/html/html/SVFUtil_8h.html +1 -1
  104. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +3 -2
  105. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +2 -1
  106. package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +2 -2
  107. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +2 -1
  108. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +2 -1
  109. package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +2 -1
  110. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +3 -2
  111. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +2 -1
  112. package/SVF-doxygen/html/html/TCT_8cpp_source.html +3 -2
  113. package/SVF-doxygen/html/html/TCT_8h_source.html +1 -1
  114. package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +2 -2
  115. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +2 -1
  116. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -1
  117. package/SVF-doxygen/html/html/Util_2BasicTypes_8h.html +1 -1
  118. package/SVF-doxygen/html/html/Util_2BasicTypes_8h_source.html +2 -1
  119. package/SVF-doxygen/html/html/VFG_8cpp_source.html +3 -2
  120. package/SVF-doxygen/html/html/VFG_8h_source.html +1 -1
  121. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +2 -1
  122. package/SVF-doxygen/html/html/cfl_8cpp.html +1 -1
  123. package/SVF-doxygen/html/html/cfl_8cpp_source.html +2 -2
  124. package/SVF-doxygen/html/html/classSVF_1_1AliasCFLGraphBuilder.html +1 -1
  125. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +1 -1
  126. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +1 -1
  127. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +1 -1
  128. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +1 -1
  129. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +1 -1
  130. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +1 -1
  131. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +1 -1
  132. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +2 -2
  133. package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +2 -2
  134. package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer.html +54 -53
  135. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias-members.html +70 -63
  136. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +415 -95
  137. package/SVF-doxygen/html/html/classSVF_1_1CFLFIFOWorkList.html +25 -25
  138. package/SVF-doxygen/html/html/classSVF_1_1CFLGrammar-members.html +1 -1
  139. package/SVF-doxygen/html/html/classSVF_1_1CFLGrammar.html +51 -51
  140. package/SVF-doxygen/html/html/classSVF_1_1CFLSolver-members.html +4 -4
  141. package/SVF-doxygen/html/html/classSVF_1_1CFLSolver.html +39 -39
  142. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +4 -4
  143. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +2 -2
  144. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +13 -13
  145. package/SVF-doxygen/html/html/classSVF_1_1GrammarBase.html +58 -58
  146. package/SVF-doxygen/html/html/classSVF_1_1GrammarBase_1_1SymbolHash.html +3 -3
  147. package/SVF-doxygen/html/html/classSVF_1_1GrammarBuilder.html +3 -3
  148. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +2 -2
  149. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +2 -2
  150. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +2 -2
  151. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +4 -4
  152. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +2 -2
  153. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +1 -1
  154. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +5 -5
  155. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +6 -6
  156. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +6 -6
  157. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +2 -2
  158. package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +38 -38
  159. package/SVF-doxygen/html/html/classSVF_1_1Options.html +30 -30
  160. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +2 -2
  161. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +1 -1
  162. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +2 -2
  163. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +2 -2
  164. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +4 -4
  165. package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +3 -3
  166. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +2 -2
  167. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +3 -3
  168. package/SVF-doxygen/html/html/classllvm_1_1GraphPrinter.html +1 -1
  169. package/SVF-doxygen/html/html/cuddInt_8c.html +30 -30
  170. package/SVF-doxygen/html/html/cuddInt_8c_source.html +3 -3
  171. package/SVF-doxygen/html/html/cuddInt_8h.html +10 -10
  172. package/SVF-doxygen/html/html/cudd_8h.html +14 -14
  173. package/SVF-doxygen/html/html/cudd_8h_source.html +2 -2
  174. package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
  175. package/SVF-doxygen/html/html/functions_a.html +11 -10
  176. package/SVF-doxygen/html/html/functions_c.html +30 -23
  177. package/SVF-doxygen/html/html/functions_func.html +12 -11
  178. package/SVF-doxygen/html/html/functions_func_c.html +11 -10
  179. package/SVF-doxygen/html/html/functions_func_h.html +3 -2
  180. package/SVF-doxygen/html/html/functions_func_n.html +1 -1
  181. package/SVF-doxygen/html/html/functions_func_o.html +4 -9
  182. package/SVF-doxygen/html/html/functions_func_s.html +1 -1
  183. package/SVF-doxygen/html/html/functions_func_u.html +1 -0
  184. package/SVF-doxygen/html/html/functions_g.html +5 -8
  185. package/SVF-doxygen/html/html/functions_h.html +2 -1
  186. package/SVF-doxygen/html/html/functions_i.html +6 -6
  187. package/SVF-doxygen/html/html/functions_l.html +5 -5
  188. package/SVF-doxygen/html/html/functions_n.html +1 -1
  189. package/SVF-doxygen/html/html/functions_o.html +14 -21
  190. package/SVF-doxygen/html/html/functions_p.html +12 -9
  191. package/SVF-doxygen/html/html/functions_r.html +4 -4
  192. package/SVF-doxygen/html/html/functions_s.html +10 -8
  193. package/SVF-doxygen/html/html/functions_t.html +3 -3
  194. package/SVF-doxygen/html/html/functions_type_c.html +1 -0
  195. package/SVF-doxygen/html/html/functions_u.html +1 -0
  196. package/SVF-doxygen/html/html/functions_v.html +3 -3
  197. package/SVF-doxygen/html/html/functions_vars_c.html +1 -0
  198. package/SVF-doxygen/html/html/functions_vars_g.html +0 -3
  199. package/SVF-doxygen/html/html/functions_vars_p.html +3 -0
  200. package/SVF-doxygen/html/html/functions_w.html +6 -10
  201. package/SVF-doxygen/html/html/globals_a.html +3 -0
  202. package/SVF-doxygen/html/html/globals_f.html +2 -2
  203. package/SVF-doxygen/html/html/globals_g.html +10 -4
  204. package/SVF-doxygen/html/html/globals_l.html +4 -1
  205. package/SVF-doxygen/html/html/globals_m.html +15 -12
  206. package/SVF-doxygen/html/html/globals_s.html +17 -13
  207. package/SVF-doxygen/html/html/globals_vars.html +26 -5
  208. package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
  209. package/SVF-doxygen/html/html/namespaceSVF.html +2 -2
  210. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +3 -3
  211. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +12 -12
  212. package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
  213. package/SVF-doxygen/html/html/search/all_1.js +2 -1
  214. package/SVF-doxygen/html/html/search/all_10.js +8 -7
  215. package/SVF-doxygen/html/html/search/all_12.js +2 -2
  216. package/SVF-doxygen/html/html/search/all_13.js +12 -11
  217. package/SVF-doxygen/html/html/search/all_14.js +6 -6
  218. package/SVF-doxygen/html/html/search/all_15.js +2 -2
  219. package/SVF-doxygen/html/html/search/all_16.js +2 -2
  220. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  221. package/SVF-doxygen/html/html/search/all_3.js +2 -2
  222. package/SVF-doxygen/html/html/search/all_5.js +1 -1
  223. package/SVF-doxygen/html/html/search/all_6.js +2 -2
  224. package/SVF-doxygen/html/html/search/all_7.js +4 -3
  225. package/SVF-doxygen/html/html/search/all_8.js +1 -1
  226. package/SVF-doxygen/html/html/search/all_9.js +2 -2
  227. package/SVF-doxygen/html/html/search/all_c.js +6 -5
  228. package/SVF-doxygen/html/html/search/all_d.js +3 -2
  229. package/SVF-doxygen/html/html/search/all_e.js +3 -3
  230. package/SVF-doxygen/html/html/search/all_f.js +7 -9
  231. package/SVF-doxygen/html/html/search/functions_0.js +1 -1
  232. package/SVF-doxygen/html/html/search/functions_11.js +1 -1
  233. package/SVF-doxygen/html/html/search/functions_13.js +1 -1
  234. package/SVF-doxygen/html/html/search/functions_2.js +1 -1
  235. package/SVF-doxygen/html/html/search/functions_7.js +1 -1
  236. package/SVF-doxygen/html/html/search/functions_d.js +1 -1
  237. package/SVF-doxygen/html/html/search/functions_e.js +4 -6
  238. package/SVF-doxygen/html/html/search/typedefs_2.js +1 -1
  239. package/SVF-doxygen/html/html/search/variables_1.js +1 -0
  240. package/SVF-doxygen/html/html/search/variables_10.js +1 -0
  241. package/SVF-doxygen/html/html/search/variables_13.js +2 -0
  242. package/SVF-doxygen/html/html/search/variables_14.js +4 -4
  243. package/SVF-doxygen/html/html/search/variables_15.js +1 -1
  244. package/SVF-doxygen/html/html/search/variables_3.js +1 -1
  245. package/SVF-doxygen/html/html/search/variables_6.js +2 -2
  246. package/SVF-doxygen/html/html/search/variables_7.js +4 -3
  247. package/SVF-doxygen/html/html/search/variables_c.js +3 -2
  248. package/SVF-doxygen/html/html/search/variables_d.js +1 -0
  249. package/SVF-doxygen/html/html/search/variables_e.js +2 -2
  250. package/SVF-doxygen/html/html/structSVF_1_1GrammarBase_1_1Symbol-members.html +10 -13
  251. package/SVF-doxygen/html/html/structSVF_1_1GrammarBase_1_1Symbol.html +44 -145
  252. package/SVF-doxygen/html/html/structSVF_1_1GrammarBase_1_1SymbolVectorHash.html +3 -3
  253. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CFLGraph_01_5_01_4.html +6 -5
  254. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +4 -3
  255. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +4 -3
  256. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1CFLNode_01_5_01_4_01_4.html +1 -1
  257. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CFLGraph_01_5_01_4.html +2 -2
  258. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CFLNode_01_5_01_4.html +1 -1
  259. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
  260. package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
  261. package/include/CFL/CFLAlias.h +50 -4
  262. package/include/CFL/CFLGrammar.h +9 -28
  263. package/include/CFL/CFLGrammar.txt +22 -1
  264. package/include/CFL/CFLSolver.h +10 -8
  265. package/include/Graphs/CFLGraph.h +0 -1
  266. package/include/Graphs/GraphPrinter.h +3 -3
  267. package/include/Util/ExtAPI.h +1 -1
  268. package/{lib → include}/Util/ExtAPI.json +0 -0
  269. package/include/Util/Options.h +2 -2
  270. package/lib/CFL/CFGNormalizer.cpp +8 -14
  271. package/lib/CFL/CFLAlias.cpp +175 -6
  272. package/lib/CFL/CFLSolver.cpp +1 -0
  273. package/lib/Graphs/CFLGraph.cpp +0 -4
  274. package/lib/Util/Options.cpp +8 -8
  275. package/package.json +1 -1
@@ -76,7 +76,7 @@ $(function() {
76
76
  <div class="ttc" id="classSVF_1_1TCT_html_aac9d98a33fbaa6defa3f847d0bbe76d6"><div class="ttname"><a href="classSVF_1_1TCT.html#aac9d98a33fbaa6defa3f847d0bbe76d6">SVF::TCT::getTCTNode</a></div><div class="ttdeci">TCTNode * getTCTNode(const CxtThread &amp;ct) const</div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00239">TCT.h:239</a></div></div>
77
77
  <div class="ttc" id="classSVF_1_1TCT_html_a5d6a06c7daff36a14fa1f371a477784d"><div class="ttname"><a href="classSVF_1_1TCT.html#a5d6a06c7daff36a14fa1f371a477784d">SVF::TCT::getParentsEnd</a></div><div class="ttdeci">ThreadCreateEdgeSet::const_iterator getParentsEnd(const TCTNode *node) const</div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00199">TCT.h:199</a></div></div>
78
78
  <div class="ttc" id="classSVF_1_1TCT_html_aeb7dff0c02a90cb338c8d054d2b78984"><div class="ttname"><a href="classSVF_1_1TCT.html#aeb7dff0c02a90cb338c8d054d2b78984">SVF::TCT::getAncestorThread</a></div><div class="ttdeci">const NodeBS getAncestorThread(NodeID tid) const</div><div class="ttdoc">Get all ancestor threads. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00290">TCT.h:290</a></div></div>
79
- <div class="ttc" id="namespacellvm_html"><div class="ttname"><a href="namespacellvm.html">llvm</a></div><div class="ttdef"><b>Definition:</b> <a href="CFLGraph_8h_source.html#l00119">CFLGraph.h:119</a></div></div>
79
+ <div class="ttc" id="namespacellvm_html"><div class="ttname"><a href="namespacellvm.html">llvm</a></div><div class="ttdef"><b>Definition:</b> <a href="CFLGraph_8h_source.html#l00118">CFLGraph.h:118</a></div></div>
80
80
  <div class="ttc" id="classSVF_1_1TCT_html_a3123719a96acbefe0e9944c68ba44185"><div class="ttname"><a href="classSVF_1_1TCT.html#a3123719a96acbefe0e9944c68ba44185">SVF::TCT::FunSet</a></div><div class="ttdeci">Set&lt; const Function * &gt; FunSet</div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00121">TCT.h:121</a></div></div>
81
81
  <div class="ttc" id="classSVF_1_1TCT_html_a002bac3dc928bc78b94de0ca97b1ec1d"><div class="ttname"><a href="classSVF_1_1TCT.html#a002bac3dc928bc78b94de0ca97b1ec1d">SVF::TCT::pushToCTPWorkList</a></div><div class="ttdeci">bool pushToCTPWorkList(const CxtThreadProc &amp;ctp)</div><div class="ttdoc">WorkList helper functions. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00513">TCT.h:513</a></div></div>
82
82
  <div class="ttc" id="classSVF_1_1GenericNode_html_afc8b5f86d7795b6a0dfc0687d942d79b"><div class="ttname"><a href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">SVF::GenericNode::getInEdges</a></div><div class="ttdeci">const GEdgeSetTy &amp; getInEdges() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00186">GenericGraph.h:186</a></div></div>
@@ -66,7 +66,7 @@ $(function() {
66
66
  <div class="title">ThreadAPI.h</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="ThreadAPI_8h.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">//===- ThreadAPI.h -- API for threads-----------------------------------------//</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-2017&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;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * ThreadAPI.h</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: Jan 21, 2014</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Yulei Sui, dye</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#ifndef THREADAPI_H_</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#define THREADAPI_H_</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Util_2BasicTypes_8h.html">Util/BasicTypes.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;{</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">class </span>SVFModule;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment"> * ThreadAPI class contains interfaces for pthread programs</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html"> 43</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1ThreadAPI.html">ThreadAPI</a></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;{</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;<span class="keyword">public</span>:</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3"> 47</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3">TD_TYPE</a></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_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a5953e882e253807e49aa229e64e001b8"> 49</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a5953e882e253807e49aa229e64e001b8">TD_DUMMY</a> = 0, </div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a9a40948eeab9b022957ae33715ee83da"> 50</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a9a40948eeab9b022957ae33715ee83da">TD_FORK</a>, </div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a9efe9b72a2520e1fae3cae1e747e3134"> 51</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a9efe9b72a2520e1fae3cae1e747e3134">TD_JOIN</a>, </div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a0b558cf037397818414cac2f7c87ab08"> 52</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a0b558cf037397818414cac2f7c87ab08">TD_DETACH</a>, </div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a5bda6aca46dfc712f3781b4732a373a3"> 53</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a5bda6aca46dfc712f3781b4732a373a3">TD_ACQUIRE</a>, </div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3ab7ea623d48ae64aa09ab49deebbb7113"> 54</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3ab7ea623d48ae64aa09ab49deebbb7113">TD_TRY_ACQUIRE</a>, </div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3ac826e1e1c43305a3abcfdc9a2169b8dd"> 55</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3ac826e1e1c43305a3abcfdc9a2169b8dd">TD_RELEASE</a>, </div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3af3a3036705ecca40cf170d12d0ccf4dc"> 56</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3af3a3036705ecca40cf170d12d0ccf4dc">TD_EXIT</a>, </div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3afad2e548ab59646972d8c66e593845cc"> 57</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3afad2e548ab59646972d8c66e593845cc">TD_CANCEL</a>, </div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3aa8a39bd1bb13292a55dd6168909c872e"> 58</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3aa8a39bd1bb13292a55dd6168909c872e">TD_COND_WAIT</a>, </div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a01a3b1723176504482b606d8e097949f"> 59</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a01a3b1723176504482b606d8e097949f">TD_COND_SIGNAL</a>, </div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3aa6ee2952d7757b0919f56bd39fd5a93e"> 60</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3aa6ee2952d7757b0919f56bd39fd5a93e">TD_COND_BROADCAST</a>, </div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3abb17ca545bd259f16a36a2d2af43948b"> 61</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3abb17ca545bd259f16a36a2d2af43948b">TD_MUTEX_INI</a>, </div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a91db238366fcdcd65bd7710882c8716f"> 62</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a91db238366fcdcd65bd7710882c8716f">TD_MUTEX_DESTROY</a>, </div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a1f921d7369e3a00a77394640f887c7ff"> 63</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a1f921d7369e3a00a77394640f887c7ff">TD_CONDVAR_INI</a>, </div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a9c3f04e71ed64ce8d2862d7a6f39a95b"> 64</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a9c3f04e71ed64ce8d2862d7a6f39a95b">TD_CONDVAR_DESTROY</a>, </div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a4fb99e17bf56ae018448f5f97aa8cda6"> 65</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a4fb99e17bf56ae018448f5f97aa8cda6">TD_BAR_INIT</a>, </div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3aa2b2704ecc4c11ec0dbeaf1b22532431"> 66</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3aa2b2704ecc4c11ec0dbeaf1b22532431">TD_BAR_WAIT</a>, </div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a4690967fd6d32fb82c5de637846a3476"> 67</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a4690967fd6d32fb82c5de637846a3476">HARE_PAR_FOR</a></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;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#abad7c113fd56c30537444ae4bdff2144"> 70</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;std::string, TD_TYPE&gt;</a> <a class="code" href="classSVF_1_1ThreadAPI.html#abad7c113fd56c30537444ae4bdff2144">TDAPIMap</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a4277abaae24b43d83470054c247f479c"> 74</a></span>&#160; TDAPIMap <a class="code" href="classSVF_1_1ThreadAPI.html#a4277abaae24b43d83470054c247f479c">tdAPIMap</a>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a9c5ea333cc420bc3b8d8765c664ab128"> 77</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a9c5ea333cc420bc3b8d8765c664ab128">ThreadAPI</a> ()</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a4535862f26efff9f45236000507932c9">init</a>();</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a4535862f26efff9f45236000507932c9">init</a>();</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a2faebd2e481362b11ccce4256f81c32d"> 86</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1ThreadAPI.html">ThreadAPI</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a2faebd2e481362b11ccce4256f81c32d">tdAPI</a>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4"> 89</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3">TD_TYPE</a> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>)<span class="keyword"> const</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">if</span>(F)</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; TDAPIMap::const_iterator it= tdAPIMap.find(F-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2409c01221b9a6632655cee43d1b35e4">getName</a>());</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">if</span>(it != tdAPIMap.end())</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a5953e882e253807e49aa229e64e001b8">TD_DUMMY</a>;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a6852ff1eedc1117e95e45e4a90c80d53"> 102</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1ThreadAPI.html">ThreadAPI</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a6852ff1eedc1117e95e45e4a90c80d53">getThreadAPI</a>()</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">if</span>(tdAPI == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; tdAPI = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a9c5ea333cc420bc3b8d8765c664ab128">ThreadAPI</a>();</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a2faebd2e481362b11ccce4256f81c32d">tdAPI</a>;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#af4d921a3a0e5374188f7b6a6427c049d"> 111</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ThreadAPI.html#af4d921a3a0e5374188f7b6a6427c049d">destroy</a>()</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">if</span>(tdAPI != <span class="keyword">nullptr</span>)</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; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a2faebd2e481362b11ccce4256f81c32d">tdAPI</a>;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; tdAPI = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; }</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="l00121"></a><span class="lineno"> 121</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst) <span class="keyword">const</span>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs) <span class="keyword">const</span>;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> <a class="code" href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512">getLLVMCallSite</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst) <span class="keyword">const</span>;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</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"><a class="line" href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf"> 129</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf">isTDFork</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(inst)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a9a40948eeab9b022957ae33715ee83da">TD_FORK</a>;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div><div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a261eb3c2f7e44a81edf4feddfc65a3cc"> 133</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a261eb3c2f7e44a81edf4feddfc65a3cc">isTDFork</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf">isTDFork</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div><div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a86d75b7e3570337e484397e60f97d88e"> 141</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a86d75b7e3570337e484397e60f97d88e">isHareParFor</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(inst)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a4690967fd6d32fb82c5de637846a3476">HARE_PAR_FOR</a>;</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"><a class="line" href="classSVF_1_1ThreadAPI.html#adb944c2287cf7686a03b0e53a03ba025"> 145</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#adb944c2287cf7686a03b0e53a03ba025">isHareParFor</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf">isTDFork</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a11dc55f35c18bd1f46d00c21c7dc695e">getForkedThread</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf">isTDFork</a>(inst) &amp;&amp; <span class="stringliteral">&quot;not a thread fork function!&quot;</span>);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512">getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">return</span> cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div><div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a25a4bc5f173773340b430324a4d3bbdd"> 161</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a25a4bc5f173773340b430324a4d3bbdd">getForkedThread</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a11dc55f35c18bd1f46d00c21c7dc695e">getForkedThread</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a7ddc0c71aeae315af21972a4905b3456"> 168</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a7ddc0c71aeae315af21972a4905b3456">getForkedFun</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf">isTDFork</a>(inst) &amp;&amp; <span class="stringliteral">&quot;not a thread fork function!&quot;</span>);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512">getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">return</span> cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(2)-&gt;stripPointerCasts();</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; }</div><div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#aff38fda045d0016660710ab9124da13c"> 174</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#aff38fda045d0016660710ab9124da13c">getForkedFun</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a7ddc0c71aeae315af21972a4905b3456">getForkedFun</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;</div><div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a6bc40bc0b35c23e9d1874c844511449d"> 181</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a6bc40bc0b35c23e9d1874c844511449d">getActualParmAtForkSite</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf">isTDFork</a>(inst) &amp;&amp; <span class="stringliteral">&quot;not a thread fork function!&quot;</span>);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512">getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">return</span> cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(3);</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"><a class="line" href="classSVF_1_1ThreadAPI.html#ae8224e28db2323874fb9da8b05d3ab80"> 187</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#ae8224e28db2323874fb9da8b05d3ab80">getActualParmAtForkSite</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a6bc40bc0b35c23e9d1874c844511449d">getActualParmAtForkSite</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</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"><a class="line" href="classSVF_1_1ThreadAPI.html#afeedd6e518af76fa9e7142af8899b2f5"> 195</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#afeedd6e518af76fa9e7142af8899b2f5">getTaskFuncAtHareParForSite</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a86d75b7e3570337e484397e60f97d88e">isHareParFor</a>(inst) &amp;&amp; <span class="stringliteral">&quot;not a hare_parallel_for function!&quot;</span>);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512">getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">return</span> cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(4)-&gt;stripPointerCasts();</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div><div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a282d6aeab91135af4cab8195d67badf6"> 201</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a282d6aeab91135af4cab8195d67badf6">getTaskFuncAtHareParForSite</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#afeedd6e518af76fa9e7142af8899b2f5">getTaskFuncAtHareParForSite</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a58cf56e35be873a5a26c5eb0d9b5c9b3"> 209</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a58cf56e35be873a5a26c5eb0d9b5c9b3">getTaskDataAtHareParForSite</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a86d75b7e3570337e484397e60f97d88e">isHareParFor</a>(inst) &amp;&amp; <span class="stringliteral">&quot;not a hare_parallel_for function!&quot;</span>);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512">getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">return</span> cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(5);</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"><a class="line" href="classSVF_1_1ThreadAPI.html#aee8fac6281a95d8a519add100e8887d1"> 215</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#aee8fac6281a95d8a519add100e8887d1">getTaskDataAtHareParForSite</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a58cf56e35be873a5a26c5eb0d9b5c9b3">getTaskDataAtHareParForSite</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;</div><div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a8cc5f9ff6039392ce1471cd830973c44"> 223</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a8cc5f9ff6039392ce1471cd830973c44">isTDJoin</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(inst)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a9efe9b72a2520e1fae3cae1e747e3134">TD_JOIN</a>;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; }</div><div class="line"><a name="l00227"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a50e56d63c6d713ac34b4006d248f880b"> 227</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a50e56d63c6d713ac34b4006d248f880b">isTDJoin</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a8cc5f9ff6039392ce1471cd830973c44">isTDJoin</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#ac9f3cc080275ce7d76dd2f56fc7c6434">getJoinedThread</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a8cc5f9ff6039392ce1471cd830973c44">isTDJoin</a>(inst) &amp;&amp; <span class="stringliteral">&quot;not a thread join function!&quot;</span>);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512">getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* join = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;LoadInst&gt;(join))</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;LoadInst&gt;(join)-&gt;getPointerOperand();</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;Argument&gt;(join))</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">return</span> join;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;the value of the first argument at join is not a load instruction?&quot;</span>);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div><div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#adf4350f4ef5a8d845806ab99591efa93"> 249</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#adf4350f4ef5a8d845806ab99591efa93">getJoinedThread</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#ac9f3cc080275ce7d76dd2f56fc7c6434">getJoinedThread</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; }</div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#ad1c595f7b15a2d3079b9e9200c84f7d7"> 255</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#ad1c595f7b15a2d3079b9e9200c84f7d7">getRetParmAtJoinedSite</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a8cc5f9ff6039392ce1471cd830973c44">isTDJoin</a>(inst) &amp;&amp; <span class="stringliteral">&quot;not a thread join function!&quot;</span>);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512">getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">return</span> cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; }</div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a5439ef32c909b02c83cbd30eb0a0fe12"> 261</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a5439ef32c909b02c83cbd30eb0a0fe12">getRetParmAtJoinedSite</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#ad1c595f7b15a2d3079b9e9200c84f7d7">getRetParmAtJoinedSite</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#ae87d129560d7015966336f06a516db23"> 270</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#ae87d129560d7015966336f06a516db23">isTDExit</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(inst)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3af3a3036705ecca40cf170d12d0ccf4dc">TD_EXIT</a>;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; }</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;</div><div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a22d6c0cf0ba19af0661b106a8859024f"> 275</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a22d6c0cf0ba19af0661b106a8859024f">isTDExit</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(cs)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3af3a3036705ecca40cf170d12d0ccf4dc">TD_EXIT</a>;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;</div><div class="line"><a name="l00283"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a9db4df7968ec179e5012794c58fdee70"> 283</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a9db4df7968ec179e5012794c58fdee70">isTDAcquire</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(inst)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a5bda6aca46dfc712f3781b4732a373a3">TD_ACQUIRE</a>;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a608f0cb60a665745748b6a6654a6e837"> 288</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a608f0cb60a665745748b6a6654a6e837">isTDAcquire</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(cs)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a5bda6aca46dfc712f3781b4732a373a3">TD_ACQUIRE</a>;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;</div><div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38adae633d5aceddcca3b3a23ad66db9"> 296</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a38adae633d5aceddcca3b3a23ad66db9">isTDRelease</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(inst)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3ac826e1e1c43305a3abcfdc9a2169b8dd">TD_RELEASE</a>;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a1bba2e9df7a74e7e2f728267ff4bfe0f"> 301</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a1bba2e9df7a74e7e2f728267ff4bfe0f">isTDRelease</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(cs)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3ac826e1e1c43305a3abcfdc9a2169b8dd">TD_RELEASE</a>;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a8f1c869eb42f7c89697cf2c7452ba9e9">getLockVal</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((<a class="code" href="classSVF_1_1ThreadAPI.html#a9db4df7968ec179e5012794c58fdee70">isTDAcquire</a>(inst) || <a class="code" href="classSVF_1_1ThreadAPI.html#a38adae633d5aceddcca3b3a23ad66db9">isTDRelease</a>(inst)) &amp;&amp; <span class="stringliteral">&quot;not a lock acquire or release function&quot;</span>);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512">getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">return</span> cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div><div class="line"><a name="l00316"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#ad1d43e47f5036138e85068a1714f6c48"> 316</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#ad1d43e47f5036138e85068a1714f6c48">getLockVal</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a8f1c869eb42f7c89697cf2c7452ba9e9">getLockVal</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; }</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;</div><div class="line"><a name="l00324"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a0ff50b4312b9aa2c7ebd00e9a40a2668"> 324</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a0ff50b4312b9aa2c7ebd00e9a40a2668">isTDBarWait</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(inst)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3aa2b2704ecc4c11ec0dbeaf1b22532431">TD_BAR_WAIT</a>;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; }</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;</div><div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#af3aa58dc83dca382162df67c12169585"> 329</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#af3aa58dc83dca382162df67c12169585">isTDBarWait</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(cs)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3aa2b2704ecc4c11ec0dbeaf1b22532431">TD_BAR_WAIT</a>;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a60fba05298bc3bf43ec786255daba4ba">performAPIStat</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* m);</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a8a4ab0b1dcb2e3897b7740868e0d955d">statInit</a>(<a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;std::string, u32_t&gt;</a>&amp; tdAPIStatMap);</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;};</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* THREADAPI_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1ThreadAPI_html_a38a7516702c55ab418167b7c850516b3afad2e548ab59646972d8c66e593845cc"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3afad2e548ab59646972d8c66e593845cc">SVF::ThreadAPI::TD_CANCEL</a></div><div class="ttdoc">exit/kill a thread </div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00057">ThreadAPI.h:57</a></div></div>
69
+ <a href="ThreadAPI_8h.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">//===- ThreadAPI.h -- API for threads-----------------------------------------//</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-2017&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;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * ThreadAPI.h</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: Jan 21, 2014</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Yulei Sui, dye</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#ifndef THREADAPI_H_</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#define THREADAPI_H_</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Util_2BasicTypes_8h.html">Util/BasicTypes.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;{</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">class </span>SVFModule;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment"> * ThreadAPI class contains interfaces for pthread programs</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html"> 43</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1ThreadAPI.html">ThreadAPI</a></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;{</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;<span class="keyword">public</span>:</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3"> 47</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3">TD_TYPE</a></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_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a5953e882e253807e49aa229e64e001b8"> 49</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a5953e882e253807e49aa229e64e001b8">TD_DUMMY</a> = 0, </div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a9a40948eeab9b022957ae33715ee83da"> 50</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a9a40948eeab9b022957ae33715ee83da">TD_FORK</a>, </div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a9efe9b72a2520e1fae3cae1e747e3134"> 51</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a9efe9b72a2520e1fae3cae1e747e3134">TD_JOIN</a>, </div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a0b558cf037397818414cac2f7c87ab08"> 52</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a0b558cf037397818414cac2f7c87ab08">TD_DETACH</a>, </div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a5bda6aca46dfc712f3781b4732a373a3"> 53</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a5bda6aca46dfc712f3781b4732a373a3">TD_ACQUIRE</a>, </div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3ab7ea623d48ae64aa09ab49deebbb7113"> 54</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3ab7ea623d48ae64aa09ab49deebbb7113">TD_TRY_ACQUIRE</a>, </div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3ac826e1e1c43305a3abcfdc9a2169b8dd"> 55</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3ac826e1e1c43305a3abcfdc9a2169b8dd">TD_RELEASE</a>, </div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3af3a3036705ecca40cf170d12d0ccf4dc"> 56</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3af3a3036705ecca40cf170d12d0ccf4dc">TD_EXIT</a>, </div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3afad2e548ab59646972d8c66e593845cc"> 57</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3afad2e548ab59646972d8c66e593845cc">TD_CANCEL</a>, </div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3aa8a39bd1bb13292a55dd6168909c872e"> 58</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3aa8a39bd1bb13292a55dd6168909c872e">TD_COND_WAIT</a>, </div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a01a3b1723176504482b606d8e097949f"> 59</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a01a3b1723176504482b606d8e097949f">TD_COND_SIGNAL</a>, </div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3aa6ee2952d7757b0919f56bd39fd5a93e"> 60</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3aa6ee2952d7757b0919f56bd39fd5a93e">TD_COND_BROADCAST</a>, </div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3abb17ca545bd259f16a36a2d2af43948b"> 61</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3abb17ca545bd259f16a36a2d2af43948b">TD_MUTEX_INI</a>, </div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a91db238366fcdcd65bd7710882c8716f"> 62</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a91db238366fcdcd65bd7710882c8716f">TD_MUTEX_DESTROY</a>, </div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a1f921d7369e3a00a77394640f887c7ff"> 63</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a1f921d7369e3a00a77394640f887c7ff">TD_CONDVAR_INI</a>, </div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a9c3f04e71ed64ce8d2862d7a6f39a95b"> 64</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a9c3f04e71ed64ce8d2862d7a6f39a95b">TD_CONDVAR_DESTROY</a>, </div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a4fb99e17bf56ae018448f5f97aa8cda6"> 65</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a4fb99e17bf56ae018448f5f97aa8cda6">TD_BAR_INIT</a>, </div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3aa2b2704ecc4c11ec0dbeaf1b22532431"> 66</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3aa2b2704ecc4c11ec0dbeaf1b22532431">TD_BAR_WAIT</a>, </div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a4690967fd6d32fb82c5de637846a3476"> 67</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a4690967fd6d32fb82c5de637846a3476">HARE_PAR_FOR</a></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;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#abad7c113fd56c30537444ae4bdff2144"> 70</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;std::string, TD_TYPE&gt;</a> <a class="code" href="classSVF_1_1ThreadAPI.html#abad7c113fd56c30537444ae4bdff2144">TDAPIMap</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a4277abaae24b43d83470054c247f479c"> 74</a></span>&#160; TDAPIMap <a class="code" href="classSVF_1_1ThreadAPI.html#a4277abaae24b43d83470054c247f479c">tdAPIMap</a>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a9c5ea333cc420bc3b8d8765c664ab128"> 77</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a9c5ea333cc420bc3b8d8765c664ab128">ThreadAPI</a> ()</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html#a4535862f26efff9f45236000507932c9">init</a>();</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a4535862f26efff9f45236000507932c9">init</a>();</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a2faebd2e481362b11ccce4256f81c32d"> 86</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1ThreadAPI.html">ThreadAPI</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a2faebd2e481362b11ccce4256f81c32d">tdAPI</a>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4"> 89</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3">TD_TYPE</a> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)<span class="keyword"> const</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">if</span>(F)</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; TDAPIMap::const_iterator it= tdAPIMap.find(F-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2409c01221b9a6632655cee43d1b35e4">getName</a>());</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">if</span>(it != tdAPIMap.end())</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a5953e882e253807e49aa229e64e001b8">TD_DUMMY</a>;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a6852ff1eedc1117e95e45e4a90c80d53"> 102</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1ThreadAPI.html">ThreadAPI</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a6852ff1eedc1117e95e45e4a90c80d53">getThreadAPI</a>()</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">if</span>(tdAPI == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; tdAPI = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a9c5ea333cc420bc3b8d8765c664ab128">ThreadAPI</a>();</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a2faebd2e481362b11ccce4256f81c32d">tdAPI</a>;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#af4d921a3a0e5374188f7b6a6427c049d"> 111</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ThreadAPI.html#af4d921a3a0e5374188f7b6a6427c049d">destroy</a>()</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">if</span>(tdAPI != <span class="keyword">nullptr</span>)</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; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a2faebd2e481362b11ccce4256f81c32d">tdAPI</a>;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; tdAPI = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; }</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="l00121"></a><span class="lineno"> 121</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst) <span class="keyword">const</span>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs) <span class="keyword">const</span>;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> <a class="code" href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512">getLLVMCallSite</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst) <span class="keyword">const</span>;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</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"><a class="line" href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf"> 129</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf">isTDFork</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(inst)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a9a40948eeab9b022957ae33715ee83da">TD_FORK</a>;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div><div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a261eb3c2f7e44a81edf4feddfc65a3cc"> 133</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a261eb3c2f7e44a81edf4feddfc65a3cc">isTDFork</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf">isTDFork</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div><div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a86d75b7e3570337e484397e60f97d88e"> 141</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a86d75b7e3570337e484397e60f97d88e">isHareParFor</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(inst)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a4690967fd6d32fb82c5de637846a3476">HARE_PAR_FOR</a>;</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"><a class="line" href="classSVF_1_1ThreadAPI.html#adb944c2287cf7686a03b0e53a03ba025"> 145</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#adb944c2287cf7686a03b0e53a03ba025">isHareParFor</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf">isTDFork</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a11dc55f35c18bd1f46d00c21c7dc695e">getForkedThread</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf">isTDFork</a>(inst) &amp;&amp; <span class="stringliteral">&quot;not a thread fork function!&quot;</span>);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512">getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">return</span> cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div><div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a25a4bc5f173773340b430324a4d3bbdd"> 161</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a25a4bc5f173773340b430324a4d3bbdd">getForkedThread</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a11dc55f35c18bd1f46d00c21c7dc695e">getForkedThread</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a7ddc0c71aeae315af21972a4905b3456"> 168</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a7ddc0c71aeae315af21972a4905b3456">getForkedFun</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf">isTDFork</a>(inst) &amp;&amp; <span class="stringliteral">&quot;not a thread fork function!&quot;</span>);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512">getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">return</span> cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(2)-&gt;stripPointerCasts();</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; }</div><div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#aff38fda045d0016660710ab9124da13c"> 174</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#aff38fda045d0016660710ab9124da13c">getForkedFun</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a7ddc0c71aeae315af21972a4905b3456">getForkedFun</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;</div><div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a6bc40bc0b35c23e9d1874c844511449d"> 181</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a6bc40bc0b35c23e9d1874c844511449d">getActualParmAtForkSite</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf">isTDFork</a>(inst) &amp;&amp; <span class="stringliteral">&quot;not a thread fork function!&quot;</span>);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512">getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">return</span> cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(3);</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"><a class="line" href="classSVF_1_1ThreadAPI.html#ae8224e28db2323874fb9da8b05d3ab80"> 187</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#ae8224e28db2323874fb9da8b05d3ab80">getActualParmAtForkSite</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a6bc40bc0b35c23e9d1874c844511449d">getActualParmAtForkSite</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</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"><a class="line" href="classSVF_1_1ThreadAPI.html#afeedd6e518af76fa9e7142af8899b2f5"> 195</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#afeedd6e518af76fa9e7142af8899b2f5">getTaskFuncAtHareParForSite</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a86d75b7e3570337e484397e60f97d88e">isHareParFor</a>(inst) &amp;&amp; <span class="stringliteral">&quot;not a hare_parallel_for function!&quot;</span>);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512">getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">return</span> cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(4)-&gt;stripPointerCasts();</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div><div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a282d6aeab91135af4cab8195d67badf6"> 201</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a282d6aeab91135af4cab8195d67badf6">getTaskFuncAtHareParForSite</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#afeedd6e518af76fa9e7142af8899b2f5">getTaskFuncAtHareParForSite</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a58cf56e35be873a5a26c5eb0d9b5c9b3"> 209</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a58cf56e35be873a5a26c5eb0d9b5c9b3">getTaskDataAtHareParForSite</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a86d75b7e3570337e484397e60f97d88e">isHareParFor</a>(inst) &amp;&amp; <span class="stringliteral">&quot;not a hare_parallel_for function!&quot;</span>);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512">getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">return</span> cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(5);</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"><a class="line" href="classSVF_1_1ThreadAPI.html#aee8fac6281a95d8a519add100e8887d1"> 215</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#aee8fac6281a95d8a519add100e8887d1">getTaskDataAtHareParForSite</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a58cf56e35be873a5a26c5eb0d9b5c9b3">getTaskDataAtHareParForSite</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;</div><div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a8cc5f9ff6039392ce1471cd830973c44"> 223</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a8cc5f9ff6039392ce1471cd830973c44">isTDJoin</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(inst)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a9efe9b72a2520e1fae3cae1e747e3134">TD_JOIN</a>;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; }</div><div class="line"><a name="l00227"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a50e56d63c6d713ac34b4006d248f880b"> 227</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a50e56d63c6d713ac34b4006d248f880b">isTDJoin</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a8cc5f9ff6039392ce1471cd830973c44">isTDJoin</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#ac9f3cc080275ce7d76dd2f56fc7c6434">getJoinedThread</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a8cc5f9ff6039392ce1471cd830973c44">isTDJoin</a>(inst) &amp;&amp; <span class="stringliteral">&quot;not a thread join function!&quot;</span>);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512">getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* join = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;LoadInst&gt;(join))</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;LoadInst&gt;(join)-&gt;getPointerOperand();</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;Argument&gt;(join))</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">return</span> join;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;the value of the first argument at join is not a load instruction?&quot;</span>);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div><div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#adf4350f4ef5a8d845806ab99591efa93"> 249</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#adf4350f4ef5a8d845806ab99591efa93">getJoinedThread</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#ac9f3cc080275ce7d76dd2f56fc7c6434">getJoinedThread</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; }</div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#ad1c595f7b15a2d3079b9e9200c84f7d7"> 255</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#ad1c595f7b15a2d3079b9e9200c84f7d7">getRetParmAtJoinedSite</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a8cc5f9ff6039392ce1471cd830973c44">isTDJoin</a>(inst) &amp;&amp; <span class="stringliteral">&quot;not a thread join function!&quot;</span>);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512">getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">return</span> cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; }</div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a5439ef32c909b02c83cbd30eb0a0fe12"> 261</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a5439ef32c909b02c83cbd30eb0a0fe12">getRetParmAtJoinedSite</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#ad1c595f7b15a2d3079b9e9200c84f7d7">getRetParmAtJoinedSite</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#ae87d129560d7015966336f06a516db23"> 270</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#ae87d129560d7015966336f06a516db23">isTDExit</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(inst)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3af3a3036705ecca40cf170d12d0ccf4dc">TD_EXIT</a>;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; }</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;</div><div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a22d6c0cf0ba19af0661b106a8859024f"> 275</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a22d6c0cf0ba19af0661b106a8859024f">isTDExit</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(cs)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3af3a3036705ecca40cf170d12d0ccf4dc">TD_EXIT</a>;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;</div><div class="line"><a name="l00283"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a9db4df7968ec179e5012794c58fdee70"> 283</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a9db4df7968ec179e5012794c58fdee70">isTDAcquire</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(inst)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a5bda6aca46dfc712f3781b4732a373a3">TD_ACQUIRE</a>;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a608f0cb60a665745748b6a6654a6e837"> 288</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a608f0cb60a665745748b6a6654a6e837">isTDAcquire</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(cs)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a5bda6aca46dfc712f3781b4732a373a3">TD_ACQUIRE</a>;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;</div><div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a38adae633d5aceddcca3b3a23ad66db9"> 296</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a38adae633d5aceddcca3b3a23ad66db9">isTDRelease</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(inst)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3ac826e1e1c43305a3abcfdc9a2169b8dd">TD_RELEASE</a>;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a1bba2e9df7a74e7e2f728267ff4bfe0f"> 301</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a1bba2e9df7a74e7e2f728267ff4bfe0f">isTDRelease</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(cs)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3ac826e1e1c43305a3abcfdc9a2169b8dd">TD_RELEASE</a>;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#a8f1c869eb42f7c89697cf2c7452ba9e9">getLockVal</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((<a class="code" href="classSVF_1_1ThreadAPI.html#a9db4df7968ec179e5012794c58fdee70">isTDAcquire</a>(inst) || <a class="code" href="classSVF_1_1ThreadAPI.html#a38adae633d5aceddcca3b3a23ad66db9">isTDRelease</a>(inst)) &amp;&amp; <span class="stringliteral">&quot;not a lock acquire or release function&quot;</span>);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512">getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">return</span> cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div><div class="line"><a name="l00316"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#ad1d43e47f5036138e85068a1714f6c48"> 316</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ThreadAPI.html#ad1d43e47f5036138e85068a1714f6c48">getLockVal</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a8f1c869eb42f7c89697cf2c7452ba9e9">getLockVal</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; }</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;</div><div class="line"><a name="l00324"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a0ff50b4312b9aa2c7ebd00e9a40a2668"> 324</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a0ff50b4312b9aa2c7ebd00e9a40a2668">isTDBarWait</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(inst)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3aa2b2704ecc4c11ec0dbeaf1b22532431">TD_BAR_WAIT</a>;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; }</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;</div><div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#af3aa58dc83dca382162df67c12169585"> 329</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadAPI.html#af3aa58dc83dca382162df67c12169585">isTDBarWait</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a768a655dffc5fcf1d63e2a0b3f2930f4">getType</a>(<a class="code" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">getCallee</a>(cs)) == <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3aa2b2704ecc4c11ec0dbeaf1b22532431">TD_BAR_WAIT</a>;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a60fba05298bc3bf43ec786255daba4ba">performAPIStat</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* m);</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ThreadAPI.html#a8a4ab0b1dcb2e3897b7740868e0d955d">statInit</a>(<a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;std::string, u32_t&gt;</a>&amp; tdAPIStatMap);</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;};</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* THREADAPI_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1ThreadAPI_html_a38a7516702c55ab418167b7c850516b3afad2e548ab59646972d8c66e593845cc"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3afad2e548ab59646972d8c66e593845cc">SVF::ThreadAPI::TD_CANCEL</a></div><div class="ttdoc">exit/kill a thread </div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00057">ThreadAPI.h:57</a></div></div>
70
70
  <div class="ttc" id="classSVF_1_1ThreadAPI_html_ad4dfe9563de352bb40fb1028a2851512"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512">SVF::ThreadAPI::getLLVMCallSite</a></div><div class="ttdeci">const CallSite getLLVMCallSite(const Instruction *inst) const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8cpp_source.html#l00150">ThreadAPI.cpp:150</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1ThreadAPI_html_a38a7516702c55ab418167b7c850516b3a0b558cf037397818414cac2f7c87ab08"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a0b558cf037397818414cac2f7c87ab08">SVF::ThreadAPI::TD_DETACH</a></div><div class="ttdoc">wait for a thread to join </div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00052">ThreadAPI.h:52</a></div></div>
72
72
  <div class="ttc" id="classSVF_1_1ThreadAPI_html_a9da276dca5092d18f4f22d32e5ab6cdf"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf">SVF::ThreadAPI::isTDFork</a></div><div class="ttdeci">bool isTDFork(const Instruction *inst) const</div><div class="ttdoc">Return true if this call create a new thread. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00129">ThreadAPI.h:129</a></div></div>
@@ -124,13 +124,13 @@ $(function() {
124
124
  <div class="ttc" id="classSVF_1_1SVFValue_html_a2409c01221b9a6632655cee43d1b35e4"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a2409c01221b9a6632655cee43d1b35e4">SVF::SVFValue::getName</a></div><div class="ttdeci">const std::string getName() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00252">SVFBasicTypes.h:252</a></div></div>
125
125
  <div class="ttc" id="classSVF_1_1ThreadAPI_html_a08c83946d87ab935bd8bf6fea20792ba"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba">SVF::ThreadAPI::getCallee</a></div><div class="ttdeci">const SVFFunction * getCallee(const Instruction *inst) const</div><div class="ttdoc">Return the callee/callsite/func. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8cpp_source.html#l00134">ThreadAPI.cpp:134</a></div></div>
126
126
  <div class="ttc" id="classSVF_1_1ThreadAPI_html_a11dc55f35c18bd1f46d00c21c7dc695e"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#a11dc55f35c18bd1f46d00c21c7dc695e">SVF::ThreadAPI::getForkedThread</a></div><div class="ttdeci">const Value * getForkedThread(const Instruction *inst) const</div><div class="ttdoc">Return arguments/attributes of pthread_create / hare_parallel_for. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00155">ThreadAPI.h:155</a></div></div>
127
- <div class="ttc" id="CFLGrammar_8txt_html_acc7b4cf736579c4d83be2316d5a9e5f2"><div class="ttname"><a href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a></div><div class="ttdeci">V Fbar V F</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8txt_source.html#l00013">CFLGrammar.txt:13</a></div></div>
128
127
  <div class="ttc" id="classSVF_1_1ThreadAPI_html_a1bba2e9df7a74e7e2f728267ff4bfe0f"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#a1bba2e9df7a74e7e2f728267ff4bfe0f">SVF::ThreadAPI::isTDRelease</a></div><div class="ttdeci">bool isTDRelease(CallSite cs) const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00301">ThreadAPI.h:301</a></div></div>
129
128
  <div class="ttc" id="classSVF_1_1ThreadAPI_html_a8cc5f9ff6039392ce1471cd830973c44"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#a8cc5f9ff6039392ce1471cd830973c44">SVF::ThreadAPI::isTDJoin</a></div><div class="ttdeci">bool isTDJoin(const Instruction *inst) const</div><div class="ttdoc">Return true if this call wait for a worker thread. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00223">ThreadAPI.h:223</a></div></div>
130
129
  <div class="ttc" id="classSVF_1_1ThreadAPI_html_a261eb3c2f7e44a81edf4feddfc65a3cc"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#a261eb3c2f7e44a81edf4feddfc65a3cc">SVF::ThreadAPI::isTDFork</a></div><div class="ttdeci">bool isTDFork(CallSite cs) const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00133">ThreadAPI.h:133</a></div></div>
131
130
  <div class="ttc" id="classSVF_1_1ThreadAPI_html_a38a7516702c55ab418167b7c850516b3af3a3036705ecca40cf170d12d0ccf4dc"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3af3a3036705ecca40cf170d12d0ccf4dc">SVF::ThreadAPI::TD_EXIT</a></div><div class="ttdoc">release a lock </div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00056">ThreadAPI.h:56</a></div></div>
132
131
  <div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8h_source.html#l00035">CFGNormalizer.h:35</a></div></div>
133
132
  <div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00201">BasicTypes.h:201</a></div></div>
133
+ <div class="ttc" id="CFLGrammar_8txt_html_a00967427d1c110ffcc82ea2a966f4564"><div class="ttname"><a href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a></div><div class="ttdeci">V Fbar V F</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8txt_source.html#l00016">CFLGrammar.txt:16</a></div></div>
134
134
  <div class="ttc" id="classSVF_1_1ThreadAPI_html_a38a7516702c55ab418167b7c850516b3"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3">SVF::ThreadAPI::TD_TYPE</a></div><div class="ttdeci">TD_TYPE</div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00047">ThreadAPI.h:47</a></div></div>
135
135
  <div class="ttc" id="classSVF_1_1ThreadAPI_html_a38a7516702c55ab418167b7c850516b3aa2b2704ecc4c11ec0dbeaf1b22532431"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3aa2b2704ecc4c11ec0dbeaf1b22532431">SVF::ThreadAPI::TD_BAR_WAIT</a></div><div class="ttdoc">Barrier init. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00066">ThreadAPI.h:66</a></div></div>
136
136
  <div class="ttc" id="classSVF_1_1ThreadAPI_html_a38a7516702c55ab418167b7c850516b3abb17ca545bd259f16a36a2d2af43948b"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3abb17ca545bd259f16a36a2d2af43948b">SVF::ThreadAPI::TD_MUTEX_INI</a></div><div class="ttdoc">broadcast a condition </div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00061">ThreadAPI.h:61</a></div></div>