svf-tools 1.0.474 → 1.0.475

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 (198) hide show
  1. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +1 -1
  2. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +8 -7
  3. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +2 -2
  4. package/SVF-doxygen/html/html/Andersen_8h_source.html +1 -1
  5. package/SVF-doxygen/html/html/CFLAlias_8h_source.html +2 -2
  6. package/SVF-doxygen/html/html/CHGBuilder_8cpp.html +2 -2
  7. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +20 -19
  8. package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +15 -15
  9. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +2 -2
  10. package/SVF-doxygen/html/html/Casting_8h_source.html +1 -1
  11. package/SVF-doxygen/html/html/ConsG_8h_source.html +1 -1
  12. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +2 -2
  13. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +1 -1
  14. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +1 -1
  15. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
  16. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +1 -1
  17. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +4 -4
  18. package/SVF-doxygen/html/html/ExeState_8cpp_source.html +3 -3
  19. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +1 -1
  20. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +1 -1
  21. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +2 -2
  22. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +11 -10
  23. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +1 -1
  24. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +1 -1
  25. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +1 -1
  26. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +11 -10
  27. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +7 -7
  28. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +2 -2
  29. package/SVF-doxygen/html/html/IRGraph_8h_source.html +3 -3
  30. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +24 -24
  31. package/SVF-doxygen/html/html/LLVMUtil_8h.html +111 -111
  32. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +41 -40
  33. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +11 -10
  34. package/SVF-doxygen/html/html/LeakChecker_8h_source.html +8 -8
  35. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +14 -13
  36. package/SVF-doxygen/html/html/LocationSet_8h_source.html +9 -9
  37. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +31 -30
  38. package/SVF-doxygen/html/html/LockAnalysis_8h_source.html +23 -23
  39. package/SVF-doxygen/html/html/MHP_8h_source.html +2 -2
  40. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +1 -1
  41. package/SVF-doxygen/html/html/MTA_8cpp_source.html +2 -2
  42. package/SVF-doxygen/html/html/MemPartition_8cpp_source.html +1 -1
  43. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +35 -34
  44. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +28 -27
  45. package/SVF-doxygen/html/html/MemSSA_8h_source.html +19 -19
  46. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +14 -14
  47. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +26 -25
  48. package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +22 -22
  49. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +5 -5
  50. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +2 -2
  51. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +27 -26
  52. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +24 -24
  53. package/SVF-doxygen/html/html/ProgSlice_8h_source.html +3 -3
  54. package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +1 -1
  55. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +3 -3
  56. package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +7 -7
  57. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +17 -16
  58. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +37 -37
  59. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +6 -6
  60. package/SVF-doxygen/html/html/SVFIR_8h_source.html +3 -3
  61. package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +2 -2
  62. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
  63. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +3 -3
  64. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +2 -2
  65. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +1 -1
  66. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +40 -39
  67. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +16 -16
  68. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +58 -57
  69. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +24 -24
  70. package/SVF-doxygen/html/html/TCT_8h_source.html +2 -2
  71. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
  72. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +1 -1
  73. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +1 -1
  74. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +2 -2
  75. package/SVF-doxygen/html/html/WPAStat_8h_source.html +5 -5
  76. package/SVF-doxygen/html/html/cfl_8cpp.html +3 -3
  77. package/SVF-doxygen/html/html/cfl_8cpp_source.html +3 -3
  78. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +3 -3
  79. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +1 -1
  80. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +14 -14
  81. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +6 -6
  82. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +2 -2
  83. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +3 -3
  84. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +48 -48
  85. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +4 -4
  86. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +3 -3
  87. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +4 -4
  88. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +1 -1
  89. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +1 -1
  90. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +2 -2
  91. package/SVF-doxygen/html/html/classSVF_1_1ExeState.html +3 -3
  92. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +1 -1
  93. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +3 -3
  94. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +4 -4
  95. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +23 -23
  96. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +1 -1
  97. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +2 -2
  98. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +4 -4
  99. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +1 -1
  100. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +3 -3
  101. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +2 -2
  102. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +23 -23
  103. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +1 -1
  104. package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +3 -3
  105. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +2 -2
  106. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +22 -22
  107. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +28 -28
  108. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +78 -78
  109. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +100 -100
  110. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +2 -2
  111. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +1 -1
  112. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +4 -4
  113. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +54 -54
  114. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +56 -56
  115. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +7 -7
  116. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +8 -8
  117. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
  118. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +15 -15
  119. package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +71 -71
  120. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +59 -59
  121. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +3 -3
  122. package/SVF-doxygen/html/html/classSVF_1_1RaceValidator.html +7 -7
  123. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +3 -3
  124. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +9 -9
  125. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +148 -148
  126. package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +1 -1
  127. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +2 -2
  128. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +2 -2
  129. package/SVF-doxygen/html/html/classSVF_1_1StInfo.html +4 -4
  130. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +88 -88
  131. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +65 -65
  132. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +1 -1
  133. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +2 -2
  134. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +1 -1
  135. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +1 -1
  136. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +4 -4
  137. package/SVF-doxygen/html/html/dda_8cpp.html +2 -2
  138. package/SVF-doxygen/html/html/dda_8cpp_source.html +2 -2
  139. package/SVF-doxygen/html/html/mta_8cpp.html +2 -2
  140. package/SVF-doxygen/html/html/mta_8cpp_source.html +2 -2
  141. package/SVF-doxygen/html/html/namespaceSVF.html +4 -2
  142. package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +1452 -0
  143. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +41 -1409
  144. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +4 -4
  145. package/SVF-doxygen/html/html/namespacemembers.html +3 -3
  146. package/SVF-doxygen/html/html/namespacemembers_f.html +1 -1
  147. package/SVF-doxygen/html/html/namespacemembers_func.html +39 -39
  148. package/SVF-doxygen/html/html/namespacemembers_g.html +14 -14
  149. package/SVF-doxygen/html/html/namespacemembers_i.html +18 -18
  150. package/SVF-doxygen/html/html/namespacemembers_p.html +1 -1
  151. package/SVF-doxygen/html/html/namespacemembers_s.html +2 -2
  152. package/SVF-doxygen/html/html/namespaces.html +2 -1
  153. package/SVF-doxygen/html/html/saber_8cpp.html +2 -2
  154. package/SVF-doxygen/html/html/saber_8cpp_source.html +2 -2
  155. package/SVF-doxygen/html/html/search/all_1.js +3 -3
  156. package/SVF-doxygen/html/html/search/all_10.js +1 -1
  157. package/SVF-doxygen/html/html/search/all_13.js +3 -2
  158. package/SVF-doxygen/html/html/search/all_6.js +1 -1
  159. package/SVF-doxygen/html/html/search/all_7.js +14 -14
  160. package/SVF-doxygen/html/html/search/all_9.js +18 -18
  161. package/SVF-doxygen/html/html/search/functions_0.js +3 -3
  162. package/SVF-doxygen/html/html/search/functions_11.js +2 -2
  163. package/SVF-doxygen/html/html/search/functions_5.js +1 -1
  164. package/SVF-doxygen/html/html/search/functions_6.js +14 -14
  165. package/SVF-doxygen/html/html/search/functions_8.js +18 -18
  166. package/SVF-doxygen/html/html/search/functions_f.js +1 -1
  167. package/SVF-doxygen/html/html/search/namespaces_1.js +1 -0
  168. package/SVF-doxygen/html/html/svf-ex_8cpp.html +3 -3
  169. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +3 -3
  170. package/SVF-doxygen/html/html/wpa_8cpp.html +2 -2
  171. package/SVF-doxygen/html/html/wpa_8cpp_source.html +2 -2
  172. package/include/MTA/MHP.h +1 -1
  173. package/include/SVF-FE/LLVMUtil.h +7 -7
  174. package/lib/Graphs/ICFG.cpp +2 -2
  175. package/lib/MSSA/MemRegion.cpp +1 -0
  176. package/lib/MSSA/MemSSA.cpp +1 -0
  177. package/lib/MTA/LockAnalysis.cpp +1 -0
  178. package/lib/MemoryModel/LocationSet.cpp +1 -0
  179. package/lib/MemoryModel/PointerAnalysis.cpp +1 -0
  180. package/lib/MemoryModel/SVFIR.cpp +1 -1
  181. package/lib/MemoryModel/SymbolTableInfo.cpp +1 -0
  182. package/lib/SABER/LeakChecker.cpp +1 -0
  183. package/lib/SABER/PathCondAllocator.cpp +1 -0
  184. package/lib/SVF-FE/CHGBuilder.cpp +1 -0
  185. package/lib/SVF-FE/CPPUtil.cpp +2 -2
  186. package/lib/SVF-FE/ICFGBuilder.cpp +1 -0
  187. package/lib/SVF-FE/LLVMUtil.cpp +32 -32
  188. package/lib/SVF-FE/SVFIRBuilder.cpp +2 -1
  189. package/lib/SVF-FE/SymbolTableBuilder.cpp +8 -7
  190. package/lib/WPA/AndersenStat.cpp +1 -0
  191. package/lib/WPA/FlowSensitiveStat.cpp +1 -0
  192. package/package.json +1 -1
  193. package/tools/CFL/cfl.cpp +1 -1
  194. package/tools/DDA/dda.cpp +1 -1
  195. package/tools/Example/svf-ex.cpp +1 -1
  196. package/tools/MTA/mta.cpp +1 -1
  197. package/tools/SABER/saber.cpp +1 -1
  198. package/tools/WPA/wpa.cpp +1 -1
@@ -66,7 +66,7 @@ $(function() {
66
66
  <div class="title">MHP.h</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="MHP_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">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * MHP.h</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Created on: Jan 21, 2014</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Author: Yulei Sui, Peng Di</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="preprocessor">#ifndef MHP_H_</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#define MHP_H_</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="TCT_8h.html">MTA/TCT.h</a>&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>&quot;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="LLVMUtil_8h.html">SVF-FE/LLVMUtil.h</a>&quot;</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;{</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">class </span>ForkJoinAnalysis;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">class </span>LockAnalysis;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html"> 24</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1MHP.html">MHP</a></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a0cacd62ca23e5f025dba503b0537c15a"> 28</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const Function*&gt;</a> <a class="code" href="classSVF_1_1MHP.html#a0cacd62ca23e5f025dba503b0537c15a">FunSet</a>;</div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aa17ec09b08f8dc7927aa7fa00232dd2f"> 29</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const Instruction*&gt;</a> <a class="code" href="classSVF_1_1MHP.html#aa17ec09b08f8dc7927aa7fa00232dd2f">InstSet</a>;</div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a8fecc443c4d92a36a9c50ec6a4f5dea8"> 30</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1TCT.html#a13d01a1747d8ee1521596aeb36bdb655">TCT::InstVec</a> <a class="code" href="classSVF_1_1MHP.html#a8fecc443c4d92a36a9c50ec6a4f5dea8">InstVec</a>;</div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aeba1145d32693ae7b642f483eeae94ef"> 31</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;CxtThreadStmt&gt;</a> <a class="code" href="classSVF_1_1MHP.html#aeba1145d32693ae7b642f483eeae94ef">CxtThreadStmtWorkList</a>;</div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a28031502c4f8f0d4012c0827c57efb32"> 32</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;CxtThreadStmt&gt;</a> <a class="code" href="classSVF_1_1MHP.html#a28031502c4f8f0d4012c0827c57efb32">CxtThreadStmtSet</a>;</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ac30f283cb2ad020a054ee6525ca94025"> 33</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CxtThreadStmt,NodeBS&gt;</a> <a class="code" href="classSVF_1_1MHP.html#ac30f283cb2ad020a054ee6525ca94025">ThreadStmtToThreadInterleav</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ae3e240893d0950354d3d775e87d4adf9"> 34</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const Instruction*,CxtThreadStmtSet&gt;</a> <a class="code" href="classSVF_1_1MHP.html#ae3e240893d0950354d3d775e87d4adf9">InstToThreadStmtSetMap</a>;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a08ba219ec02b07b1bbd91a88ebb4acd7"> 36</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;CxtStmt&gt;</a> <a class="code" href="classSVF_1_1MHP.html#a08ba219ec02b07b1bbd91a88ebb4acd7">LockSpan</a>;</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"><a class="line" href="classSVF_1_1MHP.html#a570f93674511a93cdf2afb96df4947b6"> 38</a></span>&#160; <span class="keyword">typedef</span> std::pair&lt;const Function*,const Function*&gt; <a class="code" href="classSVF_1_1MHP.html#a570f93674511a93cdf2afb96df4947b6">FuncPair</a>;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#adff2785f9d46eb110ce5b429592b2a38"> 39</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;FuncPair, bool&gt;</a> <a class="code" href="classSVF_1_1MHP.html#adff2785f9d46eb110ce5b429592b2a38">FuncPairToBool</a>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <a class="code" href="classSVF_1_1MHP.html#abf1f5a7c365dfb95b42015b7b2ad6fbe">MHP</a>(<a class="code" href="classSVF_1_1TCT.html">TCT</a>* t);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1MHP.html#a6b7133f1767c3636ce253c5325be5053">~MHP</a>();</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a02457fa6e3c85c897ec3b3d8db18cc4b">analyze</a>();</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#adfd90a8d20d630bc3813f5ed71d3abf7">analyzeInterleaving</a>();</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a20e740d4b96ef086b6b5778acd38ca88"> 54</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>* <a class="code" href="classSVF_1_1MHP.html#a20e740d4b96ef086b6b5778acd38ca88">getThreadCallGraph</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799">tcg</a>;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a033936547612c54326a604f0ff1e39a6"> 60</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1TCT.html">TCT</a>* <a class="code" href="classSVF_1_1MHP.html#a033936547612c54326a604f0ff1e39a6">getTCT</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="comment">// Get CallICFGNode</span></div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aca4903cf3e3ef5b2ed5959e5e6181d55"> 66</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* <a class="code" href="classSVF_1_1MHP.html#aca4903cf3e3ef5b2ed5959e5e6181d55">getCBN</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a238810a60f1010c5177e01683c8c1159">getCallICFGNode</a>(inst);</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"> 70</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a1cfec64cc65abcbc5ba32695850bfb48">isConnectedfromMain</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment">// /// Interface to query whether two instructions are protected by common locks</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment">// virtual bool isProtectedByACommonLock(const Instruction* i1, const Instruction* i2);</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment">// virtual bool isAllCxtInSameLockSpan(const Instruction *I1, const Instruction *I2);</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment">// virtual bool isOneCxtInSameLockSpan(const Instruction *I1, const Instruction *I2);</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment">// bool hasOneCxtInLockSpan(const Instruction *I, LockSpan lspan);</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment">// bool hasAllCxtInLockSpan(const Instruction *I, LockSpan lspan);</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment">// LockSpan getSpanfromCxtLock(NodeID l);</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a9989f2d200cec6c387d63f452b8eac6b">mayHappenInParallel</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2);</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a9a4b6d5c57552b61a62a4dd180aef40c">mayHappenInParallelCache</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a2faaa02abec3b8f8fca73e178cbdcb41">mayHappenInParallelInst</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#aab80f1bc5c359a7d3b03f249bafa1d40">executedByTheSameThread</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a653460ed316804bea377eecdde412d36"> 92</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; <a class="code" href="classSVF_1_1MHP.html#a653460ed316804bea377eecdde412d36">getInterleavingThreads</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; cts)</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>[cts];</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a3ba43bb0be55ffade3d70f8cbb95f88f"> 96</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a3ba43bb0be55ffade3d70f8cbb95f88f">hasInterleavingThreads</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; cts)<span class="keyword"> const</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>.find(cts)!=<a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>.end();</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</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"><a class="line" href="classSVF_1_1MHP.html#a49504524c0d3e53c769cdbfd9ec1ccb0"> 104</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> CxtThreadStmtSet&amp; <a class="code" href="classSVF_1_1MHP.html#a49504524c0d3e53c769cdbfd9ec1ccb0">getThreadStmtSet</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="l00105"></a><span class="lineno"> 105</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; InstToThreadStmtSetMap::const_iterator it = <a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>.find(inst);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it!=<a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>.end() &amp;&amp; <span class="stringliteral">&quot;no thread access the instruction?&quot;</span>);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</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"><a class="line" href="classSVF_1_1MHP.html#a6841b147e2a681ea372bdddd53616294"> 110</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a6841b147e2a681ea372bdddd53616294">hasThreadStmtSet</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="l00111"></a><span class="lineno"> 111</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>.find(inst)!=<a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>.end();</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a22f7dc5043fed97f1b4b273b8b710415">printInterleaving</a>();</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a71183ff98500d1ce49170bab61fe664e"> 121</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>&amp; <a class="code" href="classSVF_1_1MHP.html#a71183ff98500d1ce49170bab61fe664e">getCallee</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst, <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>&amp; callees)</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; {</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799">tcg</a>-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#a317e09edb29b110cf4273009551d31ec">getCallees</a>(<a class="code" href="classSVF_1_1MHP.html#aca4903cf3e3ef5b2ed5959e5e6181d55">getCBN</a>(inst), callees);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">return</span> callees;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#abeb76ad63d9362ba8fa8f7088b0d942b">updateNonCandidateFunInterleaving</a>();</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a2c1e4fac7b810021939ed26307d37816">handleNonCandidateFun</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; cts);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a8a95f8ae419b66310ce6f572caea2ca5">handleFork</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; cts, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a3a535274cd3349a05eeccf3c9231396a">handleJoin</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; cts, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</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; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#af769afe6ba6baccda5a497df181c9fb0">handleCall</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; cts, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a76ac9d388529f090ab6dad5829dd0753">handleRet</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; cts);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#af4d6f0884ce18ea5caf0dfd9799d1aae">handleIntra</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; cts);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a6990ff8e3efe5af365c8205b7ced38ed">validateResults</a>();</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"><a class="line" href="classSVF_1_1MHP.html#a6343dd11dd75d3730dc463321a11445e"> 153</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a6343dd11dd75d3730dc463321a11445e">addInterleavingThread</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; tgr, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid)</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>[tgr].test_and_set(tid))</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>[tgr.<a class="code" href="classSVF_1_1CxtStmt.html#a5e8c4b10eb5c3240d2e21a020ed834a6">getStmt</a>()].insert(tgr);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(tgr);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</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_1MHP.html#a6c77349f168735888d0db4ac5b632da9"> 161</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a6c77349f168735888d0db4ac5b632da9">addInterleavingThread</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; tgr, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; src)</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordtype">bool</span> changed = <a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>[tgr] |= <a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>[src];</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">if</span>(changed)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>[tgr.<a class="code" href="classSVF_1_1CxtStmt.html#a5e8c4b10eb5c3240d2e21a020ed834a6">getStmt</a>()].insert(tgr);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(tgr);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; }</div><div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a5546cb50ca769218a871cdda08a25d18"> 170</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a5546cb50ca769218a871cdda08a25d18">rmInterleavingThread</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; tgr, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; tids, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* joinsite)</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> joinedTids;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">for</span>(NodeBS::iterator it = tids.begin(), eit = tids.end(); it!=eit; ++it)</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MHP.html#acd5b010c22a6590f6ea1a5cedd8f43ba">isMustJoin</a>(tgr.<a class="code" href="classSVF_1_1CxtThreadStmt.html#a3b8f641f2fb7ade7052cae1ee6463884">getTid</a>(),joinsite))</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; joinedTids.set(*it);</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; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>[tgr].intersectWithComplement(joinedTids))</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(tgr);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; }</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#ae9423c868ba4d26337428b96db9fc77b">updateAncestorThreads</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a23ab5a03b7c00ba0ebac65568a83a5cc">updateSiblingThreads</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid);</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; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a0356a8ccc53999549fb369f67faad306">isRecurFullJoin</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> parentTid, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> curTid);</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#acd5b010c22a6590f6ea1a5cedd8f43ba">isMustJoin</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> curTid, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* joinsite);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a041392f704690e89d8acf5ec68d8682c"> 198</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a041392f704690e89d8acf5ec68d8682c">isMultiForkedThread</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> curTid)</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; {</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a7b4ad0b052e1f8b6869733eef15f4e4d">getTCTNode</a>(curTid)-&gt;<a class="code" href="classSVF_1_1TCTNode.html#a5dd0cf88e381438d191b275314117561">isMultiforked</a>();</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a04357a2827d22e4e727d488d32eb5cb5"> 204</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a04357a2827d22e4e727d488d32eb5cb5">getNextInsts</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst, InstVec&amp; instVec)</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; {</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a97c3081d0648a8d483b07f23bbd1b6bf">getNextInsts</a>(inst,instVec);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div><div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a67e2d43f0e35cc46eb7680ec66a4fe44"> 209</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a67e2d43f0e35cc46eb7680ec66a4fe44">pushCxt</a>(<a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee)</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#afc6d7a91cfc98561bcce13425964a39e">pushCxt</a>(cxt,call,callee);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div><div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#afee99dd3ca2ff68789864423fc9358e0"> 214</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#afee99dd3ca2ff68789864423fc9358e0">matchCxt</a>(<a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee)</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; {</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a9b6dda84d37afadaf80bc2e26986a52e">matchCxt</a>(cxt,call,callee);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</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="l00221"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178"> 221</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; cs)</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"> 223</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(cs);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; }</div><div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ad8d3aa1a12fb1e8668eb4138fbe23b7d"> 225</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a> <a class="code" href="classSVF_1_1MHP.html#ad8d3aa1a12fb1e8668eb4138fbe23b7d">popFromCTSWorkList</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"> 227</span>&#160; <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a> ctp = <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">return</span> ctp;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</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"><a class="line" href="classSVF_1_1MHP.html#aeabf2e9ec8b1ec874503c83cc65e1205"> 232</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#aeabf2e9ec8b1ec874503c83cc65e1205">isTDFork</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799">tcg</a>-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#adcad8524a53baf256cd45503ec568c10">getThreadAPI</a>()-&gt;<a class="code" href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf">isTDFork</a>(call);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; }</div><div class="line"><a name="l00237"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ab566508ffd73abd4d5ad047a1d7f9c27"> 237</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#ab566508ffd73abd4d5ad047a1d7f9c27">isTDJoin</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; {</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799">tcg</a>-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#adcad8524a53baf256cd45503ec568c10">getThreadAPI</a>()-&gt;<a class="code" href="classSVF_1_1ThreadAPI.html#a8cc5f9ff6039392ce1471cd830973c44">isTDJoin</a>(call);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1MHP.html#a9b89800fe8089fd7521ef3f415f6eb12">getDirAndIndJoinedTid</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">Loop</a>* <a class="code" href="classSVF_1_1MHP.html#afa0d341a2fb7b05522dc6e178eab7e8b">isJoinInSymmetricLoop</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call) <span class="keyword">const</span>;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a6f07427b45991b2d8a3ff21582121d23">isHBPair</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;</div><div class="line"><a name="l00251"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799"> 251</a></span>&#160; <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>* <a class="code" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799">tcg</a>; </div><div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176"> 252</a></span>&#160; <a class="code" href="classSVF_1_1TCT.html">TCT</a>* <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>; </div><div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a98857a1837cef5519c938d07bb771a60"> 253</a></span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html">ForkJoinAnalysis</a>* <a class="code" href="classSVF_1_1MHP.html#a98857a1837cef5519c938d07bb771a60">fja</a>; </div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb"> 254</a></span>&#160; CxtThreadStmtWorkList <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>; </div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541"> 255</a></span>&#160; ThreadStmtToThreadInterleav <a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>; </div><div class="line"><a name="l00256"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f"> 256</a></span>&#160; InstToThreadStmtSetMap <a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>; </div><div class="line"><a name="l00257"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a1f057ef082484a1997cb02287e063f00"> 257</a></span>&#160; FuncPairToBool <a class="code" href="classSVF_1_1MHP.html#a1f057ef082484a1997cb02287e063f00">nonCandidateFuncMHPRelMap</a>;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a26ae18993915d76b704232cded9811c2"> 261</a></span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MHP.html#a26ae18993915d76b704232cded9811c2">numOfTotalQueries</a>; </div><div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ab8bd382e0c70b0feb2a291ecc4043106"> 262</a></span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MHP.html#ab8bd382e0c70b0feb2a291ecc4043106">numOfMHPQueries</a>; </div><div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aca306b97c6dcd47a8f407038436473a2"> 263</a></span>&#160; <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1MHP.html#aca306b97c6dcd47a8f407038436473a2">interleavingTime</a>;</div><div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ab7d9fe837844197b7acdc0493a50aaa5"> 264</a></span>&#160; <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1MHP.html#ab7d9fe837844197b7acdc0493a50aaa5">interleavingQueriesTime</a>;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</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="l00268"></a><span class="lineno"> 268</span>&#160;</div><div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html"> 272</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1ForkJoinAnalysis.html">ForkJoinAnalysis</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"> 275</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631"> 277</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; {</div><div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a9d940442c782d5a1297102209540182f"> 279</a></span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a9d940442c782d5a1297102209540182f">Empty</a>, <span class="comment">// initial(dummy) state</span></div><div class="line"><a name="l00280"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a"> 280</a></span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a">TDAlive</a>, <span class="comment">// thread is alive</span></div><div class="line"><a name="l00281"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631ad5af2a561c196e33d88fc63363d0d8f4"> 281</a></span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631ad5af2a561c196e33d88fc63363d0d8f4">TDDead</a>, <span class="comment">// thread is dead</span></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"> 283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a613d763731058899e6819acdb2d7315f"> 284</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1TCT.html#a13d01a1747d8ee1521596aeb36bdb655">TCT::InstVec</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a613d763731058899e6819acdb2d7315f">InstVec</a>;</div><div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#acdc652faba35e45820cce0cdd20ea99c"> 285</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CxtStmt,ValDomain&gt;</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#acdc652faba35e45820cce0cdd20ea99c">CxtStmtToAliveFlagMap</a>;</div><div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a9b0d25255df73a5d7a0b9d30fe918200"> 286</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CxtStmt,NodeBS&gt;</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a9b0d25255df73a5d7a0b9d30fe918200">CxtStmtToTIDMap</a>;</div><div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a7fb8df483e619337e77088e8543a9846"> 287</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;NodePair&gt;</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a7fb8df483e619337e77088e8543a9846">ThreadPairSet</a>;</div><div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a7a048ea1d9e80d4c122c1bbcacdea5f3"> 288</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CxtStmt, const Loop*&gt;</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a7a048ea1d9e80d4c122c1bbcacdea5f3">CxtStmtToLoopMap</a>;</div><div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a0ec0920d324604e3672db4d8dff93b1e"> 289</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;CxtStmt&gt;</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a0ec0920d324604e3672db4d8dff93b1e">CxtStmtWorkList</a>;</div><div class="line"><a name="l00290"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#acd98a293bb20064cf5d0bb71c619fc54"> 290</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const Instruction*, PTASCEV&gt;</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#acd98a293bb20064cf5d0bb71c619fc54">forkjoinToPTASCEVMap</a>;</div><div class="line"><a name="l00291"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a431ec90a12a62bb892e8b78f66a8f9dc"> 291</a></span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a431ec90a12a62bb892e8b78f66a8f9dc">ForkJoinAnalysis</a>(<a class="code" href="classSVF_1_1TCT.html">TCT</a>* t) : <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>(t)</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; {</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; collectSCEVInfo();</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; }</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordtype">void</span> collectSCEVInfo();</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordtype">void</span> analyzeForkJoinPair();</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a819ef18524ee9104b920d1a465c61da1"> 304</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a819ef18524ee9104b920d1a465c61da1">getDirectlyJoinedTid</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cs)</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">return</span> directJoinMap[cs];</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; }</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1MHP.html#a9b89800fe8089fd7521ef3f415f6eb12">getDirAndIndJoinedTid</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cs);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;</div><div class="line"><a name="l00312"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a4e058b920c3648f943f85099690ff44f"> 312</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">Loop</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4e058b920c3648f943f85099690ff44f">isJoinInSymmetricLoop</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cs)<span class="keyword"> const</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; CxtStmtToLoopMap::const_iterator it = cxtJoinInLoop.find(cs);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">if</span>(it!=cxtJoinInLoop.end())</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; }</div><div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a86c68ce5fd8825b1593d92a5a5bad389"> 320</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a86c68ce5fd8825b1593d92a5a5bad389">isHBPair</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; {</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordtype">bool</span> nonhp = HBPair.find(std::make_pair(tid1,tid2))!=HBPair.end();</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordtype">bool</span> hp = HPPair.find(std::make_pair(tid1,tid2))!=HPPair.end();</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">if</span>(nonhp &amp;&amp; !hp)</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; }</div><div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ab55532eefbcef639ced957ad82fbd340"> 329</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab55532eefbcef639ced957ad82fbd340">isFullJoin</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; {</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordtype">bool</span> full = fullJoin.find(std::make_pair(tid1,tid2))!=fullJoin.end();</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordtype">bool</span> partial = partialJoin.find(std::make_pair(tid1,tid2))!=partialJoin.end();</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">if</span>(full &amp;&amp; !partial)</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; }</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#acc178bd423dbb21bd46a9fae9ed0351c"> 339</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#acc178bd423dbb21bd46a9fae9ed0351c">getExitInstOfParentRoutineFun</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid)<span class="keyword"> const</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> parentTid = <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a516578af1f8666ff672e6611e61d7152">getParentThread</a>(tid);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThread.html">CxtThread</a>&amp; parentct = <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a7b4ad0b052e1f8b6869733eef15f4e4d">getTCTNode</a>(parentTid)-&gt;<a class="code" href="classSVF_1_1TCTNode.html#a21591b19f6a9267151c31178f9543ee6">getCxtThread</a>();</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* parentRoutine = <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a7ccacac1c673b38215b90e4eb480581f">getStartRoutineOfCxtThread</a>(parentct);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">return</span> &amp;(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a3cb226930eeaf558575e09e5b65e0223">SVFUtil::getFunExitBB</a>(parentRoutine)-&gt;back());</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; }</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a3449439792a54c847c67b3041094db49"> 348</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">Loop</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a3449439792a54c847c67b3041094db49">getJoinLoop</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; {</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a52a707bf6f278e810f440c279f5261dc">getJoinLoop</a>(inst);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; }</div><div class="line"><a name="l00353"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ad3db3e7a2ebe7646675aab16103691e7"> 353</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a14e646200d8836461877804ee4a203d1">ScalarEvolution</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ad3db3e7a2ebe7646675aab16103691e7">getSE</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; {</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#ac66b3a193240c17c3f06437442b2d8bf">getSE</a>(inst);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; }</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a8a95f8ae419b66310ce6f572caea2ca5">handleFork</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cts,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a3a535274cd3349a05eeccf3c9231396a">handleJoin</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cts,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#af769afe6ba6baccda5a497df181c9fb0">handleCall</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cts,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a76ac9d388529f090ab6dad5829dd0753">handleRet</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cts);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#af4d6f0884ce18ea5caf0dfd9799d1aae">handleIntra</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cts);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordtype">bool</span> isSameSCEV(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* forkSite, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* joinSite);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordtype">bool</span> sameLoopTripCount(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* forkSite, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* joinSite);</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a3655131add43346a175576b023e32509"> 381</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a3655131add43346a175576b023e32509">isAliasedForkJoin</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* forkSite, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* joinSite)</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; {</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a5b087b42340d1a1b2ee37339637709d3">getPTA</a>()-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a6c01f259ad2379a422d7106ce0255eb8">alias</a>(getForkedThread(forkSite), getJoinedThread(joinSite)) &amp;&amp; isSameSCEV(forkSite,joinSite);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; }</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="comment">// Get CallICFGNode</span></div><div class="line"><a name="l00386"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a94d65f9e22a13772042b2af652cf5538"> 386</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a94d65f9e22a13772042b2af652cf5538">getCBN</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; {</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a238810a60f1010c5177e01683c8c1159">getCallICFGNode</a>(inst);</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; }</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a> getMarkedFlag(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cs)</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; {</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; CxtStmtToAliveFlagMap::const_iterator it = cxtStmtToAliveFlagMap.find(cs);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">if</span>(it==cxtStmtToAliveFlagMap.end())</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; cxtStmtToAliveFlagMap[cs] = Empty;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">return</span> Empty;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; }</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; }</div><div class="line"><a name="l00405"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215"> 405</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; tgr, <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a> flag)</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; {</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a> flag_tgr = getMarkedFlag(tgr);</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; cxtStmtToAliveFlagMap[tgr] = flag;</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">if</span>(flag_tgr!=getMarkedFlag(tgr))</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(tgr);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; }</div><div class="line"><a name="l00413"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a047fbff4be9f94ab12795cd371f60efa"> 413</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a047fbff4be9f94ab12795cd371f60efa">markCxtStmtFlag</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; tgr, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; src)</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a> flag_tgr = getMarkedFlag(tgr);</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a> flag_src = getMarkedFlag(src);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordflow">if</span>(flag_tgr == Empty)</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; {</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; cxtStmtToAliveFlagMap[tgr] = flag_src;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; }</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(flag_tgr == TDDead)</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; {</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">if</span>(flag_src==TDAlive)</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; cxtStmtToAliveFlagMap[tgr] = TDAlive;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; {</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; }</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">if</span>(flag_tgr!=getMarkedFlag(tgr))</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; {</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(tgr);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; }</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div><div class="line"><a name="l00436"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a7965a276a3a12d532c9967de13d4cc8a"> 436</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a7965a276a3a12d532c9967de13d4cc8a">clearFlagMap</a>()</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; cxtStmtToAliveFlagMap.clear();</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a29d9fec1ea7b8e5456342522eea403ad">clear</a>();</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; }</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;</div><div class="line"><a name="l00445"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a7ac37e3399aa6e303a6babe8f455aa87"> 445</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a7ac37e3399aa6e303a6babe8f455aa87">pushToCTSWorkList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cs)</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; {</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(cs);</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; }</div><div class="line"><a name="l00449"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a4d893583db922444c6a29923bf3d05d3"> 449</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4d893583db922444c6a29923bf3d05d3">popFromCTSWorkList</a>()</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> ctp = <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">return</span> ctp;</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; }</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;</div><div class="line"><a name="l00457"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a799e14292e16b9fb322cab07f3ff5593"> 457</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a799e14292e16b9fb322cab07f3ff5593">getNextInsts</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst, InstVec&amp; instSet)</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; {</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a97c3081d0648a8d483b07f23bbd1b6bf">getNextInsts</a>(inst,instSet);</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; }</div><div class="line"><a name="l00462"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aaf70954762aa86f835d799994726790e"> 462</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aaf70954762aa86f835d799994726790e">pushCxt</a>(<a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee)</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; {</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#afc6d7a91cfc98561bcce13425964a39e">pushCxt</a>(cxt,call,callee);</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; }</div><div class="line"><a name="l00467"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aea9ef584ce6c7129bcd1d5ecda2f1f74"> 467</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aea9ef584ce6c7129bcd1d5ecda2f1f74">matchCxt</a>(<a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee)</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; {</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a9b6dda84d37afadaf80bc2e26986a52e">matchCxt</a>(cxt,call,callee);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; }</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;</div><div class="line"><a name="l00473"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aff32f240a03421937c2fc606359dca9b"> 473</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aff32f240a03421937c2fc606359dca9b">isTDFork</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; {</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">return</span> getTCG()-&gt;getThreadAPI()-&gt;isTDFork(call);</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; }</div><div class="line"><a name="l00478"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aac722a42dc6e03e771a7a80de5f8ec94"> 478</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aac722a42dc6e03e771a7a80de5f8ec94">isTDJoin</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; {</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">return</span> getTCG()-&gt;getThreadAPI()-&gt;isTDJoin(call);</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; }</div><div class="line"><a name="l00483"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#acd4308b99446c277ccb3407103fe21d0"> 483</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_1ForkJoinAnalysis.html#acd4308b99446c277ccb3407103fe21d0">getForkedThread</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; {</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordflow">return</span> getTCG()-&gt;getThreadAPI()-&gt;getForkedThread(call);</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; }</div><div class="line"><a name="l00488"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ada1e56dfe2d64ea6310142a346c86ed4"> 488</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_1ForkJoinAnalysis.html#ada1e56dfe2d64ea6310142a346c86ed4">getJoinedThread</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; {</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">return</span> getTCG()-&gt;getThreadAPI()-&gt;getJoinedThread(call);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; }</div><div class="line"><a name="l00492"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#afcf119c89e93a24923dd0d97ddec7ee1"> 492</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>&amp; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#afcf119c89e93a24923dd0d97ddec7ee1">getCallee</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst, <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>&amp; callees)</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; {</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; getTCG()-&gt;getCallees(<a class="code" href="classSVF_1_1MHP.html#aca4903cf3e3ef5b2ed5959e5e6181d55">getCBN</a>(inst), callees);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">return</span> callees;</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; }</div><div class="line"><a name="l00498"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6"> 498</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">getTCG</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a1602d02773578bca73dcbd29b95c67d0">getThreadCallGraph</a>();</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; }</div><div class="line"><a name="l00503"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8aa2d4c83981007108b152d05e9c51fe"> 503</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8aa2d4c83981007108b152d05e9c51fe">addDirectlyJoinTID</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cs, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid)</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; {</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; directJoinMap[cs].set(tid);</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; }</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;</div><div class="line"><a name="l00511"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a1505ba82206169f76ea239067797d6c2"> 511</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a1505ba82206169f76ea239067797d6c2">addToHPPair</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; {</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; HPPair.insert(std::make_pair(tid1,tid2));</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; HPPair.insert(std::make_pair(tid2,tid1));</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; }</div><div class="line"><a name="l00516"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a647ae6866bb37be850f0bdd5a7341188"> 516</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a647ae6866bb37be850f0bdd5a7341188">addToHBPair</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; HBPair.insert(std::make_pair(tid1,tid2));</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; }</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;</div><div class="line"><a name="l00524"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a02dad7e9ae45a1751c4548dd9991a8b4"> 524</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a02dad7e9ae45a1751c4548dd9991a8b4">addToFullJoin</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; {</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; fullJoin.insert(std::make_pair(tid1,tid2));</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; }</div><div class="line"><a name="l00528"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a6ead92486459ec7f94a8375c7f96faca"> 528</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a6ead92486459ec7f94a8375c7f96faca">addToPartial</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; {</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; partialJoin.insert(std::make_pair(tid1,tid2));</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; }</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;</div><div class="line"><a name="l00535"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ab302cceb28998623fed622560e50a740"> 535</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab302cceb28998623fed622560e50a740">addSymmetricLoopJoin</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">Loop</a>* lp)</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; {</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; cxtJoinInLoop[cs] = lp;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; }</div><div class="line"><a name="l00539"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce"> 539</a></span>&#160; <a class="code" href="classSVF_1_1TCT.html">TCT</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>;</div><div class="line"><a name="l00540"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aa31b3f3d51b963ccd475e66b77143dba"> 540</a></span>&#160; CxtStmtToAliveFlagMap <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aa31b3f3d51b963ccd475e66b77143dba">cxtStmtToAliveFlagMap</a>; </div><div class="line"><a name="l00541"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#acccf53d174cac3275da0d79c89a73916"> 541</a></span>&#160; CxtStmtWorkList <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#acccf53d174cac3275da0d79c89a73916">cxtStmtList</a>; </div><div class="line"><a name="l00542"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#abf5b499f93a658636d09a62d14a47cad"> 542</a></span>&#160; CxtStmtToTIDMap <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#abf5b499f93a658636d09a62d14a47cad">directJoinMap</a>; </div><div class="line"><a name="l00543"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ab5678bd46e573070827cc413f0e0d5be"> 543</a></span>&#160; CxtStmtToTIDMap <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab5678bd46e573070827cc413f0e0d5be">dirAndIndJoinMap</a>; </div><div class="line"><a name="l00544"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a63da48d338683ec95709a6bd95238707"> 544</a></span>&#160; CxtStmtToLoopMap <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a63da48d338683ec95709a6bd95238707">cxtJoinInLoop</a>; </div><div class="line"><a name="l00545"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aad3e722ecaa4a39aef0e1cabfa2b8019"> 545</a></span>&#160; ThreadPairSet <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aad3e722ecaa4a39aef0e1cabfa2b8019">HBPair</a>; </div><div class="line"><a name="l00546"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a4ad5c7a21ca994d908d648ca9d9e1833"> 546</a></span>&#160; ThreadPairSet <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4ad5c7a21ca994d908d648ca9d9e1833">HPPair</a>; </div><div class="line"><a name="l00547"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a4193a30050195cd9aaafd58511b66ccc"> 547</a></span>&#160; ThreadPairSet <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4193a30050195cd9aaafd58511b66ccc">fullJoin</a>; </div><div class="line"><a name="l00548"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a3616d6e1649f9e451da0f7a44cffc1e3"> 548</a></span>&#160; ThreadPairSet <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a3616d6e1649f9e451da0f7a44cffc1e3">partialJoin</a>; </div><div class="line"><a name="l00549"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a1c616b61fbe9c713f51f2a44c4208cfa"> 549</a></span>&#160; <a class="code" href="classSVF_1_1PTACFInfoBuilder.html">PTACFInfoBuilder</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a1c616b61fbe9c713f51f2a44c4208cfa">ptaCFInfo</a>; </div><div class="line"><a name="l00550"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a4207948054a0f98560922f3f07ada10f"> 550</a></span>&#160; forkjoinToPTASCEVMap <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4207948054a0f98560922f3f07ada10f">fkjnToPTASCEVMap</a>; <span class="comment">//&lt; map a pointer at a fork/join site to its corresponing scev expression</span></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;};</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* MHP_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1TCT_html_a7ccacac1c673b38215b90e4eb480581f"><div class="ttname"><a href="classSVF_1_1TCT.html#a7ccacac1c673b38215b90e4eb480581f">SVF::TCT::getStartRoutineOfCxtThread</a></div><div class="ttdeci">const Function * getStartRoutineOfCxtThread(const CxtThread &amp;ct) const</div><div class="ttdoc">get the start routine function of a thread </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00338">TCT.h:338</a></div></div>
69
+ <a href="MHP_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">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * MHP.h</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Created on: Jan 21, 2014</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Author: Yulei Sui, Peng Di</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="preprocessor">#ifndef MHP_H_</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#define MHP_H_</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="TCT_8h.html">MTA/TCT.h</a>&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>&quot;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="LLVMUtil_8h.html">SVF-FE/LLVMUtil.h</a>&quot;</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;{</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">class </span>ForkJoinAnalysis;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">class </span>LockAnalysis;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html"> 24</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1MHP.html">MHP</a></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a0cacd62ca23e5f025dba503b0537c15a"> 28</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const Function*&gt;</a> <a class="code" href="classSVF_1_1MHP.html#a0cacd62ca23e5f025dba503b0537c15a">FunSet</a>;</div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aa17ec09b08f8dc7927aa7fa00232dd2f"> 29</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const Instruction*&gt;</a> <a class="code" href="classSVF_1_1MHP.html#aa17ec09b08f8dc7927aa7fa00232dd2f">InstSet</a>;</div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a8fecc443c4d92a36a9c50ec6a4f5dea8"> 30</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1TCT.html#a13d01a1747d8ee1521596aeb36bdb655">TCT::InstVec</a> <a class="code" href="classSVF_1_1MHP.html#a8fecc443c4d92a36a9c50ec6a4f5dea8">InstVec</a>;</div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aeba1145d32693ae7b642f483eeae94ef"> 31</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;CxtThreadStmt&gt;</a> <a class="code" href="classSVF_1_1MHP.html#aeba1145d32693ae7b642f483eeae94ef">CxtThreadStmtWorkList</a>;</div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a28031502c4f8f0d4012c0827c57efb32"> 32</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;CxtThreadStmt&gt;</a> <a class="code" href="classSVF_1_1MHP.html#a28031502c4f8f0d4012c0827c57efb32">CxtThreadStmtSet</a>;</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ac30f283cb2ad020a054ee6525ca94025"> 33</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CxtThreadStmt,NodeBS&gt;</a> <a class="code" href="classSVF_1_1MHP.html#ac30f283cb2ad020a054ee6525ca94025">ThreadStmtToThreadInterleav</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ae3e240893d0950354d3d775e87d4adf9"> 34</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const Instruction*,CxtThreadStmtSet&gt;</a> <a class="code" href="classSVF_1_1MHP.html#ae3e240893d0950354d3d775e87d4adf9">InstToThreadStmtSetMap</a>;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a08ba219ec02b07b1bbd91a88ebb4acd7"> 36</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;CxtStmt&gt;</a> <a class="code" href="classSVF_1_1MHP.html#a08ba219ec02b07b1bbd91a88ebb4acd7">LockSpan</a>;</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"><a class="line" href="classSVF_1_1MHP.html#a570f93674511a93cdf2afb96df4947b6"> 38</a></span>&#160; <span class="keyword">typedef</span> std::pair&lt;const Function*,const Function*&gt; <a class="code" href="classSVF_1_1MHP.html#a570f93674511a93cdf2afb96df4947b6">FuncPair</a>;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#adff2785f9d46eb110ce5b429592b2a38"> 39</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;FuncPair, bool&gt;</a> <a class="code" href="classSVF_1_1MHP.html#adff2785f9d46eb110ce5b429592b2a38">FuncPairToBool</a>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <a class="code" href="classSVF_1_1MHP.html#abf1f5a7c365dfb95b42015b7b2ad6fbe">MHP</a>(<a class="code" href="classSVF_1_1TCT.html">TCT</a>* t);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1MHP.html#a6b7133f1767c3636ce253c5325be5053">~MHP</a>();</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a02457fa6e3c85c897ec3b3d8db18cc4b">analyze</a>();</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#adfd90a8d20d630bc3813f5ed71d3abf7">analyzeInterleaving</a>();</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a20e740d4b96ef086b6b5778acd38ca88"> 54</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>* <a class="code" href="classSVF_1_1MHP.html#a20e740d4b96ef086b6b5778acd38ca88">getThreadCallGraph</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799">tcg</a>;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a033936547612c54326a604f0ff1e39a6"> 60</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1TCT.html">TCT</a>* <a class="code" href="classSVF_1_1MHP.html#a033936547612c54326a604f0ff1e39a6">getTCT</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="comment">// Get CallICFGNode</span></div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aca4903cf3e3ef5b2ed5959e5e6181d55"> 66</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* <a class="code" href="classSVF_1_1MHP.html#aca4903cf3e3ef5b2ed5959e5e6181d55">getCBN</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a238810a60f1010c5177e01683c8c1159">getCallICFGNode</a>(inst);</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"> 70</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a1cfec64cc65abcbc5ba32695850bfb48">isConnectedfromMain</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment">// /// Interface to query whether two instructions are protected by common locks</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment">// virtual bool isProtectedByACommonLock(const Instruction* i1, const Instruction* i2);</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment">// virtual bool isAllCxtInSameLockSpan(const Instruction *I1, const Instruction *I2);</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment">// virtual bool isOneCxtInSameLockSpan(const Instruction *I1, const Instruction *I2);</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment">// bool hasOneCxtInLockSpan(const Instruction *I, LockSpan lspan);</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment">// bool hasAllCxtInLockSpan(const Instruction *I, LockSpan lspan);</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment">// LockSpan getSpanfromCxtLock(NodeID l);</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a9989f2d200cec6c387d63f452b8eac6b">mayHappenInParallel</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2);</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a9a4b6d5c57552b61a62a4dd180aef40c">mayHappenInParallelCache</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a2faaa02abec3b8f8fca73e178cbdcb41">mayHappenInParallelInst</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#aab80f1bc5c359a7d3b03f249bafa1d40">executedByTheSameThread</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a653460ed316804bea377eecdde412d36"> 92</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; <a class="code" href="classSVF_1_1MHP.html#a653460ed316804bea377eecdde412d36">getInterleavingThreads</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; cts)</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>[cts];</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a3ba43bb0be55ffade3d70f8cbb95f88f"> 96</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a3ba43bb0be55ffade3d70f8cbb95f88f">hasInterleavingThreads</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; cts)<span class="keyword"> const</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>.find(cts)!=<a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>.end();</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</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"><a class="line" href="classSVF_1_1MHP.html#a49504524c0d3e53c769cdbfd9ec1ccb0"> 104</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> CxtThreadStmtSet&amp; <a class="code" href="classSVF_1_1MHP.html#a49504524c0d3e53c769cdbfd9ec1ccb0">getThreadStmtSet</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="l00105"></a><span class="lineno"> 105</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; InstToThreadStmtSetMap::const_iterator it = <a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>.find(inst);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it!=<a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>.end() &amp;&amp; <span class="stringliteral">&quot;no thread access the instruction?&quot;</span>);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</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"><a class="line" href="classSVF_1_1MHP.html#a6841b147e2a681ea372bdddd53616294"> 110</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a6841b147e2a681ea372bdddd53616294">hasThreadStmtSet</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="l00111"></a><span class="lineno"> 111</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>.find(inst)!=<a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>.end();</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a22f7dc5043fed97f1b4b273b8b710415">printInterleaving</a>();</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a71183ff98500d1ce49170bab61fe664e"> 121</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>&amp; <a class="code" href="classSVF_1_1MHP.html#a71183ff98500d1ce49170bab61fe664e">getCallee</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst, <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>&amp; callees)</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; {</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799">tcg</a>-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#a317e09edb29b110cf4273009551d31ec">getCallees</a>(<a class="code" href="classSVF_1_1MHP.html#aca4903cf3e3ef5b2ed5959e5e6181d55">getCBN</a>(inst), callees);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">return</span> callees;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#abeb76ad63d9362ba8fa8f7088b0d942b">updateNonCandidateFunInterleaving</a>();</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a2c1e4fac7b810021939ed26307d37816">handleNonCandidateFun</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; cts);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a8a95f8ae419b66310ce6f572caea2ca5">handleFork</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; cts, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a3a535274cd3349a05eeccf3c9231396a">handleJoin</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; cts, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</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; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#af769afe6ba6baccda5a497df181c9fb0">handleCall</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; cts, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a76ac9d388529f090ab6dad5829dd0753">handleRet</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; cts);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#af4d6f0884ce18ea5caf0dfd9799d1aae">handleIntra</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; cts);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a6990ff8e3efe5af365c8205b7ced38ed">validateResults</a>();</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"><a class="line" href="classSVF_1_1MHP.html#a6343dd11dd75d3730dc463321a11445e"> 153</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a6343dd11dd75d3730dc463321a11445e">addInterleavingThread</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; tgr, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid)</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>[tgr].test_and_set(tid))</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>[tgr.<a class="code" href="classSVF_1_1CxtStmt.html#a5e8c4b10eb5c3240d2e21a020ed834a6">getStmt</a>()].insert(tgr);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(tgr);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</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_1MHP.html#a6c77349f168735888d0db4ac5b632da9"> 161</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a6c77349f168735888d0db4ac5b632da9">addInterleavingThread</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; tgr, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; src)</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordtype">bool</span> changed = <a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>[tgr] |= <a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>[src];</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">if</span>(changed)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>[tgr.<a class="code" href="classSVF_1_1CxtStmt.html#a5e8c4b10eb5c3240d2e21a020ed834a6">getStmt</a>()].insert(tgr);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(tgr);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; }</div><div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a5546cb50ca769218a871cdda08a25d18"> 170</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a5546cb50ca769218a871cdda08a25d18">rmInterleavingThread</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; tgr, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; tids, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* joinsite)</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> joinedTids;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">for</span>(NodeBS::iterator it = tids.begin(), eit = tids.end(); it!=eit; ++it)</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MHP.html#acd5b010c22a6590f6ea1a5cedd8f43ba">isMustJoin</a>(tgr.<a class="code" href="classSVF_1_1CxtThreadStmt.html#a3b8f641f2fb7ade7052cae1ee6463884">getTid</a>(),joinsite))</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; joinedTids.set(*it);</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; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>[tgr].intersectWithComplement(joinedTids))</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(tgr);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; }</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#ae9423c868ba4d26337428b96db9fc77b">updateAncestorThreads</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a23ab5a03b7c00ba0ebac65568a83a5cc">updateSiblingThreads</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid);</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; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a0356a8ccc53999549fb369f67faad306">isRecurFullJoin</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> parentTid, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> curTid);</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#acd5b010c22a6590f6ea1a5cedd8f43ba">isMustJoin</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> curTid, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* joinsite);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a041392f704690e89d8acf5ec68d8682c"> 198</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a041392f704690e89d8acf5ec68d8682c">isMultiForkedThread</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> curTid)</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; {</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a7b4ad0b052e1f8b6869733eef15f4e4d">getTCTNode</a>(curTid)-&gt;<a class="code" href="classSVF_1_1TCTNode.html#a5dd0cf88e381438d191b275314117561">isMultiforked</a>();</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a04357a2827d22e4e727d488d32eb5cb5"> 204</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a04357a2827d22e4e727d488d32eb5cb5">getNextInsts</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst, InstVec&amp; instVec)</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; {</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a97c3081d0648a8d483b07f23bbd1b6bf">getNextInsts</a>(inst,instVec);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div><div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a67e2d43f0e35cc46eb7680ec66a4fe44"> 209</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a67e2d43f0e35cc46eb7680ec66a4fe44">pushCxt</a>(<a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee)</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#afc6d7a91cfc98561bcce13425964a39e">pushCxt</a>(cxt,call,callee);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div><div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#afee99dd3ca2ff68789864423fc9358e0"> 214</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#afee99dd3ca2ff68789864423fc9358e0">matchCxt</a>(<a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee)</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; {</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a9b6dda84d37afadaf80bc2e26986a52e">matchCxt</a>(cxt,call,callee);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</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="l00221"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178"> 221</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>&amp; cs)</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"> 223</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(cs);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; }</div><div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ad8d3aa1a12fb1e8668eb4138fbe23b7d"> 225</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a> <a class="code" href="classSVF_1_1MHP.html#ad8d3aa1a12fb1e8668eb4138fbe23b7d">popFromCTSWorkList</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"> 227</span>&#160; <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a> ctp = <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">return</span> ctp;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</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"><a class="line" href="classSVF_1_1MHP.html#aeabf2e9ec8b1ec874503c83cc65e1205"> 232</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#aeabf2e9ec8b1ec874503c83cc65e1205">isTDFork</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799">tcg</a>-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#adcad8524a53baf256cd45503ec568c10">getThreadAPI</a>()-&gt;<a class="code" href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf">isTDFork</a>(call);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; }</div><div class="line"><a name="l00237"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ab566508ffd73abd4d5ad047a1d7f9c27"> 237</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#ab566508ffd73abd4d5ad047a1d7f9c27">isTDJoin</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; {</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799">tcg</a>-&gt;<a class="code" href="classSVF_1_1ThreadCallGraph.html#adcad8524a53baf256cd45503ec568c10">getThreadAPI</a>()-&gt;<a class="code" href="classSVF_1_1ThreadAPI.html#a8cc5f9ff6039392ce1471cd830973c44">isTDJoin</a>(call);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1MHP.html#a9b89800fe8089fd7521ef3f415f6eb12">getDirAndIndJoinedTid</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">Loop</a>* <a class="code" href="classSVF_1_1MHP.html#afa0d341a2fb7b05522dc6e178eab7e8b">isJoinInSymmetricLoop</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call) <span class="keyword">const</span>;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a6f07427b45991b2d8a3ff21582121d23">isHBPair</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;</div><div class="line"><a name="l00251"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799"> 251</a></span>&#160; <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>* <a class="code" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799">tcg</a>; </div><div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176"> 252</a></span>&#160; <a class="code" href="classSVF_1_1TCT.html">TCT</a>* <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>; </div><div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a98857a1837cef5519c938d07bb771a60"> 253</a></span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html">ForkJoinAnalysis</a>* <a class="code" href="classSVF_1_1MHP.html#a98857a1837cef5519c938d07bb771a60">fja</a>; </div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb"> 254</a></span>&#160; CxtThreadStmtWorkList <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>; </div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541"> 255</a></span>&#160; ThreadStmtToThreadInterleav <a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>; </div><div class="line"><a name="l00256"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f"> 256</a></span>&#160; InstToThreadStmtSetMap <a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>; </div><div class="line"><a name="l00257"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a1f057ef082484a1997cb02287e063f00"> 257</a></span>&#160; FuncPairToBool <a class="code" href="classSVF_1_1MHP.html#a1f057ef082484a1997cb02287e063f00">nonCandidateFuncMHPRelMap</a>;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a26ae18993915d76b704232cded9811c2"> 261</a></span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MHP.html#a26ae18993915d76b704232cded9811c2">numOfTotalQueries</a>; </div><div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ab8bd382e0c70b0feb2a291ecc4043106"> 262</a></span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MHP.html#ab8bd382e0c70b0feb2a291ecc4043106">numOfMHPQueries</a>; </div><div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aca306b97c6dcd47a8f407038436473a2"> 263</a></span>&#160; <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1MHP.html#aca306b97c6dcd47a8f407038436473a2">interleavingTime</a>;</div><div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ab7d9fe837844197b7acdc0493a50aaa5"> 264</a></span>&#160; <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1MHP.html#ab7d9fe837844197b7acdc0493a50aaa5">interleavingQueriesTime</a>;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</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="l00268"></a><span class="lineno"> 268</span>&#160;</div><div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html"> 272</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1ForkJoinAnalysis.html">ForkJoinAnalysis</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"> 275</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631"> 277</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; {</div><div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a9d940442c782d5a1297102209540182f"> 279</a></span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a9d940442c782d5a1297102209540182f">Empty</a>, <span class="comment">// initial(dummy) state</span></div><div class="line"><a name="l00280"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a"> 280</a></span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a">TDAlive</a>, <span class="comment">// thread is alive</span></div><div class="line"><a name="l00281"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631ad5af2a561c196e33d88fc63363d0d8f4"> 281</a></span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631ad5af2a561c196e33d88fc63363d0d8f4">TDDead</a>, <span class="comment">// thread is dead</span></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"> 283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a613d763731058899e6819acdb2d7315f"> 284</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1TCT.html#a13d01a1747d8ee1521596aeb36bdb655">TCT::InstVec</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a613d763731058899e6819acdb2d7315f">InstVec</a>;</div><div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#acdc652faba35e45820cce0cdd20ea99c"> 285</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CxtStmt,ValDomain&gt;</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#acdc652faba35e45820cce0cdd20ea99c">CxtStmtToAliveFlagMap</a>;</div><div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a9b0d25255df73a5d7a0b9d30fe918200"> 286</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CxtStmt,NodeBS&gt;</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a9b0d25255df73a5d7a0b9d30fe918200">CxtStmtToTIDMap</a>;</div><div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a7fb8df483e619337e77088e8543a9846"> 287</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;NodePair&gt;</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a7fb8df483e619337e77088e8543a9846">ThreadPairSet</a>;</div><div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a7a048ea1d9e80d4c122c1bbcacdea5f3"> 288</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;CxtStmt, const Loop*&gt;</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a7a048ea1d9e80d4c122c1bbcacdea5f3">CxtStmtToLoopMap</a>;</div><div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a0ec0920d324604e3672db4d8dff93b1e"> 289</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList&lt;CxtStmt&gt;</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a0ec0920d324604e3672db4d8dff93b1e">CxtStmtWorkList</a>;</div><div class="line"><a name="l00290"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#acd98a293bb20064cf5d0bb71c619fc54"> 290</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const Instruction*, PTASCEV&gt;</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#acd98a293bb20064cf5d0bb71c619fc54">forkjoinToPTASCEVMap</a>;</div><div class="line"><a name="l00291"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a431ec90a12a62bb892e8b78f66a8f9dc"> 291</a></span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a431ec90a12a62bb892e8b78f66a8f9dc">ForkJoinAnalysis</a>(<a class="code" href="classSVF_1_1TCT.html">TCT</a>* t) : <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>(t)</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; {</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; collectSCEVInfo();</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; }</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordtype">void</span> collectSCEVInfo();</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordtype">void</span> analyzeForkJoinPair();</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a819ef18524ee9104b920d1a465c61da1"> 304</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a819ef18524ee9104b920d1a465c61da1">getDirectlyJoinedTid</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cs)</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">return</span> directJoinMap[cs];</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; }</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1MHP.html#a9b89800fe8089fd7521ef3f415f6eb12">getDirAndIndJoinedTid</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cs);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;</div><div class="line"><a name="l00312"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a4e058b920c3648f943f85099690ff44f"> 312</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">Loop</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4e058b920c3648f943f85099690ff44f">isJoinInSymmetricLoop</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cs)<span class="keyword"> const</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; CxtStmtToLoopMap::const_iterator it = cxtJoinInLoop.find(cs);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">if</span>(it!=cxtJoinInLoop.end())</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; }</div><div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a86c68ce5fd8825b1593d92a5a5bad389"> 320</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a86c68ce5fd8825b1593d92a5a5bad389">isHBPair</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; {</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordtype">bool</span> nonhp = HBPair.find(std::make_pair(tid1,tid2))!=HBPair.end();</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordtype">bool</span> hp = HPPair.find(std::make_pair(tid1,tid2))!=HPPair.end();</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">if</span>(nonhp &amp;&amp; !hp)</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; }</div><div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ab55532eefbcef639ced957ad82fbd340"> 329</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab55532eefbcef639ced957ad82fbd340">isFullJoin</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; {</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordtype">bool</span> full = fullJoin.find(std::make_pair(tid1,tid2))!=fullJoin.end();</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordtype">bool</span> partial = partialJoin.find(std::make_pair(tid1,tid2))!=partialJoin.end();</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">if</span>(full &amp;&amp; !partial)</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; }</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#acc178bd423dbb21bd46a9fae9ed0351c"> 339</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#acc178bd423dbb21bd46a9fae9ed0351c">getExitInstOfParentRoutineFun</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid)<span class="keyword"> const</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> parentTid = <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a516578af1f8666ff672e6611e61d7152">getParentThread</a>(tid);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThread.html">CxtThread</a>&amp; parentct = <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a7b4ad0b052e1f8b6869733eef15f4e4d">getTCTNode</a>(parentTid)-&gt;<a class="code" href="classSVF_1_1TCTNode.html#a21591b19f6a9267151c31178f9543ee6">getCxtThread</a>();</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* parentRoutine = <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a7ccacac1c673b38215b90e4eb480581f">getStartRoutineOfCxtThread</a>(parentct);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">return</span> &amp;(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#aa0e78f2e1c9c04aee478a7ecbf354800">LLVMUtil::getFunExitBB</a>(parentRoutine)-&gt;back());</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; }</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a3449439792a54c847c67b3041094db49"> 348</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">Loop</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a3449439792a54c847c67b3041094db49">getJoinLoop</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; {</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a52a707bf6f278e810f440c279f5261dc">getJoinLoop</a>(inst);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; }</div><div class="line"><a name="l00353"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ad3db3e7a2ebe7646675aab16103691e7"> 353</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a14e646200d8836461877804ee4a203d1">ScalarEvolution</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ad3db3e7a2ebe7646675aab16103691e7">getSE</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; {</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#ac66b3a193240c17c3f06437442b2d8bf">getSE</a>(inst);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; }</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a8a95f8ae419b66310ce6f572caea2ca5">handleFork</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cts,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a3a535274cd3349a05eeccf3c9231396a">handleJoin</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cts,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#af769afe6ba6baccda5a497df181c9fb0">handleCall</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cts,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a76ac9d388529f090ab6dad5829dd0753">handleRet</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cts);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#af4d6f0884ce18ea5caf0dfd9799d1aae">handleIntra</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cts);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordtype">bool</span> isSameSCEV(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* forkSite, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* joinSite);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordtype">bool</span> sameLoopTripCount(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* forkSite, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* joinSite);</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a3655131add43346a175576b023e32509"> 381</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a3655131add43346a175576b023e32509">isAliasedForkJoin</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* forkSite, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* joinSite)</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; {</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a5b087b42340d1a1b2ee37339637709d3">getPTA</a>()-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a6c01f259ad2379a422d7106ce0255eb8">alias</a>(getForkedThread(forkSite), getJoinedThread(joinSite)) &amp;&amp; isSameSCEV(forkSite,joinSite);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; }</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="comment">// Get CallICFGNode</span></div><div class="line"><a name="l00386"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a94d65f9e22a13772042b2af652cf5538"> 386</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a94d65f9e22a13772042b2af652cf5538">getCBN</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; {</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a238810a60f1010c5177e01683c8c1159">getCallICFGNode</a>(inst);</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; }</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a> getMarkedFlag(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cs)</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; {</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; CxtStmtToAliveFlagMap::const_iterator it = cxtStmtToAliveFlagMap.find(cs);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">if</span>(it==cxtStmtToAliveFlagMap.end())</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; cxtStmtToAliveFlagMap[cs] = Empty;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">return</span> Empty;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; }</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; }</div><div class="line"><a name="l00405"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215"> 405</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; tgr, <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a> flag)</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; {</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a> flag_tgr = getMarkedFlag(tgr);</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; cxtStmtToAliveFlagMap[tgr] = flag;</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">if</span>(flag_tgr!=getMarkedFlag(tgr))</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(tgr);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; }</div><div class="line"><a name="l00413"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a047fbff4be9f94ab12795cd371f60efa"> 413</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a047fbff4be9f94ab12795cd371f60efa">markCxtStmtFlag</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; tgr, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; src)</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a> flag_tgr = getMarkedFlag(tgr);</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a> flag_src = getMarkedFlag(src);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordflow">if</span>(flag_tgr == Empty)</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; {</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; cxtStmtToAliveFlagMap[tgr] = flag_src;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; }</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(flag_tgr == TDDead)</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; {</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">if</span>(flag_src==TDAlive)</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; cxtStmtToAliveFlagMap[tgr] = TDAlive;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; {</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; }</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">if</span>(flag_tgr!=getMarkedFlag(tgr))</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; {</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(tgr);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; }</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div><div class="line"><a name="l00436"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a7965a276a3a12d532c9967de13d4cc8a"> 436</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a7965a276a3a12d532c9967de13d4cc8a">clearFlagMap</a>()</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; cxtStmtToAliveFlagMap.clear();</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a29d9fec1ea7b8e5456342522eea403ad">clear</a>();</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; }</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;</div><div class="line"><a name="l00445"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a7ac37e3399aa6e303a6babe8f455aa87"> 445</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a7ac37e3399aa6e303a6babe8f455aa87">pushToCTSWorkList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cs)</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; {</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(cs);</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; }</div><div class="line"><a name="l00449"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a4d893583db922444c6a29923bf3d05d3"> 449</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4d893583db922444c6a29923bf3d05d3">popFromCTSWorkList</a>()</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> ctp = <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">return</span> ctp;</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; }</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;</div><div class="line"><a name="l00457"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a799e14292e16b9fb322cab07f3ff5593"> 457</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a799e14292e16b9fb322cab07f3ff5593">getNextInsts</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst, InstVec&amp; instSet)</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; {</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a97c3081d0648a8d483b07f23bbd1b6bf">getNextInsts</a>(inst,instSet);</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; }</div><div class="line"><a name="l00462"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aaf70954762aa86f835d799994726790e"> 462</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aaf70954762aa86f835d799994726790e">pushCxt</a>(<a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee)</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; {</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#afc6d7a91cfc98561bcce13425964a39e">pushCxt</a>(cxt,call,callee);</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; }</div><div class="line"><a name="l00467"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aea9ef584ce6c7129bcd1d5ecda2f1f74"> 467</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aea9ef584ce6c7129bcd1d5ecda2f1f74">matchCxt</a>(<a class="code" href="namespaceSVF.html#ab700523619b089b952498f39a7f5b6b1">CallStrCxt</a>&amp; cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee)</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; {</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a9b6dda84d37afadaf80bc2e26986a52e">matchCxt</a>(cxt,call,callee);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; }</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;</div><div class="line"><a name="l00473"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aff32f240a03421937c2fc606359dca9b"> 473</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aff32f240a03421937c2fc606359dca9b">isTDFork</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; {</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">return</span> getTCG()-&gt;getThreadAPI()-&gt;isTDFork(call);</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; }</div><div class="line"><a name="l00478"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aac722a42dc6e03e771a7a80de5f8ec94"> 478</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aac722a42dc6e03e771a7a80de5f8ec94">isTDJoin</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; {</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">return</span> getTCG()-&gt;getThreadAPI()-&gt;isTDJoin(call);</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; }</div><div class="line"><a name="l00483"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#acd4308b99446c277ccb3407103fe21d0"> 483</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_1ForkJoinAnalysis.html#acd4308b99446c277ccb3407103fe21d0">getForkedThread</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; {</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordflow">return</span> getTCG()-&gt;getThreadAPI()-&gt;getForkedThread(call);</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; }</div><div class="line"><a name="l00488"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ada1e56dfe2d64ea6310142a346c86ed4"> 488</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_1ForkJoinAnalysis.html#ada1e56dfe2d64ea6310142a346c86ed4">getJoinedThread</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; {</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">return</span> getTCG()-&gt;getThreadAPI()-&gt;getJoinedThread(call);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; }</div><div class="line"><a name="l00492"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#afcf119c89e93a24923dd0d97ddec7ee1"> 492</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>&amp; <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#afcf119c89e93a24923dd0d97ddec7ee1">getCallee</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst, <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>&amp; callees)</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; {</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; getTCG()-&gt;getCallees(<a class="code" href="classSVF_1_1MHP.html#aca4903cf3e3ef5b2ed5959e5e6181d55">getCBN</a>(inst), callees);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">return</span> callees;</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; }</div><div class="line"><a name="l00498"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6"> 498</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">getTCG</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-&gt;<a class="code" href="classSVF_1_1TCT.html#a1602d02773578bca73dcbd29b95c67d0">getThreadCallGraph</a>();</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; }</div><div class="line"><a name="l00503"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8aa2d4c83981007108b152d05e9c51fe"> 503</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8aa2d4c83981007108b152d05e9c51fe">addDirectlyJoinTID</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cs, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid)</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; {</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; directJoinMap[cs].set(tid);</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; }</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;</div><div class="line"><a name="l00511"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a1505ba82206169f76ea239067797d6c2"> 511</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a1505ba82206169f76ea239067797d6c2">addToHPPair</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; {</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; HPPair.insert(std::make_pair(tid1,tid2));</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; HPPair.insert(std::make_pair(tid2,tid1));</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; }</div><div class="line"><a name="l00516"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a647ae6866bb37be850f0bdd5a7341188"> 516</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a647ae6866bb37be850f0bdd5a7341188">addToHBPair</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; HBPair.insert(std::make_pair(tid1,tid2));</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; }</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;</div><div class="line"><a name="l00524"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a02dad7e9ae45a1751c4548dd9991a8b4"> 524</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a02dad7e9ae45a1751c4548dd9991a8b4">addToFullJoin</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; {</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; fullJoin.insert(std::make_pair(tid1,tid2));</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; }</div><div class="line"><a name="l00528"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a6ead92486459ec7f94a8375c7f96faca"> 528</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a6ead92486459ec7f94a8375c7f96faca">addToPartial</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; {</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; partialJoin.insert(std::make_pair(tid1,tid2));</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; }</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;</div><div class="line"><a name="l00535"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ab302cceb28998623fed622560e50a740"> 535</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab302cceb28998623fed622560e50a740">addSymmetricLoopJoin</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>&amp; cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">Loop</a>* lp)</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; {</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; cxtJoinInLoop[cs] = lp;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; }</div><div class="line"><a name="l00539"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce"> 539</a></span>&#160; <a class="code" href="classSVF_1_1TCT.html">TCT</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>;</div><div class="line"><a name="l00540"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aa31b3f3d51b963ccd475e66b77143dba"> 540</a></span>&#160; CxtStmtToAliveFlagMap <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aa31b3f3d51b963ccd475e66b77143dba">cxtStmtToAliveFlagMap</a>; </div><div class="line"><a name="l00541"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#acccf53d174cac3275da0d79c89a73916"> 541</a></span>&#160; CxtStmtWorkList <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#acccf53d174cac3275da0d79c89a73916">cxtStmtList</a>; </div><div class="line"><a name="l00542"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#abf5b499f93a658636d09a62d14a47cad"> 542</a></span>&#160; CxtStmtToTIDMap <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#abf5b499f93a658636d09a62d14a47cad">directJoinMap</a>; </div><div class="line"><a name="l00543"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ab5678bd46e573070827cc413f0e0d5be"> 543</a></span>&#160; CxtStmtToTIDMap <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab5678bd46e573070827cc413f0e0d5be">dirAndIndJoinMap</a>; </div><div class="line"><a name="l00544"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a63da48d338683ec95709a6bd95238707"> 544</a></span>&#160; CxtStmtToLoopMap <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a63da48d338683ec95709a6bd95238707">cxtJoinInLoop</a>; </div><div class="line"><a name="l00545"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aad3e722ecaa4a39aef0e1cabfa2b8019"> 545</a></span>&#160; ThreadPairSet <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aad3e722ecaa4a39aef0e1cabfa2b8019">HBPair</a>; </div><div class="line"><a name="l00546"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a4ad5c7a21ca994d908d648ca9d9e1833"> 546</a></span>&#160; ThreadPairSet <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4ad5c7a21ca994d908d648ca9d9e1833">HPPair</a>; </div><div class="line"><a name="l00547"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a4193a30050195cd9aaafd58511b66ccc"> 547</a></span>&#160; ThreadPairSet <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4193a30050195cd9aaafd58511b66ccc">fullJoin</a>; </div><div class="line"><a name="l00548"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a3616d6e1649f9e451da0f7a44cffc1e3"> 548</a></span>&#160; ThreadPairSet <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a3616d6e1649f9e451da0f7a44cffc1e3">partialJoin</a>; </div><div class="line"><a name="l00549"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a1c616b61fbe9c713f51f2a44c4208cfa"> 549</a></span>&#160; <a class="code" href="classSVF_1_1PTACFInfoBuilder.html">PTACFInfoBuilder</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a1c616b61fbe9c713f51f2a44c4208cfa">ptaCFInfo</a>; </div><div class="line"><a name="l00550"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a4207948054a0f98560922f3f07ada10f"> 550</a></span>&#160; forkjoinToPTASCEVMap <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4207948054a0f98560922f3f07ada10f">fkjnToPTASCEVMap</a>; <span class="comment">//&lt; map a pointer at a fork/join site to its corresponing scev expression</span></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;};</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* MHP_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1TCT_html_a7ccacac1c673b38215b90e4eb480581f"><div class="ttname"><a href="classSVF_1_1TCT.html#a7ccacac1c673b38215b90e4eb480581f">SVF::TCT::getStartRoutineOfCxtThread</a></div><div class="ttdeci">const Function * getStartRoutineOfCxtThread(const CxtThread &amp;ct) const</div><div class="ttdoc">get the start routine function of a thread </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00338">TCT.h:338</a></div></div>
70
70
  <div class="ttc" id="classSVF_1_1MHP_html_aed7f65ea3f046774eef36602cb41f178"><div class="ttname"><a href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">SVF::MHP::pushToCTSWorkList</a></div><div class="ttdeci">bool pushToCTSWorkList(const CxtThreadStmt &amp;cs)</div><div class="ttdoc">WorkList helper functions. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00221">MHP.h:221</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1MHP_html"><div class="ttname"><a href="classSVF_1_1MHP.html">SVF::MHP</a></div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00024">MHP.h:24</a></div></div>
72
72
  <div class="ttc" id="classSVF_1_1TCTNode_html_a5dd0cf88e381438d191b275314117561"><div class="ttname"><a href="classSVF_1_1TCTNode.html#a5dd0cf88e381438d191b275314117561">SVF::TCTNode::isMultiforked</a></div><div class="ttdeci">bool isMultiforked() const</div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00100">TCT.h:100</a></div></div>
@@ -154,7 +154,6 @@ $(function() {
154
154
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html">SVF::ThreadCallGraph</a></div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00160">ThreadCallGraph.h:160</a></div></div>
155
155
  <div class="ttc" id="classSVF_1_1MHP_html_afa0d341a2fb7b05522dc6e178eab7e8b"><div class="ttname"><a href="classSVF_1_1MHP.html#afa0d341a2fb7b05522dc6e178eab7e8b">SVF::MHP::isJoinInSymmetricLoop</a></div><div class="ttdeci">const Loop * isJoinInSymmetricLoop(const CallStrCxt &amp;cxt, const Instruction *call) const</div><div class="ttdoc">Whether a context-sensitive join satisfies symmetric loop pattern. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00493">MHP.cpp:493</a></div></div>
156
156
  <div class="ttc" id="classSVF_1_1MHP_html_a76ac9d388529f090ab6dad5829dd0753"><div class="ttname"><a href="classSVF_1_1MHP.html#a76ac9d388529f090ab6dad5829dd0753">SVF::MHP::handleRet</a></div><div class="ttdeci">void handleRet(const CxtThreadStmt &amp;cts)</div><div class="ttdoc">Handle return. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00314">MHP.cpp:314</a></div></div>
157
- <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a3cb226930eeaf558575e09e5b65e0223"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a3cb226930eeaf558575e09e5b65e0223">SVF::SVFUtil::getFunExitBB</a></div><div class="ttdeci">const BasicBlock * getFunExitBB(const Function *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00167">LLVMUtil.h:167</a></div></div>
158
157
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a7a048ea1d9e80d4c122c1bbcacdea5f3"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a7a048ea1d9e80d4c122c1bbcacdea5f3">SVF::ForkJoinAnalysis::CxtStmtToLoopMap</a></div><div class="ttdeci">Map&lt; CxtStmt, const Loop * &gt; CxtStmtToLoopMap</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00288">MHP.h:288</a></div></div>
159
158
  <div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_aad3e722ecaa4a39aef0e1cabfa2b8019"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#aad3e722ecaa4a39aef0e1cabfa2b8019">SVF::ForkJoinAnalysis::HBPair</a></div><div class="ttdeci">ThreadPairSet HBPair</div><div class="ttdoc">thread happens-before pair </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00545">MHP.h:545</a></div></div>
160
159
  <div class="ttc" id="classSVF_1_1MHP_html_a22f7dc5043fed97f1b4b273b8b710415"><div class="ttname"><a href="classSVF_1_1MHP.html#a22f7dc5043fed97f1b4b273b8b710415">SVF::MHP::printInterleaving</a></div><div class="ttdeci">void printInterleaving()</div><div class="ttdoc">Print interleaving results. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00653">MHP.cpp:653</a></div></div>
@@ -236,6 +235,7 @@ $(function() {
236
235
  <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a14e646200d8836461877804ee4a203d1"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a14e646200d8836461877804ee4a203d1">ScalarEvolution</a></div><div class="ttdeci">llvm::ScalarEvolution ScalarEvolution</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00120">BasicTypes.h:120</a></div></div>
237
236
  <div class="ttc" id="classSVF_1_1PTACallGraph_html_a317e09edb29b110cf4273009551d31ec"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html#a317e09edb29b110cf4273009551d31ec">SVF::PTACallGraph::getCallees</a></div><div class="ttdeci">void getCallees(const CallICFGNode *cs, FunctionSet &amp;callees)</div><div class="ttdoc">Get all callees for a callsite. </div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00382">PTACallGraph.h:382</a></div></div>
238
237
  <div class="ttc" id="classSVF_1_1MHP_html_a67e2d43f0e35cc46eb7680ec66a4fe44"><div class="ttname"><a href="classSVF_1_1MHP.html#a67e2d43f0e35cc46eb7680ec66a4fe44">SVF::MHP::pushCxt</a></div><div class="ttdeci">void pushCxt(CallStrCxt &amp;cxt, const Instruction *call, const Function *callee)</div><div class="ttdoc">Push calling context. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00209">MHP.h:209</a></div></div>
238
+ <div class="ttc" id="namespaceSVF_1_1LLVMUtil_html_aa0e78f2e1c9c04aee478a7ecbf354800"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#aa0e78f2e1c9c04aee478a7ecbf354800">SVF::LLVMUtil::getFunExitBB</a></div><div class="ttdeci">const BasicBlock * getFunExitBB(const Function *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00167">LLVMUtil.h:167</a></div></div>
239
239
  </div><!-- fragment --></div><!-- contents -->
240
240
  <!-- start footer part -->
241
241
  <hr class="footer"/><address class="footer"><small>