svf-tools 1.0.342 → 1.0.346

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 (420) hide show
  1. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +2 -2
  2. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +8 -8
  3. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +9 -9
  4. package/SVF-doxygen/html/html/ConsG_8h_source.html +2 -2
  5. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
  6. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +7 -7
  7. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +5 -5
  8. package/SVF-doxygen/html/html/DDAClient_8h_source.html +3 -3
  9. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +7 -7
  10. package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +3 -3
  11. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +3 -3
  12. package/SVF-doxygen/html/html/FileChecker_8cpp_source.html +3 -3
  13. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +3 -3
  14. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +7 -7
  15. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +8 -8
  16. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +2 -2
  17. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +6 -6
  18. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +11 -11
  19. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +15 -15
  20. package/SVF-doxygen/html/html/ICFGNode_8h.html +7 -7
  21. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +69 -69
  22. package/SVF-doxygen/html/html/ICFGStat_8h_source.html +1 -1
  23. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +45 -44
  24. package/SVF-doxygen/html/html/ICFG_8h_source.html +34 -34
  25. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +9 -9
  26. package/SVF-doxygen/html/html/LeakChecker_8h_source.html +6 -6
  27. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +2 -2
  28. package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +5 -5
  29. package/SVF-doxygen/html/html/MHP_8cpp_source.html +9 -9
  30. package/SVF-doxygen/html/html/MHP_8h_source.html +6 -6
  31. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +9 -9
  32. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +2 -2
  33. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +5 -5
  34. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +26 -26
  35. package/SVF-doxygen/html/html/MemRegion_8h_source.html +18 -18
  36. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +9 -9
  37. package/SVF-doxygen/html/html/MemSSA_8h_source.html +12 -12
  38. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +41 -41
  39. package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +47 -46
  40. package/SVF-doxygen/html/html/Options_8cpp_source.html +1 -1
  41. package/SVF-doxygen/html/html/PCG_8cpp_source.html +2 -2
  42. package/SVF-doxygen/html/html/PCG_8h_source.html +4 -4
  43. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +10 -10
  44. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +17 -17
  45. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +6 -6
  46. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +2 -2
  47. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +16 -16
  48. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +17 -17
  49. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +4 -4
  50. package/SVF-doxygen/html/html/ProgSlice_8h_source.html +4 -4
  51. package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +3 -3
  52. package/SVF-doxygen/html/html/SVFGNode_8h_source.html +17 -17
  53. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +2 -2
  54. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +9 -9
  55. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +31 -31
  56. package/SVF-doxygen/html/html/SVFG_8h_source.html +27 -27
  57. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +3 -3
  58. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +13 -13
  59. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +9 -9
  60. package/SVF-doxygen/html/html/SVFIR_8h_source.html +31 -31
  61. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +14 -14
  62. package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +7 -7
  63. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +2 -2
  64. package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +4 -4
  65. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +2 -2
  66. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +2 -2
  67. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +2 -2
  68. package/SVF-doxygen/html/html/TCT_8h_source.html +3 -3
  69. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +15 -15
  70. package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +20 -20
  71. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +4 -4
  72. package/SVF-doxygen/html/html/TypeAnalysis_8h_source.html +2 -2
  73. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +3 -3
  74. package/SVF-doxygen/html/html/VFGNode_8h_source.html +11 -11
  75. package/SVF-doxygen/html/html/VFG_8cpp_source.html +19 -19
  76. package/SVF-doxygen/html/html/VFG_8h_source.html +19 -19
  77. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +6 -6
  78. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +4 -4
  79. package/SVF-doxygen/html/html/annotated.html +17 -17
  80. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode-members.html +3 -3
  81. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +23 -23
  82. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode-members.html +3 -3
  83. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +23 -23
  84. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode-members.html +3 -3
  85. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +22 -22
  86. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode-members.html +3 -3
  87. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +24 -24
  88. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient-members.html +1 -1
  89. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +7 -7
  90. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +12 -12
  91. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +51 -51
  92. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +12 -12
  93. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +32 -32
  94. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +12 -12
  95. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +32 -32
  96. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +12 -12
  97. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +32 -32
  98. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +12 -12
  99. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +32 -32
  100. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +12 -12
  101. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +34 -34
  102. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +12 -12
  103. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +32 -32
  104. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +12 -12
  105. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +32 -32
  106. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +12 -12
  107. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +38 -38
  108. package/SVF-doxygen/html/html/classSVF_1_1CallCHI-members.html +3 -3
  109. package/SVF-doxygen/html/html/classSVF_1_1CallCHI.html +22 -22
  110. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +4 -4
  111. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode-members.html +158 -0
  112. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +852 -0
  113. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.png +0 -0
  114. package/SVF-doxygen/html/html/classSVF_1_1CallMU-members.html +3 -3
  115. package/SVF-doxygen/html/html/classSVF_1_1CallMU.html +22 -22
  116. package/SVF-doxygen/html/html/classSVF_1_1CallPE-members.html +4 -4
  117. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +27 -27
  118. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl-members.html +12 -12
  119. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +31 -31
  120. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +2 -2
  121. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA-members.html +14 -14
  122. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +60 -60
  123. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver-members.html +1 -1
  124. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +16 -16
  125. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG-members.html +21 -21
  126. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +51 -51
  127. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker-members.html +5 -5
  128. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +16 -16
  129. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +12 -12
  130. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +33 -33
  131. package/SVF-doxygen/html/html/classSVF_1_1FileChecker-members.html +5 -5
  132. package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +20 -20
  133. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +11 -11
  134. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +52 -52
  135. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +12 -12
  136. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +45 -45
  137. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +12 -12
  138. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +33 -33
  139. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis-members.html +1 -1
  140. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +21 -21
  141. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode-members.html +3 -3
  142. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +19 -19
  143. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode-members.html +3 -3
  144. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +18 -18
  145. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode-members.html +150 -0
  146. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +618 -0
  147. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.png +0 -0
  148. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode-members.html +149 -0
  149. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +624 -0
  150. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.png +0 -0
  151. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient-members.html +1 -1
  152. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +12 -12
  153. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +3 -3
  154. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
  155. package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode-members.html +144 -0
  156. package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.html +413 -0
  157. package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.png +0 -0
  158. package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge-members.html +3 -3
  159. package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge.html +11 -11
  160. package/SVF-doxygen/html/html/classSVF_1_1ICFG-members.html +22 -22
  161. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +191 -184
  162. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder-members.html +4 -4
  163. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +69 -66
  164. package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +9 -9
  165. package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.png +0 -0
  166. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter-members.html +11 -11
  167. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +30 -30
  168. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +3 -3
  169. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG-members.html +21 -21
  170. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +51 -51
  171. package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode-members.html +144 -0
  172. package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode.html +399 -0
  173. package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode.png +0 -0
  174. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode-members.html +2 -2
  175. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +23 -23
  176. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode-members.html +2 -2
  177. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +20 -20
  178. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG-members.html +21 -21
  179. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +51 -51
  180. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode-members.html +146 -0
  181. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +494 -0
  182. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.png +0 -0
  183. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker-members.html +5 -5
  184. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +61 -61
  185. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +14 -14
  186. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator-members.html +1 -1
  187. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +10 -10
  188. package/SVF-doxygen/html/html/classSVF_1_1MHP-members.html +1 -1
  189. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +22 -22
  190. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator-members.html +24 -24
  191. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +196 -196
  192. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +8 -8
  193. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +6 -6
  194. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +5 -5
  195. package/SVF-doxygen/html/html/classSVF_1_1MemSSA-members.html +10 -10
  196. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +77 -77
  197. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator-members.html +5 -4
  198. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator.html +43 -39
  199. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +90 -90
  200. package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +1 -1
  201. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +2 -2
  202. package/SVF-doxygen/html/html/classSVF_1_1PCG-members.html +1 -1
  203. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +13 -13
  204. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph-members.html +15 -15
  205. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +118 -118
  206. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge-members.html +3 -3
  207. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +32 -32
  208. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +12 -12
  209. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +107 -107
  210. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice-members.html +2 -2
  211. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +18 -18
  212. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode-members.html +153 -0
  213. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +696 -0
  214. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.png +0 -0
  215. package/SVF-doxygen/html/html/classSVF_1_1RetPE-members.html +4 -4
  216. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +26 -26
  217. package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +24 -24
  218. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +159 -159
  219. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
  220. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +24 -24
  221. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +76 -76
  222. package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +19 -19
  223. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +132 -132
  224. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +4 -4
  225. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +58 -58
  226. package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI-members.html +4 -4
  227. package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +20 -20
  228. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder-members.html +1 -1
  229. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +13 -13
  230. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA-members.html +1 -1
  231. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +7 -7
  232. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +12 -12
  233. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +32 -32
  234. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt-members.html +1 -1
  235. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +7 -7
  236. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +4 -4
  237. package/SVF-doxygen/html/html/classSVF_1_1TCT-members.html +1 -1
  238. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +22 -22
  239. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE-members.html +4 -4
  240. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +15 -15
  241. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +4 -4
  242. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +15 -15
  243. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph-members.html +40 -40
  244. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +220 -220
  245. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +10 -10
  246. package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge-members.html +3 -3
  247. package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +11 -11
  248. package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge-members.html +3 -3
  249. package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +11 -11
  250. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +12 -12
  251. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +41 -41
  252. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +3 -3
  253. package/SVF-doxygen/html/html/classSVF_1_1VFG-members.html +9 -9
  254. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +96 -96
  255. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +12 -12
  256. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +39 -39
  257. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +12 -12
  258. package/SVF-doxygen/html/html/classes.html +16 -16
  259. package/SVF-doxygen/html/html/functions_a.html +59 -59
  260. package/SVF-doxygen/html/html/functions_c.html +65 -67
  261. package/SVF-doxygen/html/html/functions_eval_r.html +3 -0
  262. package/SVF-doxygen/html/html/functions_f.html +14 -14
  263. package/SVF-doxygen/html/html/functions_func.html +56 -56
  264. package/SVF-doxygen/html/html/functions_func_c.html +28 -28
  265. package/SVF-doxygen/html/html/functions_func_f.html +6 -6
  266. package/SVF-doxygen/html/html/functions_func_g.html +86 -86
  267. package/SVF-doxygen/html/html/functions_func_h.html +17 -17
  268. package/SVF-doxygen/html/html/functions_func_i.html +12 -12
  269. package/SVF-doxygen/html/html/functions_func_m.html +1 -1
  270. package/SVF-doxygen/html/html/functions_func_p.html +1 -1
  271. package/SVF-doxygen/html/html/functions_func_r.html +6 -6
  272. package/SVF-doxygen/html/html/functions_func_s.html +2 -2
  273. package/SVF-doxygen/html/html/functions_func_t.html +7 -7
  274. package/SVF-doxygen/html/html/functions_func_u.html +3 -3
  275. package/SVF-doxygen/html/html/functions_g.html +88 -88
  276. package/SVF-doxygen/html/html/functions_h.html +16 -16
  277. package/SVF-doxygen/html/html/functions_i.html +22 -22
  278. package/SVF-doxygen/html/html/functions_l.html +3 -3
  279. package/SVF-doxygen/html/html/functions_m.html +2 -2
  280. package/SVF-doxygen/html/html/functions_o.html +13 -13
  281. package/SVF-doxygen/html/html/functions_p.html +14 -14
  282. package/SVF-doxygen/html/html/functions_r.html +13 -12
  283. package/SVF-doxygen/html/html/functions_s.html +13 -13
  284. package/SVF-doxygen/html/html/functions_t.html +12 -14
  285. package/SVF-doxygen/html/html/functions_type.html +1 -1
  286. package/SVF-doxygen/html/html/functions_type_c.html +24 -24
  287. package/SVF-doxygen/html/html/functions_type_f.html +3 -3
  288. package/SVF-doxygen/html/html/functions_type_i.html +2 -2
  289. package/SVF-doxygen/html/html/functions_type_p.html +1 -1
  290. package/SVF-doxygen/html/html/functions_type_s.html +1 -1
  291. package/SVF-doxygen/html/html/functions_type_v.html +2 -2
  292. package/SVF-doxygen/html/html/functions_u.html +3 -3
  293. package/SVF-doxygen/html/html/functions_v.html +8 -8
  294. package/SVF-doxygen/html/html/functions_vars_a.html +2 -2
  295. package/SVF-doxygen/html/html/functions_vars_c.html +11 -11
  296. package/SVF-doxygen/html/html/functions_vars_f.html +5 -5
  297. package/SVF-doxygen/html/html/functions_vars_g.html +1 -1
  298. package/SVF-doxygen/html/html/functions_vars_i.html +3 -3
  299. package/SVF-doxygen/html/html/functions_vars_r.html +1 -1
  300. package/SVF-doxygen/html/html/functions_w.html +9 -5
  301. package/SVF-doxygen/html/html/hierarchy.html +7 -7
  302. package/SVF-doxygen/html/html/namespaceSVF.html +11 -11
  303. package/SVF-doxygen/html/html/search/all_1.js +58 -58
  304. package/SVF-doxygen/html/html/search/all_10.js +8 -8
  305. package/SVF-doxygen/html/html/search/all_12.js +8 -7
  306. package/SVF-doxygen/html/html/search/all_13.js +11 -11
  307. package/SVF-doxygen/html/html/search/all_14.js +8 -8
  308. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  309. package/SVF-doxygen/html/html/search/all_16.js +4 -4
  310. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  311. package/SVF-doxygen/html/html/search/all_3.js +35 -34
  312. package/SVF-doxygen/html/html/search/all_6.js +12 -12
  313. package/SVF-doxygen/html/html/search/all_7.js +62 -61
  314. package/SVF-doxygen/html/html/search/all_8.js +17 -17
  315. package/SVF-doxygen/html/html/search/all_9.js +16 -16
  316. package/SVF-doxygen/html/html/search/all_c.js +2 -2
  317. package/SVF-doxygen/html/html/search/all_d.js +5 -5
  318. package/SVF-doxygen/html/html/search/all_e.js +3 -3
  319. package/SVF-doxygen/html/html/search/all_f.js +3 -3
  320. package/SVF-doxygen/html/html/search/classes_2.js +1 -1
  321. package/SVF-doxygen/html/html/search/classes_5.js +2 -2
  322. package/SVF-doxygen/html/html/search/classes_6.js +1 -1
  323. package/SVF-doxygen/html/html/search/classes_8.js +2 -2
  324. package/SVF-doxygen/html/html/search/classes_e.js +1 -1
  325. package/SVF-doxygen/html/html/search/enumvalues_e.js +2 -1
  326. package/SVF-doxygen/html/html/search/functions_0.js +55 -55
  327. package/SVF-doxygen/html/html/search/functions_10.js +3 -3
  328. package/SVF-doxygen/html/html/search/functions_11.js +4 -4
  329. package/SVF-doxygen/html/html/search/functions_12.js +1 -1
  330. package/SVF-doxygen/html/html/search/functions_2.js +10 -10
  331. package/SVF-doxygen/html/html/search/functions_5.js +4 -4
  332. package/SVF-doxygen/html/html/search/functions_6.js +61 -61
  333. package/SVF-doxygen/html/html/search/functions_7.js +17 -17
  334. package/SVF-doxygen/html/html/search/functions_8.js +12 -12
  335. package/SVF-doxygen/html/html/search/functions_b.js +1 -1
  336. package/SVF-doxygen/html/html/search/functions_e.js +1 -1
  337. package/SVF-doxygen/html/html/search/functions_f.js +4 -4
  338. package/SVF-doxygen/html/html/search/typedefs_0.js +1 -1
  339. package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
  340. package/SVF-doxygen/html/html/search/typedefs_14.js +1 -1
  341. package/SVF-doxygen/html/html/search/typedefs_2.js +21 -21
  342. package/SVF-doxygen/html/html/search/typedefs_5.js +3 -3
  343. package/SVF-doxygen/html/html/search/typedefs_8.js +2 -2
  344. package/SVF-doxygen/html/html/search/typedefs_f.js +1 -1
  345. package/SVF-doxygen/html/html/search/variables_1.js +2 -2
  346. package/SVF-doxygen/html/html/search/variables_12.js +1 -1
  347. package/SVF-doxygen/html/html/search/variables_14.js +1 -1
  348. package/SVF-doxygen/html/html/search/variables_3.js +4 -4
  349. package/SVF-doxygen/html/html/search/variables_6.js +5 -5
  350. package/SVF-doxygen/html/html/search/variables_7.js +1 -1
  351. package/SVF-doxygen/html/html/search/variables_9.js +1 -1
  352. package/SVF-doxygen/html/html/search/variables_d.js +1 -1
  353. package/SVF-doxygen/html/html/search/variables_e.js +2 -2
  354. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +22 -22
  355. package/include/DDA/ContextDDA.h +3 -3
  356. package/include/DDA/DDAClient.h +2 -2
  357. package/include/DDA/DDAVFSolver.h +2 -2
  358. package/include/DDA/FlowDDA.h +2 -2
  359. package/include/Graphs/ICFG.h +33 -33
  360. package/include/Graphs/ICFGNode.h +33 -33
  361. package/include/Graphs/ICFGStat.h +11 -11
  362. package/include/Graphs/PTACallGraph.h +19 -19
  363. package/include/Graphs/SVFG.h +16 -16
  364. package/include/Graphs/SVFGNode.h +14 -14
  365. package/include/Graphs/SVFGOPT.h +1 -1
  366. package/include/Graphs/ThreadCallGraph.h +25 -25
  367. package/include/Graphs/VFG.h +10 -10
  368. package/include/Graphs/VFGNode.h +8 -8
  369. package/include/MSSA/MSSAMuChi.h +6 -6
  370. package/include/MSSA/MemRegion.h +24 -24
  371. package/include/MSSA/MemSSA.h +10 -10
  372. package/include/MTA/LockResultValidator.h +2 -2
  373. package/include/MTA/MHP.h +4 -4
  374. package/include/MTA/PCG.h +1 -1
  375. package/include/MTA/TCT.h +2 -2
  376. package/include/MemoryModel/PointerAnalysis.h +12 -12
  377. package/include/MemoryModel/SVFIR.h +21 -21
  378. package/include/MemoryModel/SVFStatements.h +11 -11
  379. package/include/SABER/LeakChecker.h +4 -4
  380. package/include/SABER/ProgSlice.h +2 -2
  381. package/include/SABER/SaberCheckerAPI.h +4 -4
  382. package/include/SABER/SaberSVFGBuilder.h +1 -1
  383. package/include/SABER/SrcSnkDDA.h +1 -1
  384. package/include/SVF-FE/ICFGBuilder.h +4 -4
  385. package/include/SVF-FE/SVFIRBuilder.h +5 -5
  386. package/include/Util/NodeIDAllocator.h +3 -0
  387. package/lib/DDA/ContextDDA.cpp +3 -3
  388. package/lib/DDA/DDAClient.cpp +1 -1
  389. package/lib/DDA/FlowDDA.cpp +1 -1
  390. package/lib/Graphs/ICFG.cpp +55 -50
  391. package/lib/Graphs/PTACallGraph.cpp +5 -5
  392. package/lib/Graphs/SVFG.cpp +7 -7
  393. package/lib/Graphs/ThreadCallGraph.cpp +6 -6
  394. package/lib/Graphs/VFG.cpp +6 -6
  395. package/lib/MSSA/MemRegion.cpp +17 -17
  396. package/lib/MSSA/MemSSA.cpp +3 -3
  397. package/lib/MTA/LockAnalysis.cpp +4 -4
  398. package/lib/MTA/MHP.cpp +5 -5
  399. package/lib/MTA/MTAResultValidator.cpp +1 -1
  400. package/lib/MTA/PCG.cpp +1 -1
  401. package/lib/MemoryModel/PointerAnalysis.cpp +10 -10
  402. package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
  403. package/lib/MemoryModel/SVFIR.cpp +5 -5
  404. package/lib/SABER/DoubleFreeChecker.cpp +1 -1
  405. package/lib/SABER/FileChecker.cpp +2 -2
  406. package/lib/SABER/LeakChecker.cpp +8 -8
  407. package/lib/SABER/ProgSlice.cpp +2 -2
  408. package/lib/SVF-FE/CallGraphBuilder.cpp +4 -4
  409. package/lib/SVF-FE/Graph2Json.cpp +5 -5
  410. package/lib/SVF-FE/ICFGBuilder.cpp +31 -25
  411. package/lib/SVF-FE/SVFIRBuilder.cpp +8 -8
  412. package/lib/Util/NodeIDAllocator.cpp +12 -0
  413. package/lib/Util/Options.cpp +2 -1
  414. package/lib/Util/TypeBasedHeapCloning.cpp +1 -1
  415. package/lib/WPA/Andersen.cpp +3 -3
  416. package/lib/WPA/FlowSensitive.cpp +2 -2
  417. package/lib/WPA/TypeAnalysis.cpp +1 -1
  418. package/lib/WPA/VersionedFlowSensitive.cpp +4 -4
  419. package/lib/WPA/WPAPass.cpp +4 -4
  420. package/package.json +1 -1
@@ -66,45 +66,47 @@ $(function() {
66
66
  <div class="title">ThreadCallGraph.h</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="ThreadCallGraph_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">//===- ThreadCallGraph.h -- Call graph considering thread fork/join-----------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * ThreadCallGraph.h</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: Jul 7, 2014</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Authors: Peng Di, Yulei Sui, Ding Ye</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#ifndef RCG_H_</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#define RCG_H_</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PTACallGraph_8h.html">Graphs/PTACallGraph.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointerAnalysisImpl_8h.html">MemoryModel/PointerAnalysisImpl.h</a>&quot;</span></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"> 36</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</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"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">class </span>SVFModule;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">class </span>ThreadAPI;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadForkEdge.html"> 44</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1ThreadForkEdge.html">ThreadForkEdge</a>: <span class="keyword">public</span> <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadForkEdge.html#ae55b3e06b3ed22780d917dbb225561c1"> 49</a></span>&#160; <a class="code" href="classSVF_1_1ThreadForkEdge.html#ae55b3e06b3ed22780d917dbb225561c1">ThreadForkEdge</a>(<a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* s, <a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* d, <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> <a class="code" href="classSVF_1_1PTACallGraphEdge.html#a7488c5125d55e56ec427ef0d8ee88999">csId</a>) :</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a>(s, d, <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a>::<a class="code" href="classSVF_1_1PTACallGraphEdge.html#a9738544725458bb022b8d5f2dbd281f7af32caf15ca19d512b5183bcf0d859cd7">TDForkEdge</a>, csId)</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</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_1ThreadForkEdge.html#a8be8c59b7c254b5b3e7f05913c3df158"> 54</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1ThreadForkEdge.html#a8be8c59b7c254b5b3e7f05913c3df158">~ThreadForkEdge</a>()</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadForkEdge.html#a4d2c3601a3fd530d178ec00ee3e1bc5d"> 60</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadForkEdge.html#a4d2c3601a3fd530d178ec00ee3e1bc5d">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ThreadForkEdge.html">ThreadForkEdge</a>*)</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; {</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</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"><a class="line" href="classSVF_1_1ThreadForkEdge.html#ae40d52a9080627661aad198adf5f411a"> 64</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadForkEdge.html#ae40d52a9080627661aad198adf5f411a">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a> *edge)</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">return</span> edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1PTACallGraphEdge.html#a9738544725458bb022b8d5f2dbd281f7af32caf15ca19d512b5183bcf0d859cd7">PTACallGraphEdge::TDForkEdge</a>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadForkEdge.html#acdc2ff9ad9800847b581e9d27efd3843"> 70</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1ThreadForkEdge.html#acdc2ff9ad9800847b581e9d27efd3843">toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; std::string str;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;ThreadForkEdge &quot;</span>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;CallSite ID: &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1PTACallGraphEdge.html#af9ca9cfffbba3b68838d41be62c914ac">getCallSiteID</a>();</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; srcNode ID &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>() &lt;&lt; <span class="stringliteral">&quot; (fun: &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getFunction()-&gt;getName() &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; dstNode ID &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>() &lt;&lt; <span class="stringliteral">&quot; (fun: &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getFunction()-&gt;getName() &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; }</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadForkEdge.html#ad36696915ee802989b679dd058aaab68"> 80</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericNode.html#a03c6da4a73c47f84f5c5b47252bc339a">GenericNode&lt;PTACallGraphNode, ThreadForkEdge&gt;::GEdgeSetTy</a> <a class="code" href="classSVF_1_1ThreadForkEdge.html#ad36696915ee802989b679dd058aaab68">ForkEdgeSet</a>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;};</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadJoinEdge.html"> 86</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1ThreadJoinEdge.html">ThreadJoinEdge</a>: <span class="keyword">public</span> <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;{</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadJoinEdge.html#abacb4b5e4badee46f9517b2d84798a3e"> 91</a></span>&#160; <a class="code" href="classSVF_1_1ThreadJoinEdge.html#abacb4b5e4badee46f9517b2d84798a3e">ThreadJoinEdge</a>(<a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* s, <a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* d, <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> <a class="code" href="classSVF_1_1PTACallGraphEdge.html#a7488c5125d55e56ec427ef0d8ee88999">csId</a>) :</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a>(s, d, <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a>::<a class="code" href="classSVF_1_1PTACallGraphEdge.html#a9738544725458bb022b8d5f2dbd281f7a2d65840140263a0808f5b9d553a4bff5">TDJoinEdge</a>, csId)</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; }</div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadJoinEdge.html#a0a09e2d148e6d02a5fcb31b8752a3ea5"> 96</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1ThreadJoinEdge.html#a0a09e2d148e6d02a5fcb31b8752a3ea5">~ThreadJoinEdge</a>()</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; {</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadJoinEdge.html#a0fb671c87fecd2fd9c2dab4187a47d37"> 100</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadJoinEdge.html#a0fb671c87fecd2fd9c2dab4187a47d37">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ThreadJoinEdge.html">ThreadJoinEdge</a>*)</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</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_1ThreadJoinEdge.html#ae4095b55b035bbf42d0a75afada4244d"> 104</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadJoinEdge.html#ae4095b55b035bbf42d0a75afada4244d">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a> *edge)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">return</span> edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1PTACallGraphEdge.html#a9738544725458bb022b8d5f2dbd281f7a2d65840140263a0808f5b9d553a4bff5">PTACallGraphEdge::TDJoinEdge</a>;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadJoinEdge.html#a67b68672ef76e0a4f326f7dbbd77bbf7"> 109</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1ThreadJoinEdge.html#a67b68672ef76e0a4f326f7dbbd77bbf7">toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; std::string str;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;ThreadJoinEdge &quot;</span>;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;CallSite ID: &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1PTACallGraphEdge.html#af9ca9cfffbba3b68838d41be62c914ac">getCallSiteID</a>();</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; srcNode ID &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>() &lt;&lt; <span class="stringliteral">&quot; (fun: &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getFunction()-&gt;getName() &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; dstNode ID &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>() &lt;&lt; <span class="stringliteral">&quot; (fun: &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getFunction()-&gt;getName() &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadJoinEdge.html#acf768ce9925ee75aea865cd9306afda9"> 119</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericNode.html#a03c6da4a73c47f84f5c5b47252bc339a">GenericNode&lt;PTACallGraphNode, ThreadJoinEdge&gt;::GEdgeSetTy</a> <a class="code" href="classSVF_1_1ThreadJoinEdge.html#acf768ce9925ee75aea865cd9306afda9">JoinEdgeSet</a>;</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"> 121</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classSVF_1_1HareParForEdge.html"> 125</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1HareParForEdge.html">HareParForEdge</a>: <span class="keyword">public</span> <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;{</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="classSVF_1_1HareParForEdge.html#a097ccd687d7ca511a4a453dd56b7c665"> 130</a></span>&#160; <a class="code" href="classSVF_1_1HareParForEdge.html#a097ccd687d7ca511a4a453dd56b7c665">HareParForEdge</a>(<a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* s, <a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* d, <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> <a class="code" href="classSVF_1_1PTACallGraphEdge.html#a7488c5125d55e56ec427ef0d8ee88999">csId</a>) :</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a>(s, d, <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a>::<a class="code" href="classSVF_1_1HareParForEdge.html">HareParForEdge</a>, csId)</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; }</div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classSVF_1_1HareParForEdge.html#a6496eb7d7d33d49cc174722034451b1b"> 135</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1HareParForEdge.html#a6496eb7d7d33d49cc174722034451b1b">~HareParForEdge</a>()</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div><div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="classSVF_1_1HareParForEdge.html#ab1dba5dff1e71bce578dc7b0009ba518"> 141</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1HareParForEdge.html#ab1dba5dff1e71bce578dc7b0009ba518">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1HareParForEdge.html">HareParForEdge</a>*)</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classSVF_1_1HareParForEdge.html#af9cc260c4a767f9ebd4a454dff4f88be"> 145</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1HareParForEdge.html#af9cc260c4a767f9ebd4a454dff4f88be">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a> *edge)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">return</span> edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1PTACallGraphEdge.html#a9738544725458bb022b8d5f2dbd281f7a17e0d58fd42d0d493087e698d4ecd838">PTACallGraphEdge::HareParForEdge</a>;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="classSVF_1_1HareParForEdge.html#ac352ec0ba628ac5fe96b1f6d74808cb2"> 151</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericNode.html#a03c6da4a73c47f84f5c5b47252bc339a">GenericNode&lt;PTACallGraphNode, HareParForEdge&gt;::GEdgeSetTy</a> <a class="code" href="classSVF_1_1HareParForEdge.html#ac352ec0ba628ac5fe96b1f6d74808cb2">ParForEdgeSet</a>;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;};</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html"> 158</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>: <span class="keyword">public</span> <a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a></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"> 161</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#ad48fad1fec75346c9eb79bbd6e8caee4"> 162</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const CallBlockNode*&gt;</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#ad48fad1fec75346c9eb79bbd6e8caee4">InstSet</a>;</div><div class="line"><a name="l00163"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a0d560b811f8df1a710c627e1ac100155"> 163</a></span>&#160; <span class="keyword">typedef</span> InstSet <a class="code" href="classSVF_1_1ThreadCallGraph.html#a0d560b811f8df1a710c627e1ac100155">CallSiteSet</a>;</div><div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#af952209ad8f7ae0c0f58c87d97f57ee9"> 164</a></span>&#160; <span class="keyword">typedef</span> std::vector&lt;const Instruction*&gt; <a class="code" href="classSVF_1_1ThreadCallGraph.html#af952209ad8f7ae0c0f58c87d97f57ee9">InstVector</a>;</div><div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a8c6eef5a291bd0c65cc2f816767795f1"> 165</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const Instruction*, InstSet&gt;</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a8c6eef5a291bd0c65cc2f816767795f1">CallToInstMap</a>;</div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a304ba7ef48068fa019c69af5744842cc"> 166</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;CallSiteSet*&gt;</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a304ba7ef48068fa019c69af5744842cc">CtxSet</a>;</div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#aa5efa630056c1db2bb0dadc868752ec8"> 167</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1ThreadForkEdge.html#ad36696915ee802989b679dd058aaab68">ThreadForkEdge::ForkEdgeSet</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#aa5efa630056c1db2bb0dadc868752ec8">ForkEdgeSet</a>;</div><div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#ad0d6585b7d26cd4597466a79e2fedacd"> 168</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const CallBlockNode*, ForkEdgeSet&gt;</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#ad0d6585b7d26cd4597466a79e2fedacd">CallInstToForkEdgesMap</a>;</div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#aa9e07204488ec8f0f83f4e218b6ce6bd"> 169</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1ThreadJoinEdge.html#acf768ce9925ee75aea865cd9306afda9">ThreadJoinEdge::JoinEdgeSet</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#aa9e07204488ec8f0f83f4e218b6ce6bd">JoinEdgeSet</a>;</div><div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a2f24d314b211151182bee38b61731749"> 170</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const CallBlockNode*, JoinEdgeSet&gt;</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a2f24d314b211151182bee38b61731749">CallInstToJoinEdgesMap</a>;</div><div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#abc4cdc5b401932bf410d26ab4d58ca33"> 171</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1HareParForEdge.html#ac352ec0ba628ac5fe96b1f6d74808cb2">HareParForEdge::ParForEdgeSet</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#abc4cdc5b401932bf410d26ab4d58ca33">ParForEdgeSet</a>;</div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#ac6eb68444968f7bfc3e1e16099454cab"> 172</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const CallBlockNode*, ParForEdgeSet&gt;</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#ac6eb68444968f7bfc3e1e16099454cab">CallInstToParForEdgesMap</a>;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>();</div><div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a7991ee2d70e1c9f1f8bdf5e46d56802c"> 177</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a7991ee2d70e1c9f1f8bdf5e46d56802c">~ThreadCallGraph</a>()</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a4ba42f59f0a6a7ea5b059f6e8df64d89"> 183</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a4ba42f59f0a6a7ea5b059f6e8df64d89">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a> *)</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; }</div><div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a5d991e4511fc909dc170a4b03e71d77e"> 187</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a5d991e4511fc909dc170a4b03e71d77e">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a> *g)</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">return</span> g-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ac6a294ec1c88862c8f7d54000f04e1f7">getKind</a>() == <a class="code" href="classSVF_1_1PTACallGraph.html#a5b1fe2b2314db947cd5e709b7285fe1ca4fe819bb1488afc48b04c1b7bef04bc2">PTACallGraph::ThdCallGraph</a>;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordtype">void</span> updateCallGraph(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordtype">void</span> updateJoinEdge(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> hasThreadForkEdge(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">return</span> callinstToThreadForkEdgesMap.find(cs) != callinstToThreadForkEdgesMap.end();</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"><a class="line" href="classSVF_1_1ThreadCallGraph.html#af33e1701215e9818b22f11789746821e"> 206</a></span>&#160; <span class="keyword">inline</span> ForkEdgeSet::const_iterator <a class="code" href="classSVF_1_1ThreadCallGraph.html#af33e1701215e9818b22f11789746821e">getForkEdgeBegin</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; CallInstToForkEdgesMap::const_iterator it = callinstToThreadForkEdgesMap.find(cs);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != callinstToThreadForkEdgesMap.end() &amp;&amp; <span class="stringliteral">&quot;call instruction not found&quot;</span>);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">return</span> it-&gt;second.begin();</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; }</div><div class="line"><a name="l00212"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a43513b641e4f05ec165db78e3ac55fef"> 212</a></span>&#160; <span class="keyword">inline</span> ForkEdgeSet::const_iterator <a class="code" href="classSVF_1_1ThreadCallGraph.html#a43513b641e4f05ec165db78e3ac55fef">getForkEdgeEnd</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; CallInstToForkEdgesMap::const_iterator it = callinstToThreadForkEdgesMap.find(cs);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != callinstToThreadForkEdgesMap.end() &amp;&amp; <span class="stringliteral">&quot;call instruction not found&quot;</span>);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">return</span> it-&gt;second.end();</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"> 221</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> hasThreadJoinEdge(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">return</span> callinstToThreadJoinEdgesMap.find(cs) != callinstToThreadJoinEdgesMap.end();</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div><div class="line"><a name="l00226"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#ad6215527f01188f8e65fe8616e92dbc2"> 226</a></span>&#160; <span class="keyword">inline</span> JoinEdgeSet::const_iterator <a class="code" href="classSVF_1_1ThreadCallGraph.html#ad6215527f01188f8e65fe8616e92dbc2">getJoinEdgeBegin</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; CallInstToJoinEdgesMap::const_iterator it = callinstToThreadJoinEdgesMap.find(cs);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != callinstToThreadJoinEdgesMap.end() &amp;&amp; <span class="stringliteral">&quot;call instruction does not have a valid callee&quot;</span>);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">return</span> it-&gt;second.begin();</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div><div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a17b7b3f0bdb4a52166b8509bd90499ba"> 232</a></span>&#160; <span class="keyword">inline</span> JoinEdgeSet::const_iterator <a class="code" href="classSVF_1_1ThreadCallGraph.html#a17b7b3f0bdb4a52166b8509bd90499ba">getJoinEdgeEnd</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; CallInstToJoinEdgesMap::const_iterator it = callinstToThreadJoinEdgesMap.find(cs);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != callinstToThreadJoinEdgesMap.end() &amp;&amp; <span class="stringliteral">&quot;call instruction does not have a valid callee&quot;</span>);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">return</span> it-&gt;second.end();</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</div><div class="line"><a name="l00238"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#aa8be8d48d680b3f2e61b2d8af5e9eddc"> 238</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#aa8be8d48d680b3f2e61b2d8af5e9eddc">getJoinSites</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* routine, InstSet&amp; csSet)</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; {</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">for</span>(CallInstToJoinEdgesMap::const_iterator it = callinstToThreadJoinEdgesMap.begin(), eit = callinstToThreadJoinEdgesMap.end(); it!=eit; ++it)</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; {</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">for</span>(JoinEdgeSet::const_iterator jit = it-&gt;second.begin(), ejit = it-&gt;second.end(); jit!=ejit; ++jit)</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; {</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">if</span>((*jit)-&gt;getDstNode() == routine)</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; csSet.insert(it-&gt;first);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; }</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; }</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#aa5c29ac668359942a9bc31cacd0cd9c4"> 255</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#aa5c29ac668359942a9bc31cacd0cd9c4">isForksite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* csInst)</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; {</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">return</span> forksites.find(csInst) != forksites.end();</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"><a class="line" href="classSVF_1_1ThreadCallGraph.html#ac9dde4936d04321a17656af1af1108da"> 259</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#ac9dde4936d04321a17656af1af1108da">isJoinsite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* csInst)</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; {</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">return</span> joinsites.find(csInst) != joinsites.end();</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; }</div><div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#af5ad00c7a5362aa288bddf4824601ab8"> 263</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#af5ad00c7a5362aa288bddf4824601ab8">isParForSite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* csInst)</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; {</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">return</span> parForSites.find(csInst) != parForSites.end();</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;</div><div class="line"><a name="l00271"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a37f2e076713a9aeb0e4313fb05dfb92e"> 271</a></span>&#160; <span class="keyword">inline</span> CallSiteSet::const_iterator <a class="code" href="classSVF_1_1ThreadCallGraph.html#a37f2e076713a9aeb0e4313fb05dfb92e">forksitesBegin</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">return</span> forksites.begin();</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div><div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a1ebbd26c17cff1c1a1bee9caa9a8f825"> 275</a></span>&#160; <span class="keyword">inline</span> CallSiteSet::const_iterator <a class="code" href="classSVF_1_1ThreadCallGraph.html#a1ebbd26c17cff1c1a1bee9caa9a8f825">forksitesEnd</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">return</span> forksites.end();</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;</div><div class="line"><a name="l00283"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a98ecfe14be2d38d292b5919716cdd29d"> 283</a></span>&#160; <span class="keyword">inline</span> CallSiteSet::const_iterator <a class="code" href="classSVF_1_1ThreadCallGraph.html#a98ecfe14be2d38d292b5919716cdd29d">joinsitesBegin</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">return</span> joinsites.begin();</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div><div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a50502f398e5eac9c6da3e26ea6052057"> 287</a></span>&#160; <span class="keyword">inline</span> CallSiteSet::const_iterator <a class="code" href="classSVF_1_1ThreadCallGraph.html#a50502f398e5eac9c6da3e26ea6052057">joinsitesEnd</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">return</span> joinsites.end();</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; }</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;</div><div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a29c74634b17007e5bef6fb48e1f3839f"> 295</a></span>&#160; <span class="keyword">inline</span> CallSiteSet::const_iterator <a class="code" href="classSVF_1_1ThreadCallGraph.html#a29c74634b17007e5bef6fb48e1f3839f">parForSitesBegin</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">return</span> parForSites.begin();</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div><div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a506343bcd23ba71d2db915ff7c58e728"> 299</a></span>&#160; <span class="keyword">inline</span> CallSiteSet::const_iterator <a class="code" href="classSVF_1_1ThreadCallGraph.html#a506343bcd23ba71d2db915ff7c58e728">parForSitesEnd</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">return</span> parForSites.end();</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"> 304</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;</div><div class="line"><a name="l00307"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#aa847760765aae18bcb93b260a881441b"> 307</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#aa847760765aae18bcb93b260a881441b">getNumOfForksite</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">return</span> forksites.size();</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div><div class="line"><a name="l00311"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a733bf08c7a496435ad09a41e6b0343ff"> 311</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a733bf08c7a496435ad09a41e6b0343ff">getNumOfJoinsite</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">return</span> joinsites.size();</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; }</div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#ad883eb92aece6818a3a0a261fa3407ce"> 315</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#ad883eb92aece6818a3a0a261fa3407ce">getNumOfParForSite</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">return</span> parForSites.size();</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"> 320</span>&#160;</div><div class="line"><a name="l00322"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#adcad8524a53baf256cd45503ec568c10"> 322</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ThreadAPI.html">ThreadAPI</a>* <a class="code" href="classSVF_1_1ThreadCallGraph.html#adcad8524a53baf256cd45503ec568c10">getThreadAPI</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">return</span> tdAPI;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; }</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;</div><div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a6e2ebab64fd01e40e7100162fe544b04"> 329</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a6e2ebab64fd01e40e7100162fe544b04">addForksite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)</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; callinstToThreadForkEdgesMap[cs];</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">return</span> forksites.insert(cs).second;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; }</div><div class="line"><a name="l00334"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#ae72e4e29bfda892f059f719454f6fcd2"> 334</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#ae72e4e29bfda892f059f719454f6fcd2">addJoinsite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; callinstToThreadJoinEdgesMap[cs];</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">return</span> joinsites.insert(cs).second;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; }</div><div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a9daa0817e1f88a2478d7094646c72e13"> 339</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a9daa0817e1f88a2478d7094646c72e13">addParForSite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; {</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; callinstToHareParForEdgesMap[cs];</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordflow">return</span> parForSites.insert(cs).second;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; }</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keywordtype">void</span> addDirectForkEdge(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordtype">void</span> addIndirectForkEdge(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee);</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"> 353</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordtype">void</span> addDirectJoinEdge(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs,<span class="keyword">const</span> CallSiteSet&amp; forksite);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordtype">void</span> addDirectParForEdge(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordtype">void</span> addIndirectParForEdge(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;</div><div class="line"><a name="l00365"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a29d3e4d720f61b4c29fee9691cedff96"> 365</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a29d3e4d720f61b4c29fee9691cedff96">addThreadForkEdgeSetMap</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <a class="code" href="classSVF_1_1ThreadForkEdge.html">ThreadForkEdge</a>* edge)</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; {</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">if</span>(edge!=<span class="keyword">nullptr</span>)</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; callinstToThreadForkEdgesMap[cs].insert(edge);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; callinstToCallGraphEdgesMap[cs].insert(edge);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; }</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; }</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"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a70a03bcaa6386ef39188acb6b2aa9d5a"> 375</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a70a03bcaa6386ef39188acb6b2aa9d5a">addThreadJoinEdgeSetMap</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <a class="code" href="classSVF_1_1ThreadJoinEdge.html">ThreadJoinEdge</a>* edge)</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; {</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">if</span>(edge!=<span class="keyword">nullptr</span>)</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; callinstToThreadJoinEdgesMap[cs].insert(edge);</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; callinstToCallGraphEdgesMap[cs].insert(edge);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; }</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;</div><div class="line"><a name="l00385"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a845258d0d19de3dda573521a34dbf705"> 385</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a845258d0d19de3dda573521a34dbf705">addHareParForEdgeSetMap</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <a class="code" href="classSVF_1_1HareParForEdge.html">HareParForEdge</a>* edge)</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">if</span>(edge!=<span class="keyword">nullptr</span>)</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; {</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; callinstToHareParForEdgesMap[cs].insert(edge);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; callinstToCallGraphEdgesMap[cs].insert(edge);</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; }</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;</div><div class="line"><a name="l00395"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a10f3f07059d0534e391093372fcd708d"> 395</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ThreadJoinEdge.html">ThreadJoinEdge</a>* <a class="code" href="classSVF_1_1ThreadCallGraph.html#a10f3f07059d0534e391093372fcd708d">hasThreadJoinEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* call, <a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* joinFunNode, <a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* threadRoutineFunNode, <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> <a class="code" href="classSVF_1_1PTACallGraphEdge.html#a7488c5125d55e56ec427ef0d8ee88999">csId</a>)<span class="keyword"> const</span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <a class="code" href="classSVF_1_1ThreadJoinEdge.html">ThreadJoinEdge</a> joinEdge(joinFunNode,threadRoutineFunNode, csId);</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; CallInstToJoinEdgesMap::const_iterator it = callinstToThreadJoinEdgesMap.find(call);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">if</span>(it != callinstToThreadJoinEdgesMap.end())</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; JoinEdgeSet::const_iterator jit = it-&gt;second.find(&amp;joinEdge);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">if</span>(jit!=it-&gt;second.end())</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">return</span> *jit;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; }</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</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;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00409"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#af1146c3d8e8b8885a1c48701e5b5a27f"> 409</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html">ThreadAPI</a>* <a class="code" href="classSVF_1_1ThreadCallGraph.html#af1146c3d8e8b8885a1c48701e5b5a27f">tdAPI</a>; </div><div class="line"><a name="l00410"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a69b86668a04dc3e5bb85ab4f3f0fce27"> 410</a></span>&#160; CallSiteSet <a class="code" href="classSVF_1_1ThreadCallGraph.html#a69b86668a04dc3e5bb85ab4f3f0fce27">forksites</a>; </div><div class="line"><a name="l00411"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#aab32b67b314b31d67d58efded50e8f45"> 411</a></span>&#160; CallSiteSet <a class="code" href="classSVF_1_1ThreadCallGraph.html#aab32b67b314b31d67d58efded50e8f45">joinsites</a>; </div><div class="line"><a name="l00412"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a6c47e8d4e328bf20d676913f39d842c2"> 412</a></span>&#160; CallSiteSet <a class="code" href="classSVF_1_1ThreadCallGraph.html#a6c47e8d4e328bf20d676913f39d842c2">parForSites</a>; </div><div class="line"><a name="l00413"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a79ba3df9d85eed3c9a55e6797fdcb9b9"> 413</a></span>&#160; CallInstToForkEdgesMap <a class="code" href="classSVF_1_1ThreadCallGraph.html#a79ba3df9d85eed3c9a55e6797fdcb9b9">callinstToThreadForkEdgesMap</a>; </div><div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#af2009968716a3785322e664a712cbb60"> 414</a></span>&#160; CallInstToJoinEdgesMap <a class="code" href="classSVF_1_1ThreadCallGraph.html#af2009968716a3785322e664a712cbb60">callinstToThreadJoinEdgesMap</a>; </div><div class="line"><a name="l00415"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a42a088dba9cda7a7718685f80f52c928"> 415</a></span>&#160; CallInstToParForEdgesMap <a class="code" href="classSVF_1_1ThreadCallGraph.html#a42a088dba9cda7a7718685f80f52c928">callinstToHareParForEdgesMap</a>; </div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;};</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* RCG_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a17b7b3f0bdb4a52166b8509bd90499ba"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a17b7b3f0bdb4a52166b8509bd90499ba">SVF::ThreadCallGraph::getJoinEdgeEnd</a></div><div class="ttdeci">JoinEdgeSet::const_iterator getJoinEdgeEnd(const CallBlockNode *cs) const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00232">ThreadCallGraph.h:232</a></div></div>
70
- <div class="ttc" id="classSVF_1_1ThreadJoinEdge_html_abacb4b5e4badee46f9517b2d84798a3e"><div class="ttname"><a href="classSVF_1_1ThreadJoinEdge.html#abacb4b5e4badee46f9517b2d84798a3e">SVF::ThreadJoinEdge::ThreadJoinEdge</a></div><div class="ttdeci">ThreadJoinEdge(PTACallGraphNode *s, PTACallGraphNode *d, CallSiteID csId)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00091">ThreadCallGraph.h:91</a></div></div>
69
+ <a href="ThreadCallGraph_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">//===- ThreadCallGraph.h -- Call graph considering thread fork/join-----------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * ThreadCallGraph.h</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: Jul 7, 2014</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Authors: Peng Di, Yulei Sui, Ding Ye</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#ifndef RCG_H_</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#define RCG_H_</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PTACallGraph_8h.html">Graphs/PTACallGraph.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointerAnalysisImpl_8h.html">MemoryModel/PointerAnalysisImpl.h</a>&quot;</span></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"> 36</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</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"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">class </span>SVFModule;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">class </span>ThreadAPI;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadForkEdge.html"> 44</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1ThreadForkEdge.html">ThreadForkEdge</a>: <span class="keyword">public</span> <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadForkEdge.html#ae55b3e06b3ed22780d917dbb225561c1"> 49</a></span>&#160; <a class="code" href="classSVF_1_1ThreadForkEdge.html#ae55b3e06b3ed22780d917dbb225561c1">ThreadForkEdge</a>(<a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* s, <a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* d, <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> <a class="code" href="classSVF_1_1PTACallGraphEdge.html#a7488c5125d55e56ec427ef0d8ee88999">csId</a>) :</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a>(s, d, <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a>::<a class="code" href="classSVF_1_1PTACallGraphEdge.html#a9738544725458bb022b8d5f2dbd281f7af32caf15ca19d512b5183bcf0d859cd7">TDForkEdge</a>, csId)</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</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_1ThreadForkEdge.html#a8be8c59b7c254b5b3e7f05913c3df158"> 54</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1ThreadForkEdge.html#a8be8c59b7c254b5b3e7f05913c3df158">~ThreadForkEdge</a>()</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadForkEdge.html#a4d2c3601a3fd530d178ec00ee3e1bc5d"> 60</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadForkEdge.html#a4d2c3601a3fd530d178ec00ee3e1bc5d">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ThreadForkEdge.html">ThreadForkEdge</a>*)</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; {</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</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"><a class="line" href="classSVF_1_1ThreadForkEdge.html#ae40d52a9080627661aad198adf5f411a"> 64</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadForkEdge.html#ae40d52a9080627661aad198adf5f411a">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a> *edge)</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">return</span> edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1PTACallGraphEdge.html#a9738544725458bb022b8d5f2dbd281f7af32caf15ca19d512b5183bcf0d859cd7">PTACallGraphEdge::TDForkEdge</a>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadForkEdge.html#acdc2ff9ad9800847b581e9d27efd3843"> 70</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1ThreadForkEdge.html#acdc2ff9ad9800847b581e9d27efd3843">toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; std::string str;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;ThreadForkEdge &quot;</span>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;CallSite ID: &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1PTACallGraphEdge.html#af9ca9cfffbba3b68838d41be62c914ac">getCallSiteID</a>();</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; srcNode ID &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>() &lt;&lt; <span class="stringliteral">&quot; (fun: &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getFunction()-&gt;getName() &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; dstNode ID &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>() &lt;&lt; <span class="stringliteral">&quot; (fun: &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getFunction()-&gt;getName() &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; }</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadForkEdge.html#ad36696915ee802989b679dd058aaab68"> 80</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericNode.html#a03c6da4a73c47f84f5c5b47252bc339a">GenericNode&lt;PTACallGraphNode, ThreadForkEdge&gt;::GEdgeSetTy</a> <a class="code" href="classSVF_1_1ThreadForkEdge.html#ad36696915ee802989b679dd058aaab68">ForkEdgeSet</a>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;};</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadJoinEdge.html"> 86</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1ThreadJoinEdge.html">ThreadJoinEdge</a>: <span class="keyword">public</span> <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;{</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadJoinEdge.html#abacb4b5e4badee46f9517b2d84798a3e"> 91</a></span>&#160; <a class="code" href="classSVF_1_1ThreadJoinEdge.html#abacb4b5e4badee46f9517b2d84798a3e">ThreadJoinEdge</a>(<a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* s, <a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* d, <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> <a class="code" href="classSVF_1_1PTACallGraphEdge.html#a7488c5125d55e56ec427ef0d8ee88999">csId</a>) :</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a>(s, d, <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a>::<a class="code" href="classSVF_1_1PTACallGraphEdge.html#a9738544725458bb022b8d5f2dbd281f7a2d65840140263a0808f5b9d553a4bff5">TDJoinEdge</a>, csId)</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; }</div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadJoinEdge.html#a0a09e2d148e6d02a5fcb31b8752a3ea5"> 96</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1ThreadJoinEdge.html#a0a09e2d148e6d02a5fcb31b8752a3ea5">~ThreadJoinEdge</a>()</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; {</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadJoinEdge.html#a0fb671c87fecd2fd9c2dab4187a47d37"> 100</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadJoinEdge.html#a0fb671c87fecd2fd9c2dab4187a47d37">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ThreadJoinEdge.html">ThreadJoinEdge</a>*)</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</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_1ThreadJoinEdge.html#ae4095b55b035bbf42d0a75afada4244d"> 104</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadJoinEdge.html#ae4095b55b035bbf42d0a75afada4244d">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a> *edge)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">return</span> edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1PTACallGraphEdge.html#a9738544725458bb022b8d5f2dbd281f7a2d65840140263a0808f5b9d553a4bff5">PTACallGraphEdge::TDJoinEdge</a>;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadJoinEdge.html#a67b68672ef76e0a4f326f7dbbd77bbf7"> 109</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> std::string <a class="code" href="classSVF_1_1ThreadJoinEdge.html#a67b68672ef76e0a4f326f7dbbd77bbf7">toString</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; std::string str;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;ThreadJoinEdge &quot;</span>;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;CallSite ID: &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1PTACallGraphEdge.html#af9ca9cfffbba3b68838d41be62c914ac">getCallSiteID</a>();</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; srcNode ID &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>() &lt;&lt; <span class="stringliteral">&quot; (fun: &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getFunction()-&gt;getName() &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot; dstNode ID &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>() &lt;&lt; <span class="stringliteral">&quot; (fun: &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getFunction()-&gt;getName() &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadJoinEdge.html#acf768ce9925ee75aea865cd9306afda9"> 119</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericNode.html#a03c6da4a73c47f84f5c5b47252bc339a">GenericNode&lt;PTACallGraphNode, ThreadJoinEdge&gt;::GEdgeSetTy</a> <a class="code" href="classSVF_1_1ThreadJoinEdge.html#acf768ce9925ee75aea865cd9306afda9">JoinEdgeSet</a>;</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"> 121</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classSVF_1_1HareParForEdge.html"> 125</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1HareParForEdge.html">HareParForEdge</a>: <span class="keyword">public</span> <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;{</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="classSVF_1_1HareParForEdge.html#a097ccd687d7ca511a4a453dd56b7c665"> 130</a></span>&#160; <a class="code" href="classSVF_1_1HareParForEdge.html#a097ccd687d7ca511a4a453dd56b7c665">HareParForEdge</a>(<a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* s, <a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* d, <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> <a class="code" href="classSVF_1_1PTACallGraphEdge.html#a7488c5125d55e56ec427ef0d8ee88999">csId</a>) :</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a>(s, d, <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a>::<a class="code" href="classSVF_1_1HareParForEdge.html">HareParForEdge</a>, csId)</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; }</div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classSVF_1_1HareParForEdge.html#a6496eb7d7d33d49cc174722034451b1b"> 135</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1HareParForEdge.html#a6496eb7d7d33d49cc174722034451b1b">~HareParForEdge</a>()</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div><div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="classSVF_1_1HareParForEdge.html#ab1dba5dff1e71bce578dc7b0009ba518"> 141</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1HareParForEdge.html#ab1dba5dff1e71bce578dc7b0009ba518">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1HareParForEdge.html">HareParForEdge</a>*)</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classSVF_1_1HareParForEdge.html#af9cc260c4a767f9ebd4a454dff4f88be"> 145</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1HareParForEdge.html#af9cc260c4a767f9ebd4a454dff4f88be">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a> *edge)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">return</span> edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1PTACallGraphEdge.html#a9738544725458bb022b8d5f2dbd281f7a17e0d58fd42d0d493087e698d4ecd838">PTACallGraphEdge::HareParForEdge</a>;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="classSVF_1_1HareParForEdge.html#ac352ec0ba628ac5fe96b1f6d74808cb2"> 151</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1GenericNode.html#a03c6da4a73c47f84f5c5b47252bc339a">GenericNode&lt;PTACallGraphNode, HareParForEdge&gt;::GEdgeSetTy</a> <a class="code" href="classSVF_1_1HareParForEdge.html#ac352ec0ba628ac5fe96b1f6d74808cb2">ParForEdgeSet</a>;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;};</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html"> 158</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>: <span class="keyword">public</span> <a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a></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"> 161</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a57b69bfb5d468bd1a81a55468f845de0"> 162</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const CallICFGNode*&gt;</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a57b69bfb5d468bd1a81a55468f845de0">InstSet</a>;</div><div class="line"><a name="l00163"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a0d560b811f8df1a710c627e1ac100155"> 163</a></span>&#160; <span class="keyword">typedef</span> InstSet <a class="code" href="classSVF_1_1ThreadCallGraph.html#a0d560b811f8df1a710c627e1ac100155">CallSiteSet</a>;</div><div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#af952209ad8f7ae0c0f58c87d97f57ee9"> 164</a></span>&#160; <span class="keyword">typedef</span> std::vector&lt;const Instruction*&gt; <a class="code" href="classSVF_1_1ThreadCallGraph.html#af952209ad8f7ae0c0f58c87d97f57ee9">InstVector</a>;</div><div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a8c6eef5a291bd0c65cc2f816767795f1"> 165</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const Instruction*, InstSet&gt;</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a8c6eef5a291bd0c65cc2f816767795f1">CallToInstMap</a>;</div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a304ba7ef48068fa019c69af5744842cc"> 166</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;CallSiteSet*&gt;</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a304ba7ef48068fa019c69af5744842cc">CtxSet</a>;</div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#aa5efa630056c1db2bb0dadc868752ec8"> 167</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1ThreadForkEdge.html#ad36696915ee802989b679dd058aaab68">ThreadForkEdge::ForkEdgeSet</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#aa5efa630056c1db2bb0dadc868752ec8">ForkEdgeSet</a>;</div><div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#aec88ec07a721b120290a7dde94ae1b51"> 168</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const CallICFGNode*, ForkEdgeSet&gt;</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#aec88ec07a721b120290a7dde94ae1b51">CallInstToForkEdgesMap</a>;</div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#aa9e07204488ec8f0f83f4e218b6ce6bd"> 169</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1ThreadJoinEdge.html#acf768ce9925ee75aea865cd9306afda9">ThreadJoinEdge::JoinEdgeSet</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#aa9e07204488ec8f0f83f4e218b6ce6bd">JoinEdgeSet</a>;</div><div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#ab446ddd20cf46eeb76fcd5789faef521"> 170</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const CallICFGNode*, JoinEdgeSet&gt;</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#ab446ddd20cf46eeb76fcd5789faef521">CallInstToJoinEdgesMap</a>;</div><div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#abc4cdc5b401932bf410d26ab4d58ca33"> 171</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1HareParForEdge.html#ac352ec0ba628ac5fe96b1f6d74808cb2">HareParForEdge::ParForEdgeSet</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#abc4cdc5b401932bf410d26ab4d58ca33">ParForEdgeSet</a>;</div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#aba9d3e04e923cc787ab46a1f7eebb554"> 172</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const CallICFGNode*, ParForEdgeSet&gt;</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#aba9d3e04e923cc787ab46a1f7eebb554">CallInstToParForEdgesMap</a>;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>();</div><div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a7991ee2d70e1c9f1f8bdf5e46d56802c"> 177</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a7991ee2d70e1c9f1f8bdf5e46d56802c">~ThreadCallGraph</a>()</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a4ba42f59f0a6a7ea5b059f6e8df64d89"> 183</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a4ba42f59f0a6a7ea5b059f6e8df64d89">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a> *)</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; }</div><div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a5d991e4511fc909dc170a4b03e71d77e"> 187</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a5d991e4511fc909dc170a4b03e71d77e">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a> *g)</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">return</span> g-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ac6a294ec1c88862c8f7d54000f04e1f7">getKind</a>() == <a class="code" href="classSVF_1_1PTACallGraph.html#a5b1fe2b2314db947cd5e709b7285fe1ca4fe819bb1488afc48b04c1b7bef04bc2">PTACallGraph::ThdCallGraph</a>;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordtype">void</span> updateCallGraph(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordtype">void</span> updateJoinEdge(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> hasThreadForkEdge(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">return</span> callinstToThreadForkEdgesMap.find(cs) != callinstToThreadForkEdgesMap.end();</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"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a8721610a39212613ad55bbd46a35c576"> 206</a></span>&#160; <span class="keyword">inline</span> ForkEdgeSet::const_iterator <a class="code" href="classSVF_1_1ThreadCallGraph.html#a8721610a39212613ad55bbd46a35c576">getForkEdgeBegin</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; CallInstToForkEdgesMap::const_iterator it = callinstToThreadForkEdgesMap.find(cs);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != callinstToThreadForkEdgesMap.end() &amp;&amp; <span class="stringliteral">&quot;call instruction not found&quot;</span>);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">return</span> it-&gt;second.begin();</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; }</div><div class="line"><a name="l00212"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a8351e7ab445cb7faf0209d1fbc63fce1"> 212</a></span>&#160; <span class="keyword">inline</span> ForkEdgeSet::const_iterator <a class="code" href="classSVF_1_1ThreadCallGraph.html#a8351e7ab445cb7faf0209d1fbc63fce1">getForkEdgeEnd</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; CallInstToForkEdgesMap::const_iterator it = callinstToThreadForkEdgesMap.find(cs);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != callinstToThreadForkEdgesMap.end() &amp;&amp; <span class="stringliteral">&quot;call instruction not found&quot;</span>);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">return</span> it-&gt;second.end();</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"> 221</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> hasThreadJoinEdge(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">return</span> callinstToThreadJoinEdgesMap.find(cs) != callinstToThreadJoinEdgesMap.end();</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div><div class="line"><a name="l00226"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#af848d7cb8a9f756ff45cca45adbf3b84"> 226</a></span>&#160; <span class="keyword">inline</span> JoinEdgeSet::const_iterator <a class="code" href="classSVF_1_1ThreadCallGraph.html#af848d7cb8a9f756ff45cca45adbf3b84">getJoinEdgeBegin</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; CallInstToJoinEdgesMap::const_iterator it = callinstToThreadJoinEdgesMap.find(cs);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != callinstToThreadJoinEdgesMap.end() &amp;&amp; <span class="stringliteral">&quot;call instruction does not have a valid callee&quot;</span>);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">return</span> it-&gt;second.begin();</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div><div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a811d7d13c05c71bd816621a9a8765365"> 232</a></span>&#160; <span class="keyword">inline</span> JoinEdgeSet::const_iterator <a class="code" href="classSVF_1_1ThreadCallGraph.html#a811d7d13c05c71bd816621a9a8765365">getJoinEdgeEnd</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)<span class="keyword"> const</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; CallInstToJoinEdgesMap::const_iterator it = callinstToThreadJoinEdgesMap.find(cs);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != callinstToThreadJoinEdgesMap.end() &amp;&amp; <span class="stringliteral">&quot;call instruction does not have a valid callee&quot;</span>);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">return</span> it-&gt;second.end();</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</div><div class="line"><a name="l00238"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#aa8be8d48d680b3f2e61b2d8af5e9eddc"> 238</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#aa8be8d48d680b3f2e61b2d8af5e9eddc">getJoinSites</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* routine, InstSet&amp; csSet)</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; {</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">for</span>(CallInstToJoinEdgesMap::const_iterator it = callinstToThreadJoinEdgesMap.begin(), eit = callinstToThreadJoinEdgesMap.end(); it!=eit; ++it)</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; {</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">for</span>(JoinEdgeSet::const_iterator jit = it-&gt;second.begin(), ejit = it-&gt;second.end(); jit!=ejit; ++jit)</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; {</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">if</span>((*jit)-&gt;getDstNode() == routine)</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; csSet.insert(it-&gt;first);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; }</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; }</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a07d3db6ffe8d75effd6fbc3856c484fe"> 255</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a07d3db6ffe8d75effd6fbc3856c484fe">isForksite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* csInst)</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; {</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">return</span> forksites.find(csInst) != forksites.end();</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"><a class="line" href="classSVF_1_1ThreadCallGraph.html#ac75a38384cda8379c32b4d01d4d5d20a"> 259</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#ac75a38384cda8379c32b4d01d4d5d20a">isJoinsite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* csInst)</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; {</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">return</span> joinsites.find(csInst) != joinsites.end();</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; }</div><div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#ae18f0b3245694145f6d9262ee28c6453"> 263</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#ae18f0b3245694145f6d9262ee28c6453">isParForSite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* csInst)</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; {</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">return</span> parForSites.find(csInst) != parForSites.end();</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;</div><div class="line"><a name="l00271"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a37f2e076713a9aeb0e4313fb05dfb92e"> 271</a></span>&#160; <span class="keyword">inline</span> CallSiteSet::const_iterator <a class="code" href="classSVF_1_1ThreadCallGraph.html#a37f2e076713a9aeb0e4313fb05dfb92e">forksitesBegin</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">return</span> forksites.begin();</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div><div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a1ebbd26c17cff1c1a1bee9caa9a8f825"> 275</a></span>&#160; <span class="keyword">inline</span> CallSiteSet::const_iterator <a class="code" href="classSVF_1_1ThreadCallGraph.html#a1ebbd26c17cff1c1a1bee9caa9a8f825">forksitesEnd</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">return</span> forksites.end();</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;</div><div class="line"><a name="l00283"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a98ecfe14be2d38d292b5919716cdd29d"> 283</a></span>&#160; <span class="keyword">inline</span> CallSiteSet::const_iterator <a class="code" href="classSVF_1_1ThreadCallGraph.html#a98ecfe14be2d38d292b5919716cdd29d">joinsitesBegin</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">return</span> joinsites.begin();</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div><div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a50502f398e5eac9c6da3e26ea6052057"> 287</a></span>&#160; <span class="keyword">inline</span> CallSiteSet::const_iterator <a class="code" href="classSVF_1_1ThreadCallGraph.html#a50502f398e5eac9c6da3e26ea6052057">joinsitesEnd</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">return</span> joinsites.end();</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; }</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;</div><div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a29c74634b17007e5bef6fb48e1f3839f"> 295</a></span>&#160; <span class="keyword">inline</span> CallSiteSet::const_iterator <a class="code" href="classSVF_1_1ThreadCallGraph.html#a29c74634b17007e5bef6fb48e1f3839f">parForSitesBegin</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">return</span> parForSites.begin();</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div><div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a506343bcd23ba71d2db915ff7c58e728"> 299</a></span>&#160; <span class="keyword">inline</span> CallSiteSet::const_iterator <a class="code" href="classSVF_1_1ThreadCallGraph.html#a506343bcd23ba71d2db915ff7c58e728">parForSitesEnd</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">return</span> parForSites.end();</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"> 304</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;</div><div class="line"><a name="l00307"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#aa847760765aae18bcb93b260a881441b"> 307</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#aa847760765aae18bcb93b260a881441b">getNumOfForksite</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">return</span> forksites.size();</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div><div class="line"><a name="l00311"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a733bf08c7a496435ad09a41e6b0343ff"> 311</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a733bf08c7a496435ad09a41e6b0343ff">getNumOfJoinsite</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">return</span> joinsites.size();</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; }</div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#ad883eb92aece6818a3a0a261fa3407ce"> 315</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1ThreadCallGraph.html#ad883eb92aece6818a3a0a261fa3407ce">getNumOfParForSite</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">return</span> parForSites.size();</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"> 320</span>&#160;</div><div class="line"><a name="l00322"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#adcad8524a53baf256cd45503ec568c10"> 322</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ThreadAPI.html">ThreadAPI</a>* <a class="code" href="classSVF_1_1ThreadCallGraph.html#adcad8524a53baf256cd45503ec568c10">getThreadAPI</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">return</span> tdAPI;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; }</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;</div><div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a563ebb1ece0adb4bafe5e14b2a024a91"> 329</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a563ebb1ece0adb4bafe5e14b2a024a91">addForksite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)</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; callinstToThreadForkEdgesMap[cs];</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">return</span> forksites.insert(cs).second;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; }</div><div class="line"><a name="l00334"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a795d504a098634b1725af272b37e46e7"> 334</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a795d504a098634b1725af272b37e46e7">addJoinsite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; callinstToThreadJoinEdgesMap[cs];</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">return</span> joinsites.insert(cs).second;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; }</div><div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a69719915e8c23e3afd6766daea946ffe"> 339</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a69719915e8c23e3afd6766daea946ffe">addParForSite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; {</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; callinstToHareParForEdgesMap[cs];</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordflow">return</span> parForSites.insert(cs).second;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; }</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keywordtype">void</span> addDirectForkEdge(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordtype">void</span> addIndirectForkEdge(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee);</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"> 353</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordtype">void</span> addDirectJoinEdge(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs,<span class="keyword">const</span> CallSiteSet&amp; forksite);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordtype">void</span> addDirectParForEdge(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordtype">void</span> addIndirectParForEdge(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;</div><div class="line"><a name="l00365"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#ab20211a66583387f0da4769bee65e300"> 365</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#ab20211a66583387f0da4769bee65e300">addThreadForkEdgeSetMap</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs, <a class="code" href="classSVF_1_1ThreadForkEdge.html">ThreadForkEdge</a>* edge)</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; {</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">if</span>(edge!=<span class="keyword">nullptr</span>)</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; callinstToThreadForkEdgesMap[cs].insert(edge);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; callinstToCallGraphEdgesMap[cs].insert(edge);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; }</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; }</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"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a7100a68c27a965927975e26bb06e061c"> 375</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#a7100a68c27a965927975e26bb06e061c">addThreadJoinEdgeSetMap</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs, <a class="code" href="classSVF_1_1ThreadJoinEdge.html">ThreadJoinEdge</a>* edge)</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; {</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">if</span>(edge!=<span class="keyword">nullptr</span>)</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; callinstToThreadJoinEdgesMap[cs].insert(edge);</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; callinstToCallGraphEdgesMap[cs].insert(edge);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; }</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;</div><div class="line"><a name="l00385"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#aae1caa7231ab9436db98403d6a175149"> 385</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html#aae1caa7231ab9436db98403d6a175149">addHareParForEdgeSetMap</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs, <a class="code" href="classSVF_1_1HareParForEdge.html">HareParForEdge</a>* edge)</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">if</span>(edge!=<span class="keyword">nullptr</span>)</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; {</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; callinstToHareParForEdgesMap[cs].insert(edge);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; callinstToCallGraphEdgesMap[cs].insert(edge);</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; }</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;</div><div class="line"><a name="l00395"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a98214e970762f43d0e9ad719961b4021"> 395</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ThreadJoinEdge.html">ThreadJoinEdge</a>* <a class="code" href="classSVF_1_1ThreadCallGraph.html#a98214e970762f43d0e9ad719961b4021">hasThreadJoinEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* call, <a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* joinFunNode, <a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* threadRoutineFunNode, <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> <a class="code" href="classSVF_1_1PTACallGraphEdge.html#a7488c5125d55e56ec427ef0d8ee88999">csId</a>)<span class="keyword"> const</span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <a class="code" href="classSVF_1_1ThreadJoinEdge.html">ThreadJoinEdge</a> joinEdge(joinFunNode,threadRoutineFunNode, csId);</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; CallInstToJoinEdgesMap::const_iterator it = callinstToThreadJoinEdgesMap.find(call);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">if</span>(it != callinstToThreadJoinEdgesMap.end())</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; JoinEdgeSet::const_iterator jit = it-&gt;second.find(&amp;joinEdge);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">if</span>(jit!=it-&gt;second.end())</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">return</span> *jit;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; }</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</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;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00409"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#af1146c3d8e8b8885a1c48701e5b5a27f"> 409</a></span>&#160; <a class="code" href="classSVF_1_1ThreadAPI.html">ThreadAPI</a>* <a class="code" href="classSVF_1_1ThreadCallGraph.html#af1146c3d8e8b8885a1c48701e5b5a27f">tdAPI</a>; </div><div class="line"><a name="l00410"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a69b86668a04dc3e5bb85ab4f3f0fce27"> 410</a></span>&#160; CallSiteSet <a class="code" href="classSVF_1_1ThreadCallGraph.html#a69b86668a04dc3e5bb85ab4f3f0fce27">forksites</a>; </div><div class="line"><a name="l00411"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#aab32b67b314b31d67d58efded50e8f45"> 411</a></span>&#160; CallSiteSet <a class="code" href="classSVF_1_1ThreadCallGraph.html#aab32b67b314b31d67d58efded50e8f45">joinsites</a>; </div><div class="line"><a name="l00412"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a6c47e8d4e328bf20d676913f39d842c2"> 412</a></span>&#160; CallSiteSet <a class="code" href="classSVF_1_1ThreadCallGraph.html#a6c47e8d4e328bf20d676913f39d842c2">parForSites</a>; </div><div class="line"><a name="l00413"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a79ba3df9d85eed3c9a55e6797fdcb9b9"> 413</a></span>&#160; CallInstToForkEdgesMap <a class="code" href="classSVF_1_1ThreadCallGraph.html#a79ba3df9d85eed3c9a55e6797fdcb9b9">callinstToThreadForkEdgesMap</a>; </div><div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#af2009968716a3785322e664a712cbb60"> 414</a></span>&#160; CallInstToJoinEdgesMap <a class="code" href="classSVF_1_1ThreadCallGraph.html#af2009968716a3785322e664a712cbb60">callinstToThreadJoinEdgesMap</a>; </div><div class="line"><a name="l00415"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadCallGraph.html#a42a088dba9cda7a7718685f80f52c928"> 415</a></span>&#160; CallInstToParForEdgesMap <a class="code" href="classSVF_1_1ThreadCallGraph.html#a42a088dba9cda7a7718685f80f52c928">callinstToHareParForEdgesMap</a>; </div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;};</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* RCG_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1ThreadJoinEdge_html_abacb4b5e4badee46f9517b2d84798a3e"><div class="ttname"><a href="classSVF_1_1ThreadJoinEdge.html#abacb4b5e4badee46f9517b2d84798a3e">SVF::ThreadJoinEdge::ThreadJoinEdge</a></div><div class="ttdeci">ThreadJoinEdge(PTACallGraphNode *s, PTACallGraphNode *d, CallSiteID csId)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00091">ThreadCallGraph.h:91</a></div></div>
71
70
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_aa847760765aae18bcb93b260a881441b"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#aa847760765aae18bcb93b260a881441b">SVF::ThreadCallGraph::getNumOfForksite</a></div><div class="ttdeci">u32_t getNumOfForksite() const</div><div class="ttdoc">Num of fork/join sites. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00307">ThreadCallGraph.h:307</a></div></div>
72
71
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a506343bcd23ba71d2db915ff7c58e728"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a506343bcd23ba71d2db915ff7c58e728">SVF::ThreadCallGraph::parForSitesEnd</a></div><div class="ttdeci">CallSiteSet::const_iterator parForSitesEnd() const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00299">ThreadCallGraph.h:299</a></div></div>
73
72
  <div class="ttc" id="classSVF_1_1GenericEdge_html_abe8525c542def8162b094c169a01993b"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">SVF::GenericEdge::getEdgeKind</a></div><div class="ttdeci">GEdgeKind getEdgeKind() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00081">GenericGraph.h:81</a></div></div>
74
73
  <div class="ttc" id="classSVF_1_1PTACallGraph_html_a5b1fe2b2314db947cd5e709b7285fe1ca4fe819bb1488afc48b04c1b7bef04bc2"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html#a5b1fe2b2314db947cd5e709b7285fe1ca4fe819bb1488afc48b04c1b7bef04bc2">SVF::PTACallGraph::ThdCallGraph</a></div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00235">PTACallGraph.h:235</a></div></div>
74
+ <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a7100a68c27a965927975e26bb06e061c"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a7100a68c27a965927975e26bb06e061c">SVF::ThreadCallGraph::addThreadJoinEdgeSetMap</a></div><div class="ttdeci">void addThreadJoinEdgeSetMap(const CallICFGNode *cs, ThreadJoinEdge *edge)</div><div class="ttdoc">map call instruction to its CallGraphEdge map </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00375">ThreadCallGraph.h:375</a></div></div>
75
75
  <div class="ttc" id="classSVF_1_1HareParForEdge_html_a6496eb7d7d33d49cc174722034451b1b"><div class="ttname"><a href="classSVF_1_1HareParForEdge.html#a6496eb7d7d33d49cc174722034451b1b">SVF::HareParForEdge::~HareParForEdge</a></div><div class="ttdeci">virtual ~HareParForEdge()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00135">ThreadCallGraph.h:135</a></div></div>
76
+ <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a795d504a098634b1725af272b37e46e7"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a795d504a098634b1725af272b37e46e7">SVF::ThreadCallGraph::addJoinsite</a></div><div class="ttdeci">bool addJoinsite(const CallICFGNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00334">ThreadCallGraph.h:334</a></div></div>
77
+ <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a8721610a39212613ad55bbd46a35c576"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a8721610a39212613ad55bbd46a35c576">SVF::ThreadCallGraph::getForkEdgeBegin</a></div><div class="ttdeci">ForkEdgeSet::const_iterator getForkEdgeBegin(const CallICFGNode *cs) const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00206">ThreadCallGraph.h:206</a></div></div>
76
78
  <div class="ttc" id="classSVF_1_1HareParForEdge_html"><div class="ttname"><a href="classSVF_1_1HareParForEdge.html">SVF::HareParForEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00125">ThreadCallGraph.h:125</a></div></div>
77
79
  <div class="ttc" id="classSVF_1_1PTACallGraphEdge_html_af9ca9cfffbba3b68838d41be62c914ac"><div class="ttname"><a href="classSVF_1_1PTACallGraphEdge.html#af9ca9cfffbba3b68838d41be62c914ac">SVF::PTACallGraphEdge::getCallSiteID</a></div><div class="ttdeci">CallSiteID getCallSiteID() const</div><div class="ttdoc">Get direct and indirect calls. </div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00083">PTACallGraph.h:83</a></div></div>
80
+ <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_ae18f0b3245694145f6d9262ee28c6453"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#ae18f0b3245694145f6d9262ee28c6453">SVF::ThreadCallGraph::isParForSite</a></div><div class="ttdeci">bool isParForSite(const CallICFGNode *csInst)</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00263">ThreadCallGraph.h:263</a></div></div>
78
81
  <div class="ttc" id="classSVF_1_1GenericEdge_html_ad9edb45e74ae675d9da82f5acf02d56e"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">SVF::GenericEdge::getDstID</a></div><div class="ttdeci">NodeID getDstID() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00077">GenericGraph.h:77</a></div></div>
79
- <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_ad6215527f01188f8e65fe8616e92dbc2"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#ad6215527f01188f8e65fe8616e92dbc2">SVF::ThreadCallGraph::getJoinEdgeBegin</a></div><div class="ttdeci">JoinEdgeSet::const_iterator getJoinEdgeBegin(const CallBlockNode *cs) const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00226">ThreadCallGraph.h:226</a></div></div>
80
82
  <div class="ttc" id="PTACallGraph_8h_html"><div class="ttname"><a href="PTACallGraph_8h.html">PTACallGraph.h</a></div></div>
81
- <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a70a03bcaa6386ef39188acb6b2aa9d5a"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a70a03bcaa6386ef39188acb6b2aa9d5a">SVF::ThreadCallGraph::addThreadJoinEdgeSetMap</a></div><div class="ttdeci">void addThreadJoinEdgeSetMap(const CallBlockNode *cs, ThreadJoinEdge *edge)</div><div class="ttdoc">map call instruction to its CallGraphEdge map </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00375">ThreadCallGraph.h:375</a></div></div>
83
+ <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a98214e970762f43d0e9ad719961b4021"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a98214e970762f43d0e9ad719961b4021">SVF::ThreadCallGraph::hasThreadJoinEdge</a></div><div class="ttdeci">ThreadJoinEdge * hasThreadJoinEdge(const CallICFGNode *call, PTACallGraphNode *joinFunNode, PTACallGraphNode *threadRoutineFunNode, CallSiteID csId) const</div><div class="ttdoc">has thread join edge </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00395">ThreadCallGraph.h:395</a></div></div>
82
84
  <div class="ttc" id="classSVF_1_1ThreadForkEdge_html_a4d2c3601a3fd530d178ec00ee3e1bc5d"><div class="ttname"><a href="classSVF_1_1ThreadForkEdge.html#a4d2c3601a3fd530d178ec00ee3e1bc5d">SVF::ThreadForkEdge::classof</a></div><div class="ttdeci">static bool classof(const ThreadForkEdge *)</div><div class="ttdoc">ClassOf. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00060">ThreadCallGraph.h:60</a></div></div>
83
85
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a1ebbd26c17cff1c1a1bee9caa9a8f825"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a1ebbd26c17cff1c1a1bee9caa9a8f825">SVF::ThreadCallGraph::forksitesEnd</a></div><div class="ttdeci">CallSiteSet::const_iterator forksitesEnd() const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00275">ThreadCallGraph.h:275</a></div></div>
84
86
  <div class="ttc" id="classSVF_1_1PTACallGraphEdge_html_a9738544725458bb022b8d5f2dbd281f7a17e0d58fd42d0d493087e698d4ecd838"><div class="ttname"><a href="classSVF_1_1PTACallGraphEdge.html#a9738544725458bb022b8d5f2dbd281f7a17e0d58fd42d0d493087e698d4ecd838">SVF::PTACallGraphEdge::HareParForEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00058">PTACallGraph.h:58</a></div></div>
85
87
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
88
+ <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a563ebb1ece0adb4bafe5e14b2a024a91"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a563ebb1ece0adb4bafe5e14b2a024a91">SVF::ThreadCallGraph::addForksite</a></div><div class="ttdeci">bool addForksite(const CallICFGNode *cs)</div><div class="ttdoc">Add fork sites which directly or indirectly create a thread. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00329">ThreadCallGraph.h:329</a></div></div>
89
+ <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a811d7d13c05c71bd816621a9a8765365"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a811d7d13c05c71bd816621a9a8765365">SVF::ThreadCallGraph::getJoinEdgeEnd</a></div><div class="ttdeci">JoinEdgeSet::const_iterator getJoinEdgeEnd(const CallICFGNode *cs) const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00232">ThreadCallGraph.h:232</a></div></div>
86
90
  <div class="ttc" id="classSVF_1_1GenericEdge_html_ae6792506a0150a9400d635eceab7f9e7"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">SVF::GenericEdge::getSrcID</a></div><div class="ttdeci">NodeID getSrcID() const</div><div class="ttdoc">get methods of the components </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00073">GenericGraph.h:73</a></div></div>
87
91
  <div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00233">BasicTypes.h:233</a></div></div>
88
- <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a10f3f07059d0534e391093372fcd708d"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a10f3f07059d0534e391093372fcd708d">SVF::ThreadCallGraph::hasThreadJoinEdge</a></div><div class="ttdeci">ThreadJoinEdge * hasThreadJoinEdge(const CallBlockNode *call, PTACallGraphNode *joinFunNode, PTACallGraphNode *threadRoutineFunNode, CallSiteID csId) const</div><div class="ttdoc">has thread join edge </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00395">ThreadCallGraph.h:395</a></div></div>
89
92
  <div class="ttc" id="classSVF_1_1ThreadForkEdge_html_ae40d52a9080627661aad198adf5f411a"><div class="ttname"><a href="classSVF_1_1ThreadForkEdge.html#ae40d52a9080627661aad198adf5f411a">SVF::ThreadForkEdge::classof</a></div><div class="ttdeci">static bool classof(const PTACallGraphEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00064">ThreadCallGraph.h:64</a></div></div>
90
93
  <div class="ttc" id="classSVF_1_1ThreadForkEdge_html_a8be8c59b7c254b5b3e7f05913c3df158"><div class="ttname"><a href="classSVF_1_1ThreadForkEdge.html#a8be8c59b7c254b5b3e7f05913c3df158">SVF::ThreadForkEdge::~ThreadForkEdge</a></div><div class="ttdeci">virtual ~ThreadForkEdge()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00054">ThreadCallGraph.h:54</a></div></div>
94
+ <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a8351e7ab445cb7faf0209d1fbc63fce1"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a8351e7ab445cb7faf0209d1fbc63fce1">SVF::ThreadCallGraph::getForkEdgeEnd</a></div><div class="ttdeci">ForkEdgeSet::const_iterator getForkEdgeEnd(const CallICFGNode *cs) const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00212">ThreadCallGraph.h:212</a></div></div>
91
95
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_aa8be8d48d680b3f2e61b2d8af5e9eddc"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#aa8be8d48d680b3f2e61b2d8af5e9eddc">SVF::ThreadCallGraph::getJoinSites</a></div><div class="ttdeci">void getJoinSites(const PTACallGraphNode *routine, InstSet &amp;csSet)</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00238">ThreadCallGraph.h:238</a></div></div>
92
- <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_ac6eb68444968f7bfc3e1e16099454cab"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#ac6eb68444968f7bfc3e1e16099454cab">SVF::ThreadCallGraph::CallInstToParForEdgesMap</a></div><div class="ttdeci">Map&lt; const CallBlockNode *, ParForEdgeSet &gt; CallInstToParForEdgesMap</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00172">ThreadCallGraph.h:172</a></div></div>
93
96
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_ad883eb92aece6818a3a0a261fa3407ce"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#ad883eb92aece6818a3a0a261fa3407ce">SVF::ThreadCallGraph::getNumOfParForSite</a></div><div class="ttdeci">u32_t getNumOfParForSite() const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00315">ThreadCallGraph.h:315</a></div></div>
94
97
  <div class="ttc" id="classSVF_1_1ThreadForkEdge_html_acdc2ff9ad9800847b581e9d27efd3843"><div class="ttname"><a href="classSVF_1_1ThreadForkEdge.html#acdc2ff9ad9800847b581e9d27efd3843">SVF::ThreadForkEdge::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00070">ThreadCallGraph.h:70</a></div></div>
98
+ <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_af848d7cb8a9f756ff45cca45adbf3b84"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#af848d7cb8a9f756ff45cca45adbf3b84">SVF::ThreadCallGraph::getJoinEdgeBegin</a></div><div class="ttdeci">JoinEdgeSet::const_iterator getJoinEdgeBegin(const CallICFGNode *cs) const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00226">ThreadCallGraph.h:226</a></div></div>
95
99
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_af1146c3d8e8b8885a1c48701e5b5a27f"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#af1146c3d8e8b8885a1c48701e5b5a27f">SVF::ThreadCallGraph::tdAPI</a></div><div class="ttdeci">ThreadAPI * tdAPI</div><div class="ttdoc">Thread API. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00409">ThreadCallGraph.h:409</a></div></div>
96
100
  <div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map&lt; Key, Value, Hash, KeyEqual, Allocator &gt; Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00100">SVFBasicTypes.h:100</a></div></div>
97
101
  <div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
98
- <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_aa5c29ac668359942a9bc31cacd0cd9c4"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#aa5c29ac668359942a9bc31cacd0cd9c4">SVF::ThreadCallGraph::isForksite</a></div><div class="ttdeci">bool isForksite(const CallBlockNode *csInst)</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00255">ThreadCallGraph.h:255</a></div></div>
99
102
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a37f2e076713a9aeb0e4313fb05dfb92e"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a37f2e076713a9aeb0e4313fb05dfb92e">SVF::ThreadCallGraph::forksitesBegin</a></div><div class="ttdeci">CallSiteSet::const_iterator forksitesBegin() const</div><div class="ttdoc">Fork sites iterators. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00271">ThreadCallGraph.h:271</a></div></div>
103
+ <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a57b69bfb5d468bd1a81a55468f845de0"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a57b69bfb5d468bd1a81a55468f845de0">SVF::ThreadCallGraph::InstSet</a></div><div class="ttdeci">Set&lt; const CallICFGNode * &gt; InstSet</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00162">ThreadCallGraph.h:162</a></div></div>
100
104
  <div class="ttc" id="classSVF_1_1ThreadJoinEdge_html_a0fb671c87fecd2fd9c2dab4187a47d37"><div class="ttname"><a href="classSVF_1_1ThreadJoinEdge.html#a0fb671c87fecd2fd9c2dab4187a47d37">SVF::ThreadJoinEdge::classof</a></div><div class="ttdeci">static bool classof(const ThreadJoinEdge *)</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00100">ThreadCallGraph.h:100</a></div></div>
101
105
  <div class="ttc" id="classSVF_1_1ThreadForkEdge_html_ad36696915ee802989b679dd058aaab68"><div class="ttname"><a href="classSVF_1_1ThreadForkEdge.html#ad36696915ee802989b679dd058aaab68">SVF::ThreadForkEdge::ForkEdgeSet</a></div><div class="ttdeci">GenericNode&lt; PTACallGraphNode, ThreadForkEdge &gt;::GEdgeSetTy ForkEdgeSet</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00080">ThreadCallGraph.h:80</a></div></div>
102
106
  <div class="ttc" id="classSVF_1_1ThreadForkEdge_html"><div class="ttname"><a href="classSVF_1_1ThreadForkEdge.html">SVF::ThreadForkEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00044">ThreadCallGraph.h:44</a></div></div>
107
+ <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_ab20211a66583387f0da4769bee65e300"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#ab20211a66583387f0da4769bee65e300">SVF::ThreadCallGraph::addThreadForkEdgeSetMap</a></div><div class="ttdeci">void addThreadForkEdgeSetMap(const CallICFGNode *cs, ThreadForkEdge *edge)</div><div class="ttdoc">map call instruction to its CallGraphEdge map </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00365">ThreadCallGraph.h:365</a></div></div>
103
108
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_adcad8524a53baf256cd45503ec568c10"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#adcad8524a53baf256cd45503ec568c10">SVF::ThreadCallGraph::getThreadAPI</a></div><div class="ttdeci">ThreadAPI * getThreadAPI() const</div><div class="ttdoc">Thread API. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00322">ThreadCallGraph.h:322</a></div></div>
104
- <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_ae72e4e29bfda892f059f719454f6fcd2"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#ae72e4e29bfda892f059f719454f6fcd2">SVF::ThreadCallGraph::addJoinsite</a></div><div class="ttdeci">bool addJoinsite(const CallBlockNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00334">ThreadCallGraph.h:334</a></div></div>
105
- <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_ac9dde4936d04321a17656af1af1108da"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#ac9dde4936d04321a17656af1af1108da">SVF::ThreadCallGraph::isJoinsite</a></div><div class="ttdeci">bool isJoinsite(const CallBlockNode *csInst)</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00259">ThreadCallGraph.h:259</a></div></div>
106
109
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a6c47e8d4e328bf20d676913f39d842c2"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a6c47e8d4e328bf20d676913f39d842c2">SVF::ThreadCallGraph::parForSites</a></div><div class="ttdeci">CallSiteSet parForSites</div><div class="ttdoc">all parallel for sites </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00412">ThreadCallGraph.h:412</a></div></div>
107
- <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a2f24d314b211151182bee38b61731749"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a2f24d314b211151182bee38b61731749">SVF::ThreadCallGraph::CallInstToJoinEdgesMap</a></div><div class="ttdeci">Map&lt; const CallBlockNode *, JoinEdgeSet &gt; CallInstToJoinEdgesMap</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00170">ThreadCallGraph.h:170</a></div></div>
108
110
  <div class="ttc" id="classSVF_1_1GenericNode_html_a03c6da4a73c47f84f5c5b47252bc339a"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a03c6da4a73c47f84f5c5b47252bc339a">SVF::GenericNode::GEdgeSetTy</a></div><div class="ttdeci">OrderedSet&lt; EdgeType *, typename EdgeType::equalGEdge &gt; GEdgeSetTy</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00136">GenericGraph.h:136</a></div></div>
109
111
  <div class="ttc" id="classSVF_1_1GenericEdge_html_aeaa31a2c8479e831b36ce2e2582ceb86"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">SVF::GenericEdge::getDstNode</a></div><div class="ttdeci">NodeType * getDstNode() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00089">GenericGraph.h:89</a></div></div>
110
112
  <div class="ttc" id="namespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set&lt; Key, Hash, KeyEqual, Allocator &gt; Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00095">SVFBasicTypes.h:95</a></div></div>
@@ -113,6 +115,7 @@ $(function() {
113
115
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_af2009968716a3785322e664a712cbb60"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#af2009968716a3785322e664a712cbb60">SVF::ThreadCallGraph::callinstToThreadJoinEdgesMap</a></div><div class="ttdeci">CallInstToJoinEdgesMap callinstToThreadJoinEdgesMap</div><div class="ttdoc">Map a call instruction to its corresponding join edges. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00414">ThreadCallGraph.h:414</a></div></div>
114
116
  <div class="ttc" id="classSVF_1_1PTACallGraph_html"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html">SVF::PTACallGraph</a></div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00218">PTACallGraph.h:218</a></div></div>
115
117
  <div class="ttc" id="classSVF_1_1PTACallGraph_html_ac6a294ec1c88862c8f7d54000f04e1f7"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html#ac6a294ec1c88862c8f7d54000f04e1f7">SVF::PTACallGraph::getKind</a></div><div class="ttdeci">CGEK getKind() const</div><div class="ttdoc">Return type of this callgraph. </div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00273">PTACallGraph.h:273</a></div></div>
118
+ <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_aae1caa7231ab9436db98403d6a175149"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#aae1caa7231ab9436db98403d6a175149">SVF::ThreadCallGraph::addHareParForEdgeSetMap</a></div><div class="ttdeci">void addHareParForEdgeSetMap(const CallICFGNode *cs, HareParForEdge *edge)</div><div class="ttdoc">map call instruction to its CallGraphEdge map </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00385">ThreadCallGraph.h:385</a></div></div>
116
119
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a733bf08c7a496435ad09a41e6b0343ff"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a733bf08c7a496435ad09a41e6b0343ff">SVF::ThreadCallGraph::getNumOfJoinsite</a></div><div class="ttdeci">u32_t getNumOfJoinsite() const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00311">ThreadCallGraph.h:311</a></div></div>
117
120
  <div class="ttc" id="namespaceSVF_html_a726981481ac082dcda3e4921416b65a0"><div class="ttname"><a href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">SVF::raw_string_ostream</a></div><div class="ttdeci">llvm::raw_string_ostream raw_string_ostream</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
118
121
  <div class="ttc" id="classSVF_1_1ThreadAPI_html"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html">SVF::ThreadAPI</a></div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00043">ThreadAPI.h:43</a></div></div>
@@ -120,24 +123,23 @@ $(function() {
120
123
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a98ecfe14be2d38d292b5919716cdd29d"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a98ecfe14be2d38d292b5919716cdd29d">SVF::ThreadCallGraph::joinsitesBegin</a></div><div class="ttdeci">CallSiteSet::const_iterator joinsitesBegin() const</div><div class="ttdoc">Join sites iterators. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00283">ThreadCallGraph.h:283</a></div></div>
121
124
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a79ba3df9d85eed3c9a55e6797fdcb9b9"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a79ba3df9d85eed3c9a55e6797fdcb9b9">SVF::ThreadCallGraph::callinstToThreadForkEdgesMap</a></div><div class="ttdeci">CallInstToForkEdgesMap callinstToThreadForkEdgesMap</div><div class="ttdoc">Map a call instruction to its corresponding fork edges. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00413">ThreadCallGraph.h:413</a></div></div>
122
125
  <div class="ttc" id="namespaceSVF_html_a03d88a0302bcd253387690f13f693f64"><div class="ttname"><a href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">SVF::CallSiteID</a></div><div class="ttdeci">unsigned CallSiteID</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00083">SVFBasicTypes.h:83</a></div></div>
123
- <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_af33e1701215e9818b22f11789746821e"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#af33e1701215e9818b22f11789746821e">SVF::ThreadCallGraph::getForkEdgeBegin</a></div><div class="ttdeci">ForkEdgeSet::const_iterator getForkEdgeBegin(const CallBlockNode *cs) const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00206">ThreadCallGraph.h:206</a></div></div>
124
- <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a43513b641e4f05ec165db78e3ac55fef"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a43513b641e4f05ec165db78e3ac55fef">SVF::ThreadCallGraph::getForkEdgeEnd</a></div><div class="ttdeci">ForkEdgeSet::const_iterator getForkEdgeEnd(const CallBlockNode *cs) const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00212">ThreadCallGraph.h:212</a></div></div>
126
+ <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a69719915e8c23e3afd6766daea946ffe"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a69719915e8c23e3afd6766daea946ffe">SVF::ThreadCallGraph::addParForSite</a></div><div class="ttdeci">bool addParForSite(const CallICFGNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00339">ThreadCallGraph.h:339</a></div></div>
125
127
  <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#l00158">ThreadCallGraph.h:158</a></div></div>
126
128
  <div class="ttc" id="classSVF_1_1PTACallGraphEdge_html_a7488c5125d55e56ec427ef0d8ee88999"><div class="ttname"><a href="classSVF_1_1PTACallGraphEdge.html#a7488c5125d55e56ec427ef0d8ee88999">SVF::PTACallGraphEdge::csId</a></div><div class="ttdeci">CallSiteID csId</div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00065">PTACallGraph.h:65</a></div></div>
127
129
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a304ba7ef48068fa019c69af5744842cc"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a304ba7ef48068fa019c69af5744842cc">SVF::ThreadCallGraph::CtxSet</a></div><div class="ttdeci">Set&lt; CallSiteSet * &gt; CtxSet</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00166">ThreadCallGraph.h:166</a></div></div>
128
130
  <div class="ttc" id="classSVF_1_1GenericEdge_html_ab47ca533c415841ef75456cbad439589"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">SVF::GenericEdge::getSrcNode</a></div><div class="ttdeci">NodeType * getSrcNode() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00085">GenericGraph.h:85</a></div></div>
129
131
  <div class="ttc" id="PointerAnalysisImpl_8h_html"><div class="ttname"><a href="PointerAnalysisImpl_8h.html">PointerAnalysisImpl.h</a></div></div>
130
- <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a845258d0d19de3dda573521a34dbf705"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a845258d0d19de3dda573521a34dbf705">SVF::ThreadCallGraph::addHareParForEdgeSetMap</a></div><div class="ttdeci">void addHareParForEdgeSetMap(const CallBlockNode *cs, HareParForEdge *edge)</div><div class="ttdoc">map call instruction to its CallGraphEdge map </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00385">ThreadCallGraph.h:385</a></div></div>
131
132
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_af952209ad8f7ae0c0f58c87d97f57ee9"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#af952209ad8f7ae0c0f58c87d97f57ee9">SVF::ThreadCallGraph::InstVector</a></div><div class="ttdeci">std::vector&lt; const Instruction * &gt; InstVector</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00164">ThreadCallGraph.h:164</a></div></div>
132
- <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a29d3e4d720f61b4c29fee9691cedff96"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a29d3e4d720f61b4c29fee9691cedff96">SVF::ThreadCallGraph::addThreadForkEdgeSetMap</a></div><div class="ttdeci">void addThreadForkEdgeSetMap(const CallBlockNode *cs, ThreadForkEdge *edge)</div><div class="ttdoc">map call instruction to its CallGraphEdge map </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00365">ThreadCallGraph.h:365</a></div></div>
133
- <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_ad48fad1fec75346c9eb79bbd6e8caee4"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#ad48fad1fec75346c9eb79bbd6e8caee4">SVF::ThreadCallGraph::InstSet</a></div><div class="ttdeci">Set&lt; const CallBlockNode * &gt; InstSet</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00162">ThreadCallGraph.h:162</a></div></div>
133
+ <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_ac75a38384cda8379c32b4d01d4d5d20a"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#ac75a38384cda8379c32b4d01d4d5d20a">SVF::ThreadCallGraph::isJoinsite</a></div><div class="ttdeci">bool isJoinsite(const CallICFGNode *csInst)</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00259">ThreadCallGraph.h:259</a></div></div>
134
134
  <div class="ttc" id="classSVF_1_1ThreadJoinEdge_html_acf768ce9925ee75aea865cd9306afda9"><div class="ttname"><a href="classSVF_1_1ThreadJoinEdge.html#acf768ce9925ee75aea865cd9306afda9">SVF::ThreadJoinEdge::JoinEdgeSet</a></div><div class="ttdeci">GenericNode&lt; PTACallGraphNode, ThreadJoinEdge &gt;::GEdgeSetTy JoinEdgeSet</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00119">ThreadCallGraph.h:119</a></div></div>
135
135
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_aab32b67b314b31d67d58efded50e8f45"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#aab32b67b314b31d67d58efded50e8f45">SVF::ThreadCallGraph::joinsites</a></div><div class="ttdeci">CallSiteSet joinsites</div><div class="ttdoc">all thread fork sites </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00411">ThreadCallGraph.h:411</a></div></div>
136
+ <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_aba9d3e04e923cc787ab46a1f7eebb554"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#aba9d3e04e923cc787ab46a1f7eebb554">SVF::ThreadCallGraph::CallInstToParForEdgesMap</a></div><div class="ttdeci">Map&lt; const CallICFGNode *, ParForEdgeSet &gt; CallInstToParForEdgesMap</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00172">ThreadCallGraph.h:172</a></div></div>
137
+ <div class="ttc" id="classSVF_1_1CallICFGNode_html"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00364">ICFGNode.h:364</a></div></div>
136
138
  <div class="ttc" id="classSVF_1_1PTACallGraphEdge_html_a9738544725458bb022b8d5f2dbd281f7af32caf15ca19d512b5183bcf0d859cd7"><div class="ttname"><a href="classSVF_1_1PTACallGraphEdge.html#a9738544725458bb022b8d5f2dbd281f7af32caf15ca19d512b5183bcf0d859cd7">SVF::PTACallGraphEdge::TDForkEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00058">PTACallGraph.h:58</a></div></div>
137
- <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_ad0d6585b7d26cd4597466a79e2fedacd"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#ad0d6585b7d26cd4597466a79e2fedacd">SVF::ThreadCallGraph::CallInstToForkEdgesMap</a></div><div class="ttdeci">Map&lt; const CallBlockNode *, ForkEdgeSet &gt; CallInstToForkEdgesMap</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00168">ThreadCallGraph.h:168</a></div></div>
138
139
  <div class="ttc" id="classSVF_1_1PTACallGraphEdge_html_a9738544725458bb022b8d5f2dbd281f7a2d65840140263a0808f5b9d553a4bff5"><div class="ttname"><a href="classSVF_1_1PTACallGraphEdge.html#a9738544725458bb022b8d5f2dbd281f7a2d65840140263a0808f5b9d553a4bff5">SVF::PTACallGraphEdge::TDJoinEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00058">PTACallGraph.h:58</a></div></div>
139
140
  <div class="ttc" id="classSVF_1_1ThreadJoinEdge_html_ae4095b55b035bbf42d0a75afada4244d"><div class="ttname"><a href="classSVF_1_1ThreadJoinEdge.html#ae4095b55b035bbf42d0a75afada4244d">SVF::ThreadJoinEdge::classof</a></div><div class="ttdeci">static bool classof(const PTACallGraphEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00104">ThreadCallGraph.h:104</a></div></div>
140
141
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a0d560b811f8df1a710c627e1ac100155"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a0d560b811f8df1a710c627e1ac100155">SVF::ThreadCallGraph::CallSiteSet</a></div><div class="ttdeci">InstSet CallSiteSet</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00163">ThreadCallGraph.h:163</a></div></div>
142
+ <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a07d3db6ffe8d75effd6fbc3856c484fe"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a07d3db6ffe8d75effd6fbc3856c484fe">SVF::ThreadCallGraph::isForksite</a></div><div class="ttdeci">bool isForksite(const CallICFGNode *csInst)</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00255">ThreadCallGraph.h:255</a></div></div>
141
143
  <div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="ContextDDA_8h_source.html#l00016">ContextDDA.h:16</a></div></div>
142
144
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a50502f398e5eac9c6da3e26ea6052057"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a50502f398e5eac9c6da3e26ea6052057">SVF::ThreadCallGraph::joinsitesEnd</a></div><div class="ttdeci">CallSiteSet::const_iterator joinsitesEnd() const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00287">ThreadCallGraph.h:287</a></div></div>
143
145
  <div class="ttc" id="classSVF_1_1ThreadJoinEdge_html_a67b68672ef76e0a4f326f7dbbd77bbf7"><div class="ttname"><a href="classSVF_1_1ThreadJoinEdge.html#a67b68672ef76e0a4f326f7dbbd77bbf7">SVF::ThreadJoinEdge::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00109">ThreadCallGraph.h:109</a></div></div>
@@ -146,21 +148,19 @@ $(function() {
146
148
  <div class="ttc" id="classSVF_1_1ThreadJoinEdge_html"><div class="ttname"><a href="classSVF_1_1ThreadJoinEdge.html">SVF::ThreadJoinEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00086">ThreadCallGraph.h:86</a></div></div>
147
149
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a42a088dba9cda7a7718685f80f52c928"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a42a088dba9cda7a7718685f80f52c928">SVF::ThreadCallGraph::callinstToHareParForEdgesMap</a></div><div class="ttdeci">CallInstToParForEdgesMap callinstToHareParForEdgesMap</div><div class="ttdoc">Map a call instruction to its corresponding hare_parallel_for edges. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00415">ThreadCallGraph.h:415</a></div></div>
148
150
  <div class="ttc" id="classSVF_1_1ThreadJoinEdge_html_a0a09e2d148e6d02a5fcb31b8752a3ea5"><div class="ttname"><a href="classSVF_1_1ThreadJoinEdge.html#a0a09e2d148e6d02a5fcb31b8752a3ea5">SVF::ThreadJoinEdge::~ThreadJoinEdge</a></div><div class="ttdeci">virtual ~ThreadJoinEdge()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00096">ThreadCallGraph.h:96</a></div></div>
151
+ <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_ab446ddd20cf46eeb76fcd5789faef521"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#ab446ddd20cf46eeb76fcd5789faef521">SVF::ThreadCallGraph::CallInstToJoinEdgesMap</a></div><div class="ttdeci">Map&lt; const CallICFGNode *, JoinEdgeSet &gt; CallInstToJoinEdgesMap</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00170">ThreadCallGraph.h:170</a></div></div>
149
152
  <div class="ttc" id="classSVF_1_1ThreadForkEdge_html_ae55b3e06b3ed22780d917dbb225561c1"><div class="ttname"><a href="classSVF_1_1ThreadForkEdge.html#ae55b3e06b3ed22780d917dbb225561c1">SVF::ThreadForkEdge::ThreadForkEdge</a></div><div class="ttdeci">ThreadForkEdge(PTACallGraphNode *s, PTACallGraphNode *d, CallSiteID csId)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00049">ThreadCallGraph.h:49</a></div></div>
150
- <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_af5ad00c7a5362aa288bddf4824601ab8"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#af5ad00c7a5362aa288bddf4824601ab8">SVF::ThreadCallGraph::isParForSite</a></div><div class="ttdeci">bool isParForSite(const CallBlockNode *csInst)</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00263">ThreadCallGraph.h:263</a></div></div>
151
153
  <div class="ttc" id="classSVF_1_1PTACallGraphNode_html"><div class="ttname"><a href="classSVF_1_1PTACallGraphNode.html">SVF::PTACallGraphNode</a></div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00174">PTACallGraph.h:174</a></div></div>
152
- <div class="ttc" id="classSVF_1_1CallBlockNode_html"><div class="ttname"><a href="classSVF_1_1CallBlockNode.html">SVF::CallBlockNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00364">ICFGNode.h:364</a></div></div>
153
154
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a29c74634b17007e5bef6fb48e1f3839f"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a29c74634b17007e5bef6fb48e1f3839f">SVF::ThreadCallGraph::parForSitesBegin</a></div><div class="ttdeci">CallSiteSet::const_iterator parForSitesBegin() const</div><div class="ttdoc">hare_parallel_for sites iterators </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00295">ThreadCallGraph.h:295</a></div></div>
154
- <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a6e2ebab64fd01e40e7100162fe544b04"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a6e2ebab64fd01e40e7100162fe544b04">SVF::ThreadCallGraph::addForksite</a></div><div class="ttdeci">bool addForksite(const CallBlockNode *cs)</div><div class="ttdoc">Add fork sites which directly or indirectly create a thread. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00329">ThreadCallGraph.h:329</a></div></div>
155
155
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_aa5efa630056c1db2bb0dadc868752ec8"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#aa5efa630056c1db2bb0dadc868752ec8">SVF::ThreadCallGraph::ForkEdgeSet</a></div><div class="ttdeci">ThreadForkEdge::ForkEdgeSet ForkEdgeSet</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00167">ThreadCallGraph.h:167</a></div></div>
156
156
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a8c6eef5a291bd0c65cc2f816767795f1"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a8c6eef5a291bd0c65cc2f816767795f1">SVF::ThreadCallGraph::CallToInstMap</a></div><div class="ttdeci">Map&lt; const Instruction *, InstSet &gt; CallToInstMap</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00165">ThreadCallGraph.h:165</a></div></div>
157
- <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a9daa0817e1f88a2478d7094646c72e13"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a9daa0817e1f88a2478d7094646c72e13">SVF::ThreadCallGraph::addParForSite</a></div><div class="ttdeci">bool addParForSite(const CallBlockNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00339">ThreadCallGraph.h:339</a></div></div>
158
157
  <div class="ttc" id="classSVF_1_1HareParForEdge_html_ab1dba5dff1e71bce578dc7b0009ba518"><div class="ttname"><a href="classSVF_1_1HareParForEdge.html#ab1dba5dff1e71bce578dc7b0009ba518">SVF::HareParForEdge::classof</a></div><div class="ttdeci">static bool classof(const HareParForEdge *)</div><div class="ttdoc">ClassOf. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00141">ThreadCallGraph.h:141</a></div></div>
159
158
  <div class="ttc" id="classSVF_1_1HareParForEdge_html_a097ccd687d7ca511a4a453dd56b7c665"><div class="ttname"><a href="classSVF_1_1HareParForEdge.html#a097ccd687d7ca511a4a453dd56b7c665">SVF::HareParForEdge::HareParForEdge</a></div><div class="ttdeci">HareParForEdge(PTACallGraphNode *s, PTACallGraphNode *d, CallSiteID csId)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00130">ThreadCallGraph.h:130</a></div></div>
160
159
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a69b86668a04dc3e5bb85ab4f3f0fce27"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a69b86668a04dc3e5bb85ab4f3f0fce27">SVF::ThreadCallGraph::forksites</a></div><div class="ttdeci">CallSiteSet forksites</div><div class="ttdoc">all thread fork sites </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00410">ThreadCallGraph.h:410</a></div></div>
161
160
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a7991ee2d70e1c9f1f8bdf5e46d56802c"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a7991ee2d70e1c9f1f8bdf5e46d56802c">SVF::ThreadCallGraph::~ThreadCallGraph</a></div><div class="ttdeci">virtual ~ThreadCallGraph()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00177">ThreadCallGraph.h:177</a></div></div>
162
161
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_aa9e07204488ec8f0f83f4e218b6ce6bd"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#aa9e07204488ec8f0f83f4e218b6ce6bd">SVF::ThreadCallGraph::JoinEdgeSet</a></div><div class="ttdeci">ThreadJoinEdge::JoinEdgeSet JoinEdgeSet</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00169">ThreadCallGraph.h:169</a></div></div>
163
162
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html">SVF::PointerAnalysis</a></div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00057">PointerAnalysis.h:57</a></div></div>
163
+ <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_aec88ec07a721b120290a7dde94ae1b51"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#aec88ec07a721b120290a7dde94ae1b51">SVF::ThreadCallGraph::CallInstToForkEdgesMap</a></div><div class="ttdeci">Map&lt; const CallICFGNode *, ForkEdgeSet &gt; CallInstToForkEdgesMap</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00168">ThreadCallGraph.h:168</a></div></div>
164
164
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a4ba42f59f0a6a7ea5b059f6e8df64d89"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a4ba42f59f0a6a7ea5b059f6e8df64d89">SVF::ThreadCallGraph::classof</a></div><div class="ttdeci">static bool classof(const ThreadCallGraph *)</div><div class="ttdoc">ClassOf. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00183">ThreadCallGraph.h:183</a></div></div>
165
165
  </div><!-- fragment --></div><!-- contents -->
166
166
  <!-- start footer part -->