svf-tools 1.0.424 → 1.0.427

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 (584) hide show
  1. package/SVF-doxygen/html/html/AbstractPointsToDS_8h_source.html +1 -1
  2. package/SVF-doxygen/html/html/AndersenLCD_8cpp_source.html +2 -2
  3. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +4 -4
  4. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +7 -7
  5. package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +5 -5
  6. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +7 -7
  7. package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +1 -1
  8. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +11 -11
  9. package/SVF-doxygen/html/html/Andersen_8h_source.html +9 -9
  10. package/SVF-doxygen/html/html/Annotator_8h_source.html +3 -3
  11. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp.html +10 -9
  12. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +9 -8
  13. package/SVF-doxygen/html/html/BreakConstantExpr_8h_source.html +6 -6
  14. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +21 -21
  15. package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +5 -5
  16. package/SVF-doxygen/html/html/CHG_8cpp.html +3 -3
  17. package/SVF-doxygen/html/html/CHG_8cpp_source.html +11 -11
  18. package/SVF-doxygen/html/html/CHG_8h_source.html +6 -6
  19. package/SVF-doxygen/html/html/CPPUtil_8cpp.html +2 -2
  20. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +25 -25
  21. package/SVF-doxygen/html/html/CPPUtil_8h_source.html +4 -4
  22. package/SVF-doxygen/html/html/CSC_8cpp_source.html +3 -3
  23. package/SVF-doxygen/html/html/CSC_8h_source.html +4 -4
  24. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +5 -5
  25. package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +6 -6
  26. package/SVF-doxygen/html/html/Conditions_8cpp_source.html +4 -4
  27. package/SVF-doxygen/html/html/Conditions_8h_source.html +5 -5
  28. package/SVF-doxygen/html/html/ConsGEdge_8h_source.html +2 -2
  29. package/SVF-doxygen/html/html/ConsGNode_8h_source.html +2 -2
  30. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +3 -3
  31. package/SVF-doxygen/html/html/ConsG_8h_source.html +7 -7
  32. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +19 -19
  33. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +13 -13
  34. package/SVF-doxygen/html/html/CoreBitVector_8cpp_source.html +3 -3
  35. package/SVF-doxygen/html/html/CoreBitVector_8h_source.html +4 -4
  36. package/SVF-doxygen/html/html/CxtStmt_8h_source.html +6 -6
  37. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +29 -29
  38. package/SVF-doxygen/html/html/DCHG_8h_source.html +14 -14
  39. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +6 -6
  40. package/SVF-doxygen/html/html/DDAClient_8h_source.html +3 -3
  41. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +9 -9
  42. package/SVF-doxygen/html/html/DDAPass_8h_source.html +10 -11
  43. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +5 -5
  44. package/SVF-doxygen/html/html/DDAStat_8h_source.html +3 -3
  45. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +13 -13
  46. package/SVF-doxygen/html/html/DPItem_8h_source.html +6 -6
  47. package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +7 -7
  48. package/SVF-doxygen/html/html/DataFlowUtil_8h_source.html +11 -11
  49. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +4 -4
  50. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +7 -7
  51. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +4 -4
  52. package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
  53. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +5 -5
  54. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +6 -6
  55. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +8 -8
  56. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp.html +3 -3
  57. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +20 -20
  58. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +8 -8
  59. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +19 -19
  60. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +9 -9
  61. package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h_source.html +3 -3
  62. package/SVF-doxygen/html/html/GenericGraph_8h_source.html +5 -5
  63. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +3 -3
  64. package/SVF-doxygen/html/html/GraphPrinter_8h_source.html +2 -2
  65. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +10 -10
  66. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +3 -3
  67. package/SVF-doxygen/html/html/ICFGEdge_8h_source.html +7 -7
  68. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +5 -5
  69. package/SVF-doxygen/html/html/ICFGStat_8h_source.html +1 -1
  70. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +7 -7
  71. package/SVF-doxygen/html/html/ICFG_8h_source.html +5 -5
  72. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +11 -11
  73. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +3 -3
  74. package/SVF-doxygen/html/html/IRGraph_8h_source.html +22 -22
  75. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +14 -14
  76. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +9 -9
  77. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +27 -27
  78. package/SVF-doxygen/html/html/LLVMUtil_8h.html +11 -9
  79. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +21 -18
  80. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
  81. package/SVF-doxygen/html/html/LeakChecker_8h_source.html +3 -3
  82. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +12 -12
  83. package/SVF-doxygen/html/html/LocationSet_8h_source.html +6 -6
  84. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +12 -12
  85. package/SVF-doxygen/html/html/LockAnalysis_8h_source.html +11 -11
  86. package/SVF-doxygen/html/html/LockResultValidator_8cpp.html +1 -0
  87. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +22 -21
  88. package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +10 -10
  89. package/SVF-doxygen/html/html/MHP_8cpp.html +8 -7
  90. package/SVF-doxygen/html/html/MHP_8cpp_source.html +63 -62
  91. package/SVF-doxygen/html/html/MHP_8h_source.html +37 -37
  92. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +4 -4
  93. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +9 -9
  94. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +7 -7
  95. package/SVF-doxygen/html/html/MTAResultValidator_8cpp.html +1 -0
  96. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +41 -40
  97. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +29 -29
  98. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +8 -8
  99. package/SVF-doxygen/html/html/MTAStat_8h_source.html +1 -1
  100. package/SVF-doxygen/html/html/MTA_8cpp_source.html +8 -8
  101. package/SVF-doxygen/html/html/MTA_8h_source.html +8 -8
  102. package/SVF-doxygen/html/html/MemPartition_8cpp_source.html +2 -2
  103. package/SVF-doxygen/html/html/MemPartition_8h_source.html +4 -4
  104. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +16 -16
  105. package/SVF-doxygen/html/html/MemRegion_8h_source.html +8 -8
  106. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +11 -11
  107. package/SVF-doxygen/html/html/MemSSA_8h_source.html +8 -8
  108. package/SVF-doxygen/html/html/MutablePointsToDS_8h_source.html +3 -3
  109. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +4 -4
  110. package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +3 -3
  111. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +2 -2
  112. package/SVF-doxygen/html/html/OfflineConsG_8h_source.html +2 -2
  113. package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +3 -3
  114. package/SVF-doxygen/html/html/PAGBuilderFromFile_8h_source.html +1 -1
  115. package/SVF-doxygen/html/html/PCG_8cpp_source.html +10 -10
  116. package/SVF-doxygen/html/html/PCG_8h_source.html +4 -4
  117. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +4 -4
  118. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +7 -7
  119. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +25 -28
  120. package/SVF-doxygen/html/html/PTAStat_8h_source.html +2 -2
  121. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +32 -32
  122. package/SVF-doxygen/html/html/PathCondAllocator_8h.html +1 -0
  123. package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +56 -55
  124. package/SVF-doxygen/html/html/PathDPItem_8h_source.html +2 -2
  125. package/SVF-doxygen/html/html/PersistentPointsToCache_8h_source.html +3 -3
  126. package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +2 -2
  127. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +11 -12
  128. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +56 -58
  129. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +31 -31
  130. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +44 -45
  131. package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +5 -5
  132. package/SVF-doxygen/html/html/PointsTo_8h_source.html +5 -5
  133. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +6 -6
  134. package/SVF-doxygen/html/html/ProgSlice_8h_source.html +14 -14
  135. package/SVF-doxygen/html/html/SCC_8h_source.html +3 -3
  136. package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h.html +554 -11
  137. package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h_source.html +37 -7
  138. package/SVF-doxygen/html/html/SVFBasicTypes_8h.html +7 -13
  139. package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +38 -41
  140. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +4 -4
  141. package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +2 -2
  142. package/SVF-doxygen/html/html/SVFGEdge_8h_source.html +3 -3
  143. package/SVF-doxygen/html/html/SVFGNode_8h_source.html +4 -4
  144. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +11 -11
  145. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +15 -15
  146. package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +3 -3
  147. package/SVF-doxygen/html/html/SVFGStat_8h_source.html +4 -4
  148. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +15 -15
  149. package/SVF-doxygen/html/html/SVFG_8h_source.html +16 -16
  150. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +63 -62
  151. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +48 -48
  152. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +10 -10
  153. package/SVF-doxygen/html/html/SVFIR_8h_source.html +19 -19
  154. package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +1 -1
  155. package/SVF-doxygen/html/html/SVFModule_8h_source.html +5 -5
  156. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +5 -5
  157. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +9 -9
  158. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +15 -15
  159. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +16 -16
  160. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +3 -3
  161. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +15 -15
  162. package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +7 -7
  163. package/SVF-doxygen/html/html/SaberAnnotator_8h_source.html +3 -3
  164. package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +2 -2
  165. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +8 -8
  166. package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +2 -2
  167. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +2 -2
  168. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +5 -5
  169. package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +1 -1
  170. package/SVF-doxygen/html/html/Steensgaard_8h_source.html +2 -2
  171. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +58 -58
  172. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +7 -7
  173. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +103 -104
  174. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +135 -139
  175. package/SVF-doxygen/html/html/TCT_8cpp_source.html +19 -19
  176. package/SVF-doxygen/html/html/TCT_8h_source.html +18 -18
  177. package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +5 -5
  178. package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +6 -6
  179. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +11 -11
  180. package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +6 -6
  181. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +4 -4
  182. package/SVF-doxygen/html/html/TypeAnalysis_8h_source.html +1 -1
  183. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +25 -25
  184. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +6 -6
  185. package/SVF-doxygen/html/html/Util_2BasicTypes_8h.html +0 -69
  186. package/SVF-doxygen/html/html/Util_2BasicTypes_8h_source.html +119 -153
  187. package/SVF-doxygen/html/html/VFGEdge_8h_source.html +2 -2
  188. package/SVF-doxygen/html/html/VFGNode_8h_source.html +165 -170
  189. package/SVF-doxygen/html/html/VFG_8cpp_source.html +19 -19
  190. package/SVF-doxygen/html/html/VFG_8h_source.html +22 -22
  191. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +6 -6
  192. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +7 -7
  193. package/SVF-doxygen/html/html/VersionedFlowSensitive_8h_source.html +4 -4
  194. package/SVF-doxygen/html/html/WPAFSSolver_8h_source.html +2 -2
  195. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +11 -11
  196. package/SVF-doxygen/html/html/WPAPass_8h_source.html +12 -12
  197. package/SVF-doxygen/html/html/WPASolver_8h_source.html +3 -3
  198. package/SVF-doxygen/html/html/WPAStat_8h_source.html +1 -1
  199. package/SVF-doxygen/html/html/WorkList_8h_source.html +1 -1
  200. package/SVF-doxygen/html/html/annotated.html +2 -3
  201. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
  202. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
  203. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +23 -23
  204. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +25 -25
  205. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +1 -1
  206. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +13 -13
  207. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +2 -2
  208. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +266 -267
  209. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +20 -23
  210. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +226 -227
  211. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +1 -4
  212. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +279 -280
  213. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +0 -3
  214. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +288 -289
  215. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +0 -3
  216. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +276 -277
  217. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +1 -4
  218. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +275 -276
  219. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +5 -8
  220. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +287 -288
  221. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +7 -10
  222. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +9 -9
  223. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +274 -275
  224. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +1 -4
  225. package/SVF-doxygen/html/html/classSVF_1_1Annotator.html +1 -1
  226. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +17 -17
  227. package/SVF-doxygen/html/html/classSVF_1_1BDDManager.html +3 -3
  228. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +173 -174
  229. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +24 -71
  230. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +1 -1
  231. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +33 -36
  232. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +6 -6
  233. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +24 -26
  234. package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +7 -7
  235. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +41 -41
  236. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +7 -7
  237. package/SVF-doxygen/html/html/classSVF_1_1CSC.html +4 -4
  238. package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +1 -1
  239. package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge.html +1 -1
  240. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +4 -4
  241. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +1 -1
  242. package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +1 -1
  243. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  244. package/SVF-doxygen/html/html/classSVF_1_1CallSite.html +41 -41
  245. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.html +1 -1
  246. package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.html +1 -1
  247. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +1 -1
  248. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +1 -1
  249. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +25 -28
  250. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl-members.html +166 -167
  251. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +120 -168
  252. package/SVF-doxygen/html/html/classSVF_1_1CondStdSet.html +2 -2
  253. package/SVF-doxygen/html/html/classSVF_1_1CondVar.html +1 -1
  254. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +4 -4
  255. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +8 -8
  256. package/SVF-doxygen/html/html/classSVF_1_1ContextCond.html +7 -7
  257. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA-members.html +266 -267
  258. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +31 -34
  259. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +1 -1
  260. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +2 -2
  261. package/SVF-doxygen/html/html/classSVF_1_1CoreBitVector.html +4 -4
  262. package/SVF-doxygen/html/html/classSVF_1_1CoreBitVector_1_1CoreBitVectorIterator-members.html +1 -1
  263. package/SVF-doxygen/html/html/classSVF_1_1CoreBitVector_1_1CoreBitVectorIterator.html +6 -6
  264. package/SVF-doxygen/html/html/classSVF_1_1CxtProc.html +7 -7
  265. package/SVF-doxygen/html/html/classSVF_1_1CxtStmt.html +7 -7
  266. package/SVF-doxygen/html/html/classSVF_1_1CxtThread.html +7 -7
  267. package/SVF-doxygen/html/html/classSVF_1_1CxtThreadProc.html +5 -5
  268. package/SVF-doxygen/html/html/classSVF_1_1CxtThreadStmt.html +5 -5
  269. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +64 -64
  270. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +1 -1
  271. package/SVF-doxygen/html/html/classSVF_1_1DDAPass-members.html +19 -20
  272. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +28 -72
  273. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +5 -5
  274. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +3 -3
  275. package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge.html +1 -1
  276. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +4 -4
  277. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +1 -1
  278. package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +1 -1
  279. package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode.html +1 -1
  280. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +1 -1
  281. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +293 -294
  282. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +0 -3
  283. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +259 -260
  284. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +10 -13
  285. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +284 -285
  286. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +43 -46
  287. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +12 -12
  288. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +324 -325
  289. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +25 -28
  290. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +65 -65
  291. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +1 -1
  292. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +1 -1
  293. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +29 -29
  294. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +28 -28
  295. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +2 -2
  296. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +2 -2
  297. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +3 -3
  298. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +6 -6
  299. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +1 -1
  300. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +13 -13
  301. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +2 -2
  302. package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.html +1 -1
  303. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +3 -3
  304. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +15 -15
  305. package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +1 -1
  306. package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +1 -1
  307. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +3 -3
  308. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +9 -9
  309. package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +17 -17
  310. package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +1 -1
  311. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +2 -2
  312. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
  313. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +37 -37
  314. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge-members.html +1 -1
  315. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +9 -9
  316. package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge.html +1 -1
  317. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +4 -4
  318. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +1 -1
  319. package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +1 -1
  320. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +1 -1
  321. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +23 -23
  322. package/SVF-doxygen/html/html/classSVF_1_1IteratedDominanceFrontier.html +3 -3
  323. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +26 -26
  324. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +3 -3
  325. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +1 -1
  326. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +2 -2
  327. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +15 -15
  328. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +53 -53
  329. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +37 -37
  330. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +119 -119
  331. package/SVF-doxygen/html/html/classSVF_1_1MHPValidator.html +7 -7
  332. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +31 -31
  333. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +1 -1
  334. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +1 -1
  335. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +8 -8
  336. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +13 -13
  337. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +104 -104
  338. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +25 -25
  339. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +9 -9
  340. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +88 -88
  341. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +25 -25
  342. package/SVF-doxygen/html/html/classSVF_1_1MemSSADF.html +1 -1
  343. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +1 -1
  344. package/SVF-doxygen/html/html/classSVF_1_1MergeFunctionRets.html +3 -3
  345. package/SVF-doxygen/html/html/classSVF_1_1MutableDFPTData.html +1 -1
  346. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +2 -2
  347. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +22 -22
  348. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +99 -99
  349. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +2 -2
  350. package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +1 -1
  351. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +3 -3
  352. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +21 -21
  353. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +33 -33
  354. package/SVF-doxygen/html/html/classSVF_1_1PTACFInfoBuilder.html +7 -7
  355. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +5 -5
  356. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +1 -1
  357. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +2 -2
  358. package/SVF-doxygen/html/html/classSVF_1_1PTAStat-members.html +1 -1
  359. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +34 -49
  360. package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +174 -174
  361. package/SVF-doxygen/html/html/classSVF_1_1PersistentDFPTData.html +3 -3
  362. package/SVF-doxygen/html/html/classSVF_1_1PersistentDiffPTData.html +3 -3
  363. package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +6 -6
  364. package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache.html +6 -6
  365. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +2 -2
  366. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +129 -130
  367. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +107 -150
  368. package/SVF-doxygen/html/html/classSVF_1_1PointsTo.html +6 -6
  369. package/SVF-doxygen/html/html/classSVF_1_1PointsTo_1_1PointsToIterator-members.html +1 -1
  370. package/SVF-doxygen/html/html/classSVF_1_1PointsTo_1_1PointsToIterator.html +7 -7
  371. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +25 -25
  372. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +9 -9
  373. package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +1 -1
  374. package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge.html +1 -1
  375. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +1 -1
  376. package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +1 -1
  377. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  378. package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +1 -1
  379. package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +3 -3
  380. package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +29 -29
  381. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +11 -11
  382. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
  383. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +15 -15
  384. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +5 -5
  385. package/SVF-doxygen/html/html/classSVF_1_1SVFGlobal.html +3 -3
  386. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +21 -21
  387. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +180 -180
  388. package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +1 -1
  389. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +5 -5
  390. package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +5 -5
  391. package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +10 -10
  392. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +8 -8
  393. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +1 -1
  394. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +4 -4
  395. package/SVF-doxygen/html/html/classSVF_1_1StInfo.html +39 -39
  396. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +240 -241
  397. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +1 -4
  398. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +1 -1
  399. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +1 -1
  400. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +2 -2
  401. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +104 -104
  402. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +5 -7
  403. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +215 -281
  404. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +57 -57
  405. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
  406. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
  407. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +5 -5
  408. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +21 -21
  409. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +3 -3
  410. package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +1 -1
  411. package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +1 -1
  412. package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +1 -1
  413. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +232 -233
  414. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +6 -9
  415. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +33 -33
  416. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +1 -1
  417. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +35 -37
  418. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +28 -28
  419. package/SVF-doxygen/html/html/classSVF_1_1VFGEdge.html +1 -1
  420. package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +2 -2
  421. package/SVF-doxygen/html/html/classSVF_1_1VFPathCond.html +5 -5
  422. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +1 -1
  423. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +1 -1
  424. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +337 -338
  425. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +12 -15
  426. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +8 -8
  427. package/SVF-doxygen/html/html/classSVF_1_1WPAFSSolver.html +2 -2
  428. package/SVF-doxygen/html/html/classSVF_1_1WPAMinimumSolver.html +2 -2
  429. package/SVF-doxygen/html/html/classSVF_1_1WPAPass-members.html +19 -20
  430. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +24 -68
  431. package/SVF-doxygen/html/html/classSVF_1_1WPASCCSolver.html +2 -2
  432. package/SVF-doxygen/html/html/classSVF_1_1WPASolver.html +1 -1
  433. package/SVF-doxygen/html/html/classSVF_1_1Z3Manager.html +4 -4
  434. package/SVF-doxygen/html/html/classes.html +96 -97
  435. package/SVF-doxygen/html/html/classllvm_1_1GraphPrinter.html +1 -1
  436. package/SVF-doxygen/html/html/classllvm_1_1generic__bridge__gep__type__iterator.html +3 -3
  437. package/SVF-doxygen/html/html/functions_a.html +4 -4
  438. package/SVF-doxygen/html/html/functions_b.html +1 -1
  439. package/SVF-doxygen/html/html/functions_d.html +0 -3
  440. package/SVF-doxygen/html/html/functions_f.html +3 -3
  441. package/SVF-doxygen/html/html/functions_func.html +7 -7
  442. package/SVF-doxygen/html/html/functions_func_b.html +1 -1
  443. package/SVF-doxygen/html/html/functions_func_g.html +9 -12
  444. package/SVF-doxygen/html/html/functions_func_o.html +3 -4
  445. package/SVF-doxygen/html/html/functions_g.html +13 -16
  446. package/SVF-doxygen/html/html/functions_l.html +6 -6
  447. package/SVF-doxygen/html/html/functions_n.html +3 -3
  448. package/SVF-doxygen/html/html/functions_o.html +13 -12
  449. package/SVF-doxygen/html/html/functions_p.html +4 -4
  450. package/SVF-doxygen/html/html/functions_r.html +3 -3
  451. package/SVF-doxygen/html/html/functions_s.html +6 -4
  452. package/SVF-doxygen/html/html/functions_t.html +3 -3
  453. package/SVF-doxygen/html/html/functions_v.html +6 -6
  454. package/SVF-doxygen/html/html/functions_vars_d.html +0 -3
  455. package/SVF-doxygen/html/html/functions_w.html +5 -9
  456. package/SVF-doxygen/html/html/globals.html +6 -0
  457. package/SVF-doxygen/html/html/globals_b.html +6 -0
  458. package/SVF-doxygen/html/html/globals_c.html +118 -100
  459. package/SVF-doxygen/html/html/globals_f.html +9 -3
  460. package/SVF-doxygen/html/html/globals_g.html +3 -0
  461. package/SVF-doxygen/html/html/globals_i.html +14 -2
  462. package/SVF-doxygen/html/html/globals_l.html +3 -0
  463. package/SVF-doxygen/html/html/globals_m.html +17 -14
  464. package/SVF-doxygen/html/html/globals_p.html +3 -0
  465. package/SVF-doxygen/html/html/globals_r.html +3 -0
  466. package/SVF-doxygen/html/html/globals_s.html +27 -22
  467. package/SVF-doxygen/html/html/globals_type.html +114 -0
  468. package/SVF-doxygen/html/html/globals_u.html +8 -2
  469. package/SVF-doxygen/html/html/globals_v.html +12 -0
  470. package/SVF-doxygen/html/html/hierarchy.html +149 -150
  471. package/SVF-doxygen/html/html/menudata.js +25 -19
  472. package/SVF-doxygen/html/html/namespaceSVF.html +128 -779
  473. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +128 -95
  474. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +46 -46
  475. package/SVF-doxygen/html/html/namespacemembers.html +0 -6
  476. package/SVF-doxygen/html/html/namespacemembers_b.html +2 -8
  477. package/SVF-doxygen/html/html/namespacemembers_c.html +2 -26
  478. package/SVF-doxygen/html/html/namespacemembers_f.html +0 -6
  479. package/SVF-doxygen/html/html/namespacemembers_func.html +6 -3
  480. package/SVF-doxygen/html/html/namespacemembers_g.html +3 -3
  481. package/SVF-doxygen/html/html/namespacemembers_i.html +10 -22
  482. package/SVF-doxygen/html/html/namespacemembers_l.html +0 -3
  483. package/SVF-doxygen/html/html/namespacemembers_m.html +0 -3
  484. package/SVF-doxygen/html/html/namespacemembers_p.html +0 -6
  485. package/SVF-doxygen/html/html/namespacemembers_r.html +1 -4
  486. package/SVF-doxygen/html/html/namespacemembers_s.html +1 -19
  487. package/SVF-doxygen/html/html/namespacemembers_type.html +560 -4
  488. package/SVF-doxygen/html/html/namespacemembers_u.html +0 -6
  489. package/SVF-doxygen/html/html/namespacemembers_v.html +0 -12
  490. package/SVF-doxygen/html/html/search/all_1.js +3 -3
  491. package/SVF-doxygen/html/html/search/all_10.js +8 -9
  492. package/SVF-doxygen/html/html/search/all_12.js +3 -3
  493. package/SVF-doxygen/html/html/search/all_13.js +10 -13
  494. package/SVF-doxygen/html/html/search/all_14.js +3 -3
  495. package/SVF-doxygen/html/html/search/all_15.js +2 -2
  496. package/SVF-doxygen/html/html/search/all_16.js +6 -6
  497. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  498. package/SVF-doxygen/html/html/search/all_2.js +3 -3
  499. package/SVF-doxygen/html/html/search/all_3.js +7 -9
  500. package/SVF-doxygen/html/html/search/all_4.js +0 -1
  501. package/SVF-doxygen/html/html/search/all_6.js +3 -3
  502. package/SVF-doxygen/html/html/search/all_7.js +3 -3
  503. package/SVF-doxygen/html/html/search/all_8.js +0 -1
  504. package/SVF-doxygen/html/html/search/all_9.js +4 -4
  505. package/SVF-doxygen/html/html/search/all_c.js +3 -3
  506. package/SVF-doxygen/html/html/search/all_d.js +2 -2
  507. package/SVF-doxygen/html/html/search/all_e.js +3 -3
  508. package/SVF-doxygen/html/html/search/all_f.js +3 -3
  509. package/SVF-doxygen/html/html/search/classes_7.js +0 -1
  510. package/SVF-doxygen/html/html/search/functions_0.js +1 -1
  511. package/SVF-doxygen/html/html/search/functions_1.js +1 -1
  512. package/SVF-doxygen/html/html/search/functions_10.js +1 -1
  513. package/SVF-doxygen/html/html/search/functions_6.js +2 -2
  514. package/SVF-doxygen/html/html/search/functions_d.js +2 -2
  515. package/SVF-doxygen/html/html/search/typedefs_0.js +2 -2
  516. package/SVF-doxygen/html/html/search/typedefs_1.js +2 -2
  517. package/SVF-doxygen/html/html/search/typedefs_10.js +1 -1
  518. package/SVF-doxygen/html/html/search/typedefs_11.js +4 -7
  519. package/SVF-doxygen/html/html/search/typedefs_13.js +2 -2
  520. package/SVF-doxygen/html/html/search/typedefs_14.js +4 -4
  521. package/SVF-doxygen/html/html/search/typedefs_2.js +7 -9
  522. package/SVF-doxygen/html/html/search/typedefs_5.js +2 -2
  523. package/SVF-doxygen/html/html/search/typedefs_6.js +1 -1
  524. package/SVF-doxygen/html/html/search/typedefs_8.js +4 -4
  525. package/SVF-doxygen/html/html/search/typedefs_b.js +1 -1
  526. package/SVF-doxygen/html/html/search/typedefs_c.js +1 -1
  527. package/SVF-doxygen/html/html/search/typedefs_f.js +1 -2
  528. package/SVF-doxygen/html/html/search/variables_14.js +1 -1
  529. package/SVF-doxygen/html/html/search/variables_4.js +0 -1
  530. package/SVF-doxygen/html/html/search/variables_e.js +2 -2
  531. package/SVF-doxygen/html/html/structSVF_1_1Hash.html +3 -3
  532. package/SVF-doxygen/html/html/structSVF_1_1Hash_3_01std_1_1pair_3_01S_00_01T_01_4_01_4.html +5 -5
  533. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  534. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +2 -2
  535. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +2 -2
  536. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +1 -1
  537. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PTACallGraph_01_5_01_4.html +2 -2
  538. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +19 -19
  539. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +19 -19
  540. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CallSite_01_4.html +3 -3
  541. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CondStdSet_3_01Element_01_4_01_4.html +1 -1
  542. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtDPItem_01_4.html +1 -1
  543. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtProc_01_4.html +1 -1
  544. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtStmtDPItem_3_01LocCond_01_4_01_4.html +1 -1
  545. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtStmt_01_4.html +1 -1
  546. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1LocationSet_01_4.html +1 -1
  547. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1StmtDPItem_3_01LocCond_01_4_01_4.html +1 -1
  548. package/SVF-doxygen/html/html/structstd_1_1hash_3_01llvm_1_1SparseBitVector_3_01N_01_4_01_4.html +3 -3
  549. package/SVF-doxygen/html/html/structstd_1_1hash_3_01std_1_1vector_3_01T_01_4_01_4.html +3 -3
  550. package/SVF-doxygen/html/html/svf-ex_8cpp.html +4 -4
  551. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +6 -6
  552. package/clean.sh +2 -2
  553. package/include/DDA/DDAPass.h +0 -6
  554. package/include/Graphs/ICFGEdge.h +1 -1
  555. package/include/Graphs/VFGNode.h +4 -18
  556. package/include/MemoryModel/PointerAnalysis.h +0 -4
  557. package/include/MemoryModel/PointerAnalysisImpl.h +0 -10
  558. package/include/MemoryModel/PointsTo.h +1 -1
  559. package/include/MemoryModel/SVFVariables.h +4 -4
  560. package/include/MemoryModel/SymbolTableInfo.h +0 -11
  561. package/include/SABER/PathCondAllocator.h +1 -0
  562. package/include/SVF-FE/BasicTypes.h +41 -2
  563. package/include/SVF-FE/LLVMUtil.h +7 -0
  564. package/include/Util/BasicTypes.h +0 -35
  565. package/include/Util/CoreBitVector.h +1 -1
  566. package/include/Util/SVFBasicTypes.h +6 -27
  567. package/include/Util/SVFUtil.h +1 -1
  568. package/include/WPA/WPAPass.h +0 -6
  569. package/lib/DDA/DDAPass.cpp +1 -1
  570. package/lib/MTA/LockResultValidator.cpp +1 -0
  571. package/lib/MTA/MHP.cpp +1 -0
  572. package/lib/MTA/MTAResultValidator.cpp +1 -0
  573. package/lib/MTA/PCG.cpp +1 -1
  574. package/lib/MemoryModel/PointerAnalysisImpl.cpp +0 -9
  575. package/lib/MemoryModel/PointsTo.cpp +2 -2
  576. package/lib/MemoryModel/SVFVariables.cpp +2 -2
  577. package/lib/MemoryModel/SymbolTableInfo.cpp +0 -5
  578. package/lib/SABER/PathCondAllocator.cpp +1 -1
  579. package/lib/SVF-FE/BreakConstantExpr.cpp +1 -0
  580. package/lib/SVF-FE/LLVMUtil.cpp +3 -2
  581. package/lib/SVF-FE/SVFIRBuilder.cpp +1 -1
  582. package/lib/Util/CoreBitVector.cpp +1 -1
  583. package/lib/Util/PTAStat.cpp +3 -1
  584. package/package.json +1 -1
@@ -66,7 +66,7 @@ $(function() {
66
66
  <div class="title">FSMPTA.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="FSMPTA_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * FSMPTA.cpp</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Created on: Jul 29, 2015</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Author: Yulei Sui, Peng Di</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="FSMPTA_8h.html">MTA/FSMPTA.h</a>&quot;</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="MHP_8h.html">MTA/MHP.h</a>&quot;</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PCG_8h.html">MTA/PCG.h</a>&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointsTo_8h.html">MemoryModel/PointsTo.h</a>&quot;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<a class="code" href="classSVF_1_1FSMPTA.html">FSMPTA</a>* <a class="code" href="classSVF_1_1FSMPTA.html#af248a80855457ca9e5a7208c114681bb">FSMPTA::mfspta</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a019a4597074fdad6e51d936ed4ead0d9">MTASVFGBuilder::numOfNewSVFGEdges</a> = 0;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a0319d1d2e78c79f9943f2e2f65da26ed">MTASVFGBuilder::numOfRemovedSVFGEdges</a> = 0;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a07c3f5fa2e0092dac28521cf901a26cf">MTASVFGBuilder::numOfRemovedPTS</a> = 0;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a3b75cd10a314c920669cd0d4790e1a16"> 25</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a3b75cd10a314c920669cd0d4790e1a16">MTASVFGBuilder::buildSVFG</a>()</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;{</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="classSVF_1_1MemSSA.html">MemSSA</a>* mssa = svfg-&gt;getMSSA();</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; svfg-&gt;buildSVFG();</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">if</span> (ADDEDGE_NOEDGE != <a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a>)</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot;FSMPTA adding edge\n&quot;</span>));</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a217a1ccdaec1abb103cf6b0373631234">DMTA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot;FSMPTA adding edge\n&quot;</span>));</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; connectMHPEdges(mssa-&gt;<a class="code" href="classSVF_1_1MemSSA.html#ad40617a1907b9a6b8cc24888ce54a0ac">getPTA</a>());</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; }</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">if</span> (mssa-&gt;<a class="code" href="classSVF_1_1MemSSA.html#ad40617a1907b9a6b8cc24888ce54a0ac">getPTA</a>()-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4880571f57542afc50da506dfe273183">printStat</a>())</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; svfg-&gt;performStat();</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="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a46d39980440040fc0ca50b3df7eead1a"> 42</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a46d39980440040fc0ca50b3df7eead1a">MTASVFGBuilder::collectLoadStoreSVFGNodes</a>()</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;{</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">SVFG::const_iterator</a> it = svfg-&gt;begin(), eit = svfg-&gt;end(); it != eit; ++it)</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">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* snode = it-&gt;second;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;LoadSVFGNode&gt;(snode))</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* node = SVFUtil::cast&lt;StmtSVFGNode&gt;(snode);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>())</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; ldnodeSet.insert(node);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</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; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StoreSVFGNode&gt;(snode))</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* node = SVFUtil::cast&lt;StmtSVFGNode&gt;(snode);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>())</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; stnodeSet.insert(node);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;}</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a55da7f1a8921727f84232e5905d6135f"> 66</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a55da7f1a8921727f84232e5905d6135f">MTASVFGBuilder::recordEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id2, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts)</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;{</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#aed3e0bf64c3ccb6bfd24e89cc6f89ed9">NodeIDPair</a> pair = std::make_pair(id1, id2);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">if</span> (recordedges.find(pair) == recordedges.end())</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; recordedges.insert(pair);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; edge2pts[pair] = pts;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; edge2pts[pair] |= pts;</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; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;}</div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a2effeeac276a64d612fe6af08ec25b74"> 81</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a2effeeac276a64d612fe6af08ec25b74">MTASVFGBuilder::recordAddingEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id2, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;{</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">return</span> recordEdge(id1, id2, pts);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;}</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a97179139a6395a7062d3200c23d4b69d"> 86</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a97179139a6395a7062d3200c23d4b69d">MTASVFGBuilder::recordRemovingEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id2, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts)</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; <span class="keywordflow">return</span> recordEdge(id1, id2, pts);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;}</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a0ed91beb4d3442c0a78ea81bde8d41a3"> 91</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a0ed91beb4d3442c0a78ea81bde8d41a3">MTASVFGBuilder::performAddingMHPEdges</a>()</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;{</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a019a4597074fdad6e51d936ed4ead0d9">MTASVFGBuilder::numOfNewSVFGEdges</a> = recordedges.size();</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">while</span> (!recordedges.empty())</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; {</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; std::pair&lt;NodeID, NodeID&gt; edgepair = *recordedges.begin();</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts = edge2pts[edgepair];</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; recordedges.erase(recordedges.begin());</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; addTDEdges(edgepair.first, edgepair.second, pts);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</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;</div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a2e654f80c3680cd434fd04932a309a2d"> 103</a></span>&#160;<a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a2e654f80c3680cd434fd04932a309a2d">MTASVFGBuilder::addTDEdges</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts)</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;{</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; <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* srcNode = svfg-&gt;getSVFGNode(srcId);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dstNode = svfg-&gt;getSVFGNode(dstId);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = svfg-&gt;hasThreadVFGEdge(srcNode,dstNode,<a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5aae3168b6bc9141e4a1f3723eae4f3375">SVFGEdge::TheadMHPIndirectVF</a>))</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;IndirectSVFGEdge&gt;(edge) &amp;&amp; <span class="stringliteral">&quot;this should be a indirect value flow edge!&quot;</span>);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">return</span> (SVFUtil::cast&lt;IndirectSVFGEdge&gt;(edge)-&gt;addPointsTo(pts.<a class="code" href="classSVF_1_1PointsTo.html#ae4749cf6dc43645e2479cefbcc246637">toNodeBS</a>()) ? edge : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a019a4597074fdad6e51d936ed4ead0d9">MTASVFGBuilder::numOfNewSVFGEdges</a>++;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="classSVF_1_1ThreadMHPIndSVFGEdge.html">ThreadMHPIndSVFGEdge</a>* indirectEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ThreadMHPIndSVFGEdge.html">ThreadMHPIndSVFGEdge</a>(srcNode,dstNode);</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; indirectEdge-&gt;<a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a50ac2e33c6a4a41291c0a476ed07de53">addPointsTo</a>(pts.<a class="code" href="classSVF_1_1PointsTo.html#ae4749cf6dc43645e2479cefbcc246637">toNodeBS</a>());</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">return</span> (svfg-&gt;addSVFGEdge(indirectEdge) ? indirectEdge : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;}</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a26b6750de23395a89767288b2eabb1ef"> 123</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a26b6750de23395a89767288b2eabb1ef">MTASVFGBuilder::performRemovingMHPEdges</a>()</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;{</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">while</span> (!recordedges.empty())</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; std::pair&lt;NodeID, NodeID&gt; edgepair = *recordedges.begin();</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; recordedges.erase(recordedges.begin());</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> remove_pts = edge2pts[edgepair];</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1 = SVFUtil::cast&lt;StmtSVFGNode&gt;(svfg-&gt;getSVFGNode(edgepair.first));</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2 = SVFUtil::cast&lt;StmtSVFGNode&gt;(svfg-&gt;getSVFGNode(edgepair.second));</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a> (n1&amp;&amp;n2 &amp;&amp; <span class="stringliteral">&quot;one node of removed pair is null&quot;</span>);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a> (n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a0931220d7a38e03f206cbdc6465d32ad">hasOutgoingEdge</a>() &amp;&amp; <span class="stringliteral">&quot;n1 doesn&#39;t have out edge&quot;</span>);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a> (n2-&gt;hasIncomingEdge() &amp;&amp; <span class="stringliteral">&quot;n2 doesn&#39;t have in edge&quot;</span>);</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; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;SVFGEdge*&gt;</a> removededges;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(); iter != n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); ++iter)</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"> 141</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>() &amp;&amp; (edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()==n2))</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; {</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* e = SVFUtil::cast&lt;IndirectSVFGEdge&gt;(edge);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; pts = e-&gt;<a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">getPointsTo</a>();</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> o = remove_pts.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), eo = remove_pts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>(); o != eo; ++o)</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">if</span> (const_cast&lt;NodeBS&amp;&gt;(pts).test(*o))</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; {</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp;<span class="keyword">&gt;</span>(pts).reset(*o);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a07c3f5fa2e0092dac28521cf901a26cf">MTASVFGBuilder::numOfRemovedPTS</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="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">if</span> (0 == e-&gt;<a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">getPointsTo</a>().count())</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; removededges.insert(edge);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</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;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">while</span>(!removededges.empty())</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *removededges.begin();</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; removededges.erase(removededges.begin());</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; svfg-&gt;removeSVFGEdge(edge);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a217a1ccdaec1abb103cf6b0373631234">DMTA</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>()&lt;&lt;<span class="stringliteral">&quot;Read Precision remove: &quot;</span>&lt;&lt;edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>()&lt;&lt;<span class="stringliteral">&quot; -&gt; &quot;</span>&lt;&lt;edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>()&lt;&lt;<span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a0319d1d2e78c79f9943f2e2f65da26ed">MTASVFGBuilder::numOfRemovedSVFGEdges</a>++;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; }</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;}</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a5c32c2f5038aab15ec2da50c7c99b405">MTASVFGBuilder::isHeadofSpan</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n, <a class="code" href="classSVF_1_1LockAnalysis.html#a07b7d49e1fbe3e5dc694b6aadbee05b8">LockAnalysis::LockSpan</a> lspan)</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;{</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <a class="code" href="classSVF_1_1SVFGNodeLockSpan.html">SVFGNodeLockSpan</a> pair(n,lspan);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">if</span> (pairheadmap.find(pair) != pairheadmap.end())</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">return</span> pairheadmap[pair];</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; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> prev = getPrevNodes(n);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">for</span> (SVFGNodeIDSet::iterator it = prev.begin(), eit = prev.end(); it != eit; ++it)</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; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a> (SVFUtil::isa&lt;StoreSVFGNode&gt;(svfg-&gt;getSVFGNode(*it)) &amp;&amp; <span class="stringliteral">&quot;prev is not a store node&quot;</span>);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* prevNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>&gt;(svfg-&gt;getSVFGNode(*it));</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevIns = prevNode-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">if</span> (lockana-&gt;hasOneCxtInLockSpan(prevIns, lspan))</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; pairheadmap[pair]=<span class="keyword">false</span>;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; }</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; pairheadmap[pair]=<span class="keyword">true</span>;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;}</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div><div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#ad0c3ea19875191721cd466fe85b91a8c"> 203</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a5c32c2f5038aab15ec2da50c7c99b405">MTASVFGBuilder::isHeadofSpan</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n, <a class="code" href="classSVF_1_1MTASVFGBuilder.html#acff9054fd525a5358532dd2e812171ce">InstSet</a> mergespan)</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;{</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> prev = getPrevNodes(n);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">for</span> (SVFGNodeIDSet::iterator it = prev.begin(), eit = prev.end(); it != eit; ++it)</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; {</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a> (SVFUtil::isa&lt;StoreSVFGNode&gt;(svfg-&gt;getSVFGNode(*it)) &amp;&amp; <span class="stringliteral">&quot;prev is not a store node&quot;</span>);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* prevNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>&gt;(svfg-&gt;getSVFGNode(*it));</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevIns = prevNode-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">if</span> (mergespan.find(prevIns)!=mergespan.end())</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</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="l00221"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a4d36dc553bc87508b78add9b52ce9c2a"> 221</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a5c32c2f5038aab15ec2da50c7c99b405">MTASVFGBuilder::isHeadofSpan</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n)</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;{</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">if</span> (headmap.find(n) != headmap.end())</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">return</span> headmap[n];</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"> 226</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> prev = getPrevNodes(n);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">for</span> (SVFGNodeIDSet::iterator it = prev.begin(), eit = prev.end(); it != eit; ++it)</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;StoreSVFGNode&gt;(svfg-&gt;getSVFGNode(*it)) &amp;&amp; <span class="stringliteral">&quot;prev is not a store node&quot;</span>);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* prevNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>&gt;(svfg-&gt;getSVFGNode(*it));</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevIns = prevNode-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">if</span> (lockana-&gt;isInSameSpan(prevIns, n-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>()))</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; {</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; headmap[n]=<span class="keyword">false</span>;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; headmap[n]=<span class="keyword">true</span>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;}</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"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#af8ea2da28e9818d4f9e4e9528997f023"> 244</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#ac8339229ade604f4205b111bfc99f23f">MTASVFGBuilder::isTailofSpan</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n, <a class="code" href="classSVF_1_1MTASVFGBuilder.html#acff9054fd525a5358532dd2e812171ce">InstSet</a> mergespan)</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;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ = getSuccNodes(n);</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; <span class="keywordflow">for</span> (SVFGNodeIDSet::iterator it = succ.begin(), eit = succ.end(); it != eit; ++it)</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a> ((SVFUtil::isa&lt;StoreSVFGNode&gt;(svfg-&gt;getSVFGNode(*it)) || SVFUtil::isa&lt;LoadSVFGNode&gt;(svfg-&gt;getSVFGNode(*it))) &amp;&amp; <span class="stringliteral">&quot;succ is not a store/load node&quot;</span>);</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* succNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>&gt;(svfg-&gt;getSVFGNode(*it));</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succIns = succNode-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">if</span> (mergespan.find(succIns)!=mergespan.end())</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; }</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;}</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div><div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#ac8339229ade604f4205b111bfc99f23f"> 262</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#ac8339229ade604f4205b111bfc99f23f">MTASVFGBuilder::isTailofSpan</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n, <a class="code" href="classSVF_1_1LockAnalysis.html#a07b7d49e1fbe3e5dc694b6aadbee05b8">LockAnalysis::LockSpan</a> lspan)</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;{</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;StoreSVFGNode&gt;(n) &amp;&amp; <span class="stringliteral">&quot;Node is not a store node&quot;</span>);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <a class="code" href="classSVF_1_1SVFGNodeLockSpan.html">SVFGNodeLockSpan</a> pair(n,lspan);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">if</span> (pairtailmap.find(pair) != pairtailmap.end())</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">return</span> pairtailmap[pair];</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ = getSuccNodes(n);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">for</span> (SVFGNodeIDSet::iterator it = succ.begin(), eit = succ.end(); it != eit; ++it)</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a> ((SVFUtil::isa&lt;StoreSVFGNode&gt;(svfg-&gt;getSVFGNode(*it)) || SVFUtil::isa&lt;LoadSVFGNode&gt;(svfg-&gt;getSVFGNode(*it))) &amp;&amp; <span class="stringliteral">&quot;succ is not a store/load node&quot;</span>);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;LoadSVFGNode&gt;(svfg-&gt;getSVFGNode(*it)))</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* succNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>&gt;(svfg-&gt;getSVFGNode(*it));</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succIns = succNode-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">if</span> (lockana-&gt;hasOneCxtInLockSpan(succIns, lspan))</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; pairtailmap[pair]=<span class="keyword">false</span>;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; }</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; pairtailmap[pair]=<span class="keyword">true</span>;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;}</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a9c8681767551575a18ee141f7336db05"> 292</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#ac8339229ade604f4205b111bfc99f23f">MTASVFGBuilder::isTailofSpan</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n)</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;{</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;StoreSVFGNode&gt;(n) &amp;&amp; <span class="stringliteral">&quot;Node is not a store node&quot;</span>);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">if</span> (tailmap.find(n) != tailmap.end())</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">return</span> tailmap[n];</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"> 299</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ = getSuccNodes(n);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">for</span> (SVFGNodeIDSet::iterator it = succ.begin(), eit = succ.end(); it != eit; ++it)</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((SVFUtil::isa&lt;StoreSVFGNode&gt;(svfg-&gt;getSVFGNode(*it)) || SVFUtil::isa&lt;LoadSVFGNode&gt;(svfg-&gt;getSVFGNode(*it)))</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; &amp;&amp; <span class="stringliteral">&quot;succ is not a store/load node&quot;</span>);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;LoadSVFGNode&gt;(svfg-&gt;getSVFGNode(*it)))</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* succNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>&gt;(svfg-&gt;getSVFGNode(*it));</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succIns = succNode-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</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"> 311</span>&#160; <span class="keywordflow">if</span> (lockana-&gt;isInSameSpan(succIns, n-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>()))</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; tailmap[n] = <span class="keyword">false</span>;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; tailmap[n]=<span class="keyword">true</span>;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;}</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;</div><div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a7b034f9f8f01823ecfb7f6c17e47b502"> 321</a></span>&#160;<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">MTASVFGBuilder::SVFGNodeIDSet</a> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a7b034f9f8f01823ecfb7f6c17e47b502">MTASVFGBuilder::getPrevNodes</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n)</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;{</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">if</span> (prevset.find(n)!=prevset.end())</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">return</span> prevset[n];</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; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> prev;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a467e7b445394acb735b1b24ce39e966a">SVFGNodeSet</a> worklist;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a467e7b445394acb735b1b24ce39e966a">SVFGNodeSet</a> visited;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">InEdgeBegin</a>(); iter != n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">InEdgeEnd</a>(); ++iter)</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>())</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; {</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; worklist.insert(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>());</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; }</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; }</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">while</span> (!worklist.empty())</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; {</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = *worklist.begin();</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; worklist.erase(worklist.begin());</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; visited.insert(node);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StoreSVFGNode&gt;(node))</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; prev.set(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">else</span></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="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">InEdgeBegin</a>(); iter != node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">InEdgeEnd</a>(); ++iter)</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; {</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>() &amp;&amp; visited.find(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>())==visited.end())</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; worklist.insert(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>());</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; }</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; }</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; prevset[n]=prev;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">return</span> prev;</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"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0"> 359</a></span>&#160;<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">MTASVFGBuilder::SVFGNodeIDSet</a> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0">MTASVFGBuilder::getSuccNodes</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n)</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;{</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">if</span> (succset.find(n)!=succset.end())</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">return</span> succset[n];</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a467e7b445394acb735b1b24ce39e966a">SVFGNodeSet</a> worklist;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a467e7b445394acb735b1b24ce39e966a">SVFGNodeSet</a> visited;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(); iter != n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); ++iter)</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; {</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>())</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; worklist.insert(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>());</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; }</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; }</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">while</span> (!worklist.empty())</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = *worklist.begin();</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; worklist.erase(worklist.begin());</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; visited.insert(node);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StoreSVFGNode&gt;(node) || SVFUtil::isa&lt;LoadSVFGNode&gt;(node))</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; succ.set(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; {</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(); iter != node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); ++iter)</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; {</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>() &amp;&amp; visited.find(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()) == visited.end())</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; worklist.insert(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>());</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="l00394"></a><span class="lineno"> 394</span>&#160; succset[n]=succ;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">return</span> succ;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;}</div><div class="line"><a name="l00397"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a8164ae39b494115142767abc29cebd53"> 397</a></span>&#160;<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">MTASVFGBuilder::SVFGNodeIDSet</a> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0">MTASVFGBuilder::getSuccNodes</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o)</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;{</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a467e7b445394acb735b1b24ce39e966a">SVFGNodeSet</a> worklist;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a467e7b445394acb735b1b24ce39e966a">SVFGNodeSet</a> visited;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(); iter != n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); ++iter)</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; {</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>())</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; {</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* e = SVFUtil::cast&lt;IndirectSVFGEdge&gt;(edge);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> pts = e-&gt;<a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">getPointsTo</a>();</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">if</span>(pts.test(o))</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; worklist.insert(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>());</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; }</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; }</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">while</span> (!worklist.empty())</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="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = *worklist.begin();</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; worklist.erase(worklist.begin());</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; visited.insert(node);</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StoreSVFGNode&gt;(node) || SVFUtil::isa&lt;LoadSVFGNode&gt;(node))</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; succ.set(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; {</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(); iter != node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); ++iter)</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; {</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>() &amp;&amp; visited.find(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()) == visited.end())</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; {</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* e = SVFUtil::cast&lt;IndirectSVFGEdge&gt;(edge);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> pts = e-&gt;<a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">getPointsTo</a>();</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">if</span>(pts.test(o))</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; worklist.insert(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>());</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; }</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; }</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordflow">return</span> succ;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;}</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;</div><div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a82b52f8e70f51353cbd7476a509ff523"> 442</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a82b52f8e70f51353cbd7476a509ff523">MTASVFGBuilder::handleStoreLoadNonSparse</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1,<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2, <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta)</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;{</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; pts &amp;= pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>());</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; addTDEdges(n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;}</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;</div><div class="line"><a name="l00452"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a91ff57e51b0650963b4b5541fa0f7056"> 452</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a91ff57e51b0650963b4b5541fa0f7056">MTASVFGBuilder::handleStoreStoreNonSparse</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1,<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2, <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta)</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;{</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; pts &amp;= pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; addTDEdges(n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; addTDEdges(n2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;}</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;</div><div class="line"><a name="l00461"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a24921d1b1d79d7ef0b358be8d7a9e2c4"> 461</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a24921d1b1d79d7ef0b358be8d7a9e2c4">MTASVFGBuilder::handleStoreLoad</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1,<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2, <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta)</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;{</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1 = n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2 = n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keywordflow">if</span> (ADDEDGE_NOMHP!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a> &amp;&amp; !mhp-&gt;mayHappenInParallel(i1, i2))</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">if</span> (ADDEDGE_NOALIAS!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a> &amp;&amp; !pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#abd9da46106d820721a24201caaa164e1">alias</a>(n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>()))</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; pts &amp;= pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>());</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keywordflow">if</span> (ADDEDGE_NOLOCK!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a> &amp;&amp; lockana-&gt;isProtectedByCommonLock(i1, i2))</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">if</span> (isTailofSpan(n1) &amp;&amp; isHeadofSpan(n2))</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; addTDEdges(n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; }</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; {</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; addTDEdges(n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;}</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;</div><div class="line"><a name="l00495"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a29a14309cfa1d7c4454fb1237704e487"> 495</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a29a14309cfa1d7c4454fb1237704e487">MTASVFGBuilder::handleStoreStore</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1,<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2, <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta)</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;{</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1 = n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2 = n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">if</span> (ADDEDGE_NOMHP!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a> &amp;&amp; !mhp-&gt;mayHappenInParallel(i1, i2))</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">if</span> (ADDEDGE_NOALIAS!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a> &amp;&amp; !pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#abd9da46106d820721a24201caaa164e1">alias</a>(n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>()))</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; pts &amp;= pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keywordflow">if</span> (ADDEDGE_NOLOCK!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a> &amp;&amp; lockana-&gt;isProtectedByCommonLock(i1, i2))</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; {</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordflow">if</span> (isTailofSpan(n1) &amp;&amp; isHeadofSpan(n2))</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; addTDEdges(n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordflow">if</span> (isTailofSpan(n2) &amp;&amp; isHeadofSpan(n1))</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; addTDEdges(n2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; }</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; {</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; addTDEdges(n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; addTDEdges(n2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; }</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;}</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;</div><div class="line"><a name="l00524"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#aa861922932233ab547b63c87551b8fd3"> 524</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#aa861922932233ab547b63c87551b8fd3">MTASVFGBuilder::handleStoreLoadWithLockPrecisely</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1,<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2, <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta)</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;{</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">if</span> (!pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#abd9da46106d820721a24201caaa164e1">alias</a>(n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>()))</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;<span class="comment">// PointsTo pts = pta-&gt;getPts(n1-&gt;getPAGDstNodeID());</span></div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;<span class="comment">// pts &amp;= pta-&gt;getPts(n2-&gt;getPAGSrcNodeID());</span></div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;<span class="comment">// const Instruction* i1 = n1-&gt;getInst();</span></div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;<span class="comment">// const Instruction* i2 = n2-&gt;getInst();</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;<span class="comment">// NodeBS comlocks1;</span></div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;<span class="comment">// NodeBS comlocks2;</span></div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;<span class="comment">// lockana-&gt;getCommonLocks(i1, i2, comlocks1, comlocks2);</span></div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160;<span class="comment">// outs()&lt;&lt;comlocks1.count() &lt;&lt; &quot; &quot;&lt;&lt; comlocks2.count()&lt;&lt;&quot;\n&quot;;</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160;<span class="comment">// if(comlocks1.count() &amp;&amp; comlocks2.count()) {</span></div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;<span class="comment">// bool n1istail = false;</span></div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;<span class="comment">// for (NodeBS::iterator it1 = comlocks1.begin(), ie1 = comlocks1.end(); it1 != ie1; ++it1) {</span></div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;<span class="comment">// LockAnalysis::LockSpan lspan1 = lockana-&gt;getSpanfromCxtLock(*it1);</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;<span class="comment">// /// exist lock span, n1 is tail;</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;<span class="comment">// if (isTailofSpan(n1, lspan1))</span></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160;<span class="comment">// n1istail = true;</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;<span class="comment">// bool n2ishead = false;</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;<span class="comment">// for (NodeBS::iterator it2 = comlocks2.begin(), ie2 = comlocks2.end(); it2 != ie2; ++it2) {</span></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;<span class="comment">// LockAnalysis::LockSpan lspan2 = lockana-&gt;getSpanfromCxtLock(*it2);</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;<span class="comment">// /// exist lock span, n2 is head;</span></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;<span class="comment">// if (isHeadofSpan(n2, lspan2))</span></div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;<span class="comment">// n2ishead = true;</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160;<span class="comment">// if (n1istail &amp;&amp; n2ishead)</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;<span class="comment">// addTDEdges(n1-&gt;getId(), n2-&gt;getId(), pts);</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;<span class="comment">// } else {</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;<span class="comment">// addTDEdges(n1-&gt;getId(), n2-&gt;getId(), pts);</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160;}</div><div class="line"><a name="l00565"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a1802d8ed854bef817afa748d2bbcea05"> 565</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a1802d8ed854bef817afa748d2bbcea05">MTASVFGBuilder::handleStoreStoreWithLockPrecisely</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1,<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2, <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta)</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160;{</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordflow">if</span> (!pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#abd9da46106d820721a24201caaa164e1">alias</a>(n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>()))</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;<span class="comment">// PointsTo pts = pta-&gt;getPts(n1-&gt;getPAGDstNodeID());</span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;<span class="comment">// pts &amp;= pta-&gt;getPts(n2-&gt;getPAGDstNodeID());</span></div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;<span class="comment">// const Instruction* i1 = n1-&gt;getInst();</span></div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160;<span class="comment">// const Instruction* i2 = n2-&gt;getInst();</span></div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;<span class="comment">// NodeBS comlocks1;</span></div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160;<span class="comment">// NodeBS comlocks2;</span></div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160;<span class="comment">// lockana-&gt;getCommonLocks(i1, i2, comlocks1, comlocks2);</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160;<span class="comment">// if(comlocks1.count() &amp;&amp; comlocks2.count()) {</span></div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;<span class="comment">// bool n1istail = false;</span></div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;<span class="comment">// for (NodeBS::iterator it1 = comlocks1.begin(), ie1 = comlocks1.end(); it1 != ie1; ++it1) {</span></div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160;<span class="comment">// LockAnalysis::LockSpan lspan1 = lockana-&gt;getSpanfromCxtLock(*it1);</span></div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;<span class="comment">// /// exist lock span, n1 is tail;</span></div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160;<span class="comment">// if (isTailofSpan(n1, lspan1))</span></div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;<span class="comment">// n1istail = true;</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;<span class="comment">// bool n2ishead = false;</span></div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160;<span class="comment">// for (NodeBS::iterator it2 = comlocks2.begin(), ie2 = comlocks2.end(); it2 != ie2; ++it2) {</span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160;<span class="comment">// LockAnalysis::LockSpan lspan2 = lockana-&gt;getSpanfromCxtLock(*it2);</span></div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;<span class="comment">// /// exist lock span, n2 is head;</span></div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;<span class="comment">// if (isHeadofSpan(n2, lspan2))</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160;<span class="comment">// n2ishead = true;</span></div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160;<span class="comment">// if (n1istail &amp;&amp; n2ishead)</span></div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;<span class="comment">// addTDEdges(n1-&gt;getId(), n2-&gt;getId(), pts);</span></div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;<span class="comment">// bool n2istail = false;</span></div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160;<span class="comment">// for (NodeBS::iterator it2 = comlocks2.begin(), ie2 = comlocks2.end(); it2 != ie2; ++it2) {</span></div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160;<span class="comment">// LockAnalysis::LockSpan lspan2 = lockana-&gt;getSpanfromCxtLock(*it2);</span></div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160;<span class="comment">// /// exist lock span, n2 is tail;</span></div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;<span class="comment">// if (isTailofSpan(n2, lspan2))</span></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;<span class="comment">// n2istail = true;</span></div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;<span class="comment">// bool n1ishead = false;</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;<span class="comment">// for (NodeBS::iterator it1 = comlocks1.begin(), ie1 = comlocks1.end(); it1 != ie1; ++it1) {</span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160;<span class="comment">// LockAnalysis::LockSpan lspan1 = lockana-&gt;getSpanfromCxtLock(*it1);</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160;<span class="comment">// /// exist lock span, n1 is head;</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;<span class="comment">// if (isHeadofSpan(n1, lspan1))</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;<span class="comment">// n1ishead = true;</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160;<span class="comment">// if (n2istail &amp;&amp; n1ishead)</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;<span class="comment">// addTDEdges(n2-&gt;getId(), n1-&gt;getId(), pts);</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;<span class="comment">// } else {</span></div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;<span class="comment">// addTDEdges(n1-&gt;getId(), n2-&gt;getId(), pts);</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;<span class="comment">// addTDEdges(n2-&gt;getId(), n1-&gt;getId(), pts);</span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;}</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;</div><div class="line"><a name="l00624"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#ae028fe894e3c6e7fd0ad6feeaa64320e"> 624</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#ae028fe894e3c6e7fd0ad6feeaa64320e">MTASVFGBuilder::mergeSpan</a>(<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> comlocks, <a class="code" href="classSVF_1_1MTASVFGBuilder.html#acff9054fd525a5358532dd2e812171ce">InstSet</a>&amp; res)</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;{</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;<span class="comment">// for (NodeBS::iterator it = comlocks.begin(), ie = comlocks.end(); it != ie; ++it) {</span></div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;<span class="comment">// LockAnalysis::LockSpan lspan = lockana-&gt;getSpanfromCxtLock(*it);</span></div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;<span class="comment">// for (LockAnalysis::LockSpan::const_iterator cts = lspan.begin(), ects = lspan.end(); cts!=ects; ++cts) {</span></div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160;<span class="comment">// res.insert((*cts).getStmt());</span></div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160;}</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160;</div><div class="line"><a name="l00635"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a5532751632ece036b3d6741908573b36"> 635</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a5532751632ece036b3d6741908573b36">MTASVFGBuilder::readPrecision</a>()</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160;{</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160;</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; recordedges.clear();</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; edge2pts.clear();</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160;</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="keywordflow">for</span> (SVFGNodeSet::iterator it1 = stnodeSet.begin(), eit1 = stnodeSet.end(); it1 != eit1; ++it1)</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; {</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1 = SVFUtil::cast&lt;StmtSVFGNode&gt;(*it1);</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160;</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">InEdgeBegin</a>(); iter != n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">InEdgeEnd</a>(); ++iter)</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>() &amp;&amp; SVFUtil::isa&lt;StoreSVFGNode&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()))</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; {</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2 = SVFUtil::cast&lt;StmtSVFGNode&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>());</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* e = SVFUtil::cast&lt;IndirectSVFGEdge&gt;(edge);</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> pts = e-&gt;<a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">getPointsTo</a>();</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> remove_pts;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator o = pts.begin(), eo = pts.end(); o != eo; ++o)</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; {</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ1 = getSuccNodes(n1, *o);</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ2 = getSuccNodes(n2, *o);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordtype">bool</span> <span class="keyword">remove</span> = <span class="keyword">true</span>;</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keywordflow">for</span> (SVFGNodeIDSet::iterator sn1 = succ1.begin(), esn1 = succ1.end(); sn1 != esn1; sn1++)</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; {</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <span class="keywordflow">if</span> (!succ2.test(*sn1))</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; {</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keyword">remove</span> = <span class="keyword">false</span>;</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; }</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; }</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">remove</span>)</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; remove_pts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(*o);</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; }</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160;</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordflow">if</span> (remove_pts.<a class="code" href="classSVF_1_1PointsTo.html#a879783ba6629e500af9aa7dfcda2563d">count</a>())</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; recordRemovingEdge(n2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), remove_pts);</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; }</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; }</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; }</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; performRemovingMHPEdges();</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160;}</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160;</div><div class="line"><a name="l00683"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a1010ef4fc52e312f2b22867a63a5810d"> 683</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a1010ef4fc52e312f2b22867a63a5810d">MTASVFGBuilder::connectMHPEdges</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta)</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160;{</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <a class="code" href="classSVF_1_1PCG.html">PCG</a>* pcg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1PCG.html">PCG</a>(pta);</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="keywordflow">if</span> ((ADDEDGE_NONSPARSE==<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a>) &amp;&amp; <a class="code" href="classSVF_1_1Options.html#af2f66307e1d51947676f622c98ef0762">Options::UsePCG</a>)</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; {</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; pcg-&gt;<a class="code" href="classSVF_1_1PCG.html#a50b677ec622247a464cee7f0f45c5a53">analyze</a>();</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; }</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; collectLoadStoreSVFGNodes();</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; recordedges.clear();</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; edge2pts.clear();</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="keywordflow">for</span> (SVFGNodeSet::const_iterator it1 = stnodeSet.begin(), eit1 = stnodeSet.end(); it1!=eit1; ++it1)</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; {</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1 = SVFUtil::cast&lt;StmtSVFGNode&gt;(*it1);</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1 = n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keywordflow">for</span> (SVFGNodeSet::const_iterator it2 = ldnodeSet.begin(), eit2 = ldnodeSet.end(); it2 != eit2; ++it2)</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; {</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2 = SVFUtil::cast&lt;StmtSVFGNode&gt;(*it2);</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2 = n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keywordflow">if</span> (ADDEDGE_NONSPARSE==<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a>)</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; {</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#af2f66307e1d51947676f622c98ef0762">Options::UsePCG</a>)</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; {</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keywordflow">if</span> (pcg-&gt;<a class="code" href="classSVF_1_1PCG.html#a0a1d0abba4f0775a5d1e9b13aad2f2d0">mayHappenInParallel</a>(i1, i2) || mhp-&gt;mayHappenInParallel(i1, i2))</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; handleStoreLoadNonSparse(n1, n2, pta);</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; }</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; {</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; handleStoreLoadNonSparse(n1, n2, pta);</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; }</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; }</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; {</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; handleStoreLoad(n1, n2, pta);</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; }</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; }</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="keywordflow">for</span> (SVFGNodeSet::const_iterator it2 = std::next(it1), eit2 = stnodeSet.end(); it2!=eit2; ++it2)</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; {</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2 = SVFUtil::cast&lt;StmtSVFGNode&gt;(*it2);</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2 = n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keywordflow">if</span> (ADDEDGE_NONSPARSE == <a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a>)</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; {</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#af2f66307e1d51947676f622c98ef0762">Options::UsePCG</a>)</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; {</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">if</span>(pcg-&gt;<a class="code" href="classSVF_1_1PCG.html#a0a1d0abba4f0775a5d1e9b13aad2f2d0">mayHappenInParallel</a>(i1, i2) || mhp-&gt;mayHappenInParallel(i1, i2))</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; handleStoreStoreNonSparse(n1, n2, pta);</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; }</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; {</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; handleStoreStoreNonSparse(n1, n2, pta);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; }</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; }</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; {</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; handleStoreStore(n1, n2, pta);</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; }</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; }</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; }</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160;</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a6bec8aed8673d10d65cc3df9fad3383b">Options::ReadPrecisionTDEdge</a> &amp;&amp; ADDEDGE_NORP!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a>)</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; {</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>()&lt;&lt;<span class="stringliteral">&quot;Read precision edge removing \n&quot;</span>);</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a217a1ccdaec1abb103cf6b0373631234">DMTA</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>()&lt;&lt;<span class="stringliteral">&quot;Read precision edge removing \n&quot;</span>);</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; readPrecision();</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; }</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160;}</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160;</div><div class="line"><a name="l00757"></a><span class="lineno"><a class="line" href="classSVF_1_1FSMPTA.html#acbfb7d2a6d38b54966c98102c1ea6a38"> 757</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#ad6243c1317503bed39411dab47c83da7">FSMPTA::initialize</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* module)</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160;{</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a431ec4f85eb0f029e5740b92fd9ceb32">PointerAnalysis::initialize</a>();</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a>* ander = <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a48ff6fc4badc79ad3204ae9bd95cc540">AndersenWaveDiff::createAndersenWaveDiff</a>(getPAG());</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html">MTASVFGBuilder</a> mtaSVFGBuilder(mhp,lockana);</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; svfg = mtaSVFGBuilder.<a class="code" href="classSVF_1_1SVFGBuilder.html#ab7353191edd06568e2598177d253c1d9">buildPTROnlySVFG</a>(ander);</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; setGraph(svfg);</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="comment">//AndersenWaveDiff::releaseAndersenWaveDiff();</span></div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160;</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; stat = <span class="keyword">new</span> <a class="code" href="classSVF_1_1FlowSensitiveStat.html">FlowSensitiveStat</a>(<span class="keyword">this</span>);</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160;}</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;</div><div class="ttc" id="classSVF_1_1PointsTo_html_ae4749cf6dc43645e2479cefbcc246637"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ae4749cf6dc43645e2479cefbcc246637">SVF::PointsTo::toNodeBS</a></div><div class="ttdeci">NodeBS toNodeBS(void) const</div><div class="ttdoc">Returns this points-to set as a NodeBS. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00298">PointsTo.cpp:298</a></div></div>
69
+ <a href="FSMPTA_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * FSMPTA.cpp</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Created on: Jul 29, 2015</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Author: Yulei Sui, Peng Di</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="FSMPTA_8h.html">MTA/FSMPTA.h</a>&quot;</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="MHP_8h.html">MTA/MHP.h</a>&quot;</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PCG_8h.html">MTA/PCG.h</a>&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointsTo_8h.html">MemoryModel/PointsTo.h</a>&quot;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<a class="code" href="classSVF_1_1FSMPTA.html">FSMPTA</a>* <a class="code" href="classSVF_1_1FSMPTA.html#af248a80855457ca9e5a7208c114681bb">FSMPTA::mfspta</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a019a4597074fdad6e51d936ed4ead0d9">MTASVFGBuilder::numOfNewSVFGEdges</a> = 0;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a0319d1d2e78c79f9943f2e2f65da26ed">MTASVFGBuilder::numOfRemovedSVFGEdges</a> = 0;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a07c3f5fa2e0092dac28521cf901a26cf">MTASVFGBuilder::numOfRemovedPTS</a> = 0;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a3b75cd10a314c920669cd0d4790e1a16"> 25</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a3b75cd10a314c920669cd0d4790e1a16">MTASVFGBuilder::buildSVFG</a>()</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;{</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="classSVF_1_1MemSSA.html">MemSSA</a>* mssa = svfg-&gt;getMSSA();</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; svfg-&gt;buildSVFG();</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">if</span> (ADDEDGE_NOEDGE != <a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a>)</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot;FSMPTA adding edge\n&quot;</span>));</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a217a1ccdaec1abb103cf6b0373631234">DMTA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot;FSMPTA adding edge\n&quot;</span>));</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; connectMHPEdges(mssa-&gt;<a class="code" href="classSVF_1_1MemSSA.html#ad40617a1907b9a6b8cc24888ce54a0ac">getPTA</a>());</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; }</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">if</span> (mssa-&gt;<a class="code" href="classSVF_1_1MemSSA.html#ad40617a1907b9a6b8cc24888ce54a0ac">getPTA</a>()-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4880571f57542afc50da506dfe273183">printStat</a>())</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; svfg-&gt;performStat();</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="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a46d39980440040fc0ca50b3df7eead1a"> 42</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a46d39980440040fc0ca50b3df7eead1a">MTASVFGBuilder::collectLoadStoreSVFGNodes</a>()</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;{</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">SVFG::const_iterator</a> it = svfg-&gt;begin(), eit = svfg-&gt;end(); it != eit; ++it)</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">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* snode = it-&gt;second;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;LoadSVFGNode&gt;(snode))</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* node = SVFUtil::cast&lt;StmtSVFGNode&gt;(snode);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>())</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; ldnodeSet.insert(node);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</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; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StoreSVFGNode&gt;(snode))</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* node = SVFUtil::cast&lt;StmtSVFGNode&gt;(snode);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>())</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; stnodeSet.insert(node);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;}</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a55da7f1a8921727f84232e5905d6135f"> 66</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a55da7f1a8921727f84232e5905d6135f">MTASVFGBuilder::recordEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id2, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts)</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;{</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#aed3e0bf64c3ccb6bfd24e89cc6f89ed9">NodeIDPair</a> pair = std::make_pair(id1, id2);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">if</span> (recordedges.find(pair) == recordedges.end())</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; recordedges.insert(pair);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; edge2pts[pair] = pts;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; edge2pts[pair] |= pts;</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; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;}</div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a2effeeac276a64d612fe6af08ec25b74"> 81</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a2effeeac276a64d612fe6af08ec25b74">MTASVFGBuilder::recordAddingEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id2, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;{</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">return</span> recordEdge(id1, id2, pts);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;}</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a97179139a6395a7062d3200c23d4b69d"> 86</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a97179139a6395a7062d3200c23d4b69d">MTASVFGBuilder::recordRemovingEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id2, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts)</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; <span class="keywordflow">return</span> recordEdge(id1, id2, pts);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;}</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a0ed91beb4d3442c0a78ea81bde8d41a3"> 91</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a0ed91beb4d3442c0a78ea81bde8d41a3">MTASVFGBuilder::performAddingMHPEdges</a>()</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;{</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a019a4597074fdad6e51d936ed4ead0d9">MTASVFGBuilder::numOfNewSVFGEdges</a> = recordedges.size();</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">while</span> (!recordedges.empty())</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; {</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; std::pair&lt;NodeID, NodeID&gt; edgepair = *recordedges.begin();</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts = edge2pts[edgepair];</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; recordedges.erase(recordedges.begin());</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; addTDEdges(edgepair.first, edgepair.second, pts);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</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;</div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a2e654f80c3680cd434fd04932a309a2d"> 103</a></span>&#160;<a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a2e654f80c3680cd434fd04932a309a2d">MTASVFGBuilder::addTDEdges</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts)</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;{</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; <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* srcNode = svfg-&gt;getSVFGNode(srcId);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dstNode = svfg-&gt;getSVFGNode(dstId);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = svfg-&gt;hasThreadVFGEdge(srcNode,dstNode,<a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5aae3168b6bc9141e4a1f3723eae4f3375">SVFGEdge::TheadMHPIndirectVF</a>))</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;IndirectSVFGEdge&gt;(edge) &amp;&amp; <span class="stringliteral">&quot;this should be a indirect value flow edge!&quot;</span>);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">return</span> (SVFUtil::cast&lt;IndirectSVFGEdge&gt;(edge)-&gt;addPointsTo(pts.<a class="code" href="classSVF_1_1PointsTo.html#ae4749cf6dc43645e2479cefbcc246637">toNodeBS</a>()) ? edge : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a019a4597074fdad6e51d936ed4ead0d9">MTASVFGBuilder::numOfNewSVFGEdges</a>++;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="classSVF_1_1ThreadMHPIndSVFGEdge.html">ThreadMHPIndSVFGEdge</a>* indirectEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ThreadMHPIndSVFGEdge.html">ThreadMHPIndSVFGEdge</a>(srcNode,dstNode);</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; indirectEdge-&gt;<a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a50ac2e33c6a4a41291c0a476ed07de53">addPointsTo</a>(pts.<a class="code" href="classSVF_1_1PointsTo.html#ae4749cf6dc43645e2479cefbcc246637">toNodeBS</a>());</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">return</span> (svfg-&gt;addSVFGEdge(indirectEdge) ? indirectEdge : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;}</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a26b6750de23395a89767288b2eabb1ef"> 123</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a26b6750de23395a89767288b2eabb1ef">MTASVFGBuilder::performRemovingMHPEdges</a>()</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;{</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">while</span> (!recordedges.empty())</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; std::pair&lt;NodeID, NodeID&gt; edgepair = *recordedges.begin();</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; recordedges.erase(recordedges.begin());</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> remove_pts = edge2pts[edgepair];</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1 = SVFUtil::cast&lt;StmtSVFGNode&gt;(svfg-&gt;getSVFGNode(edgepair.first));</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2 = SVFUtil::cast&lt;StmtSVFGNode&gt;(svfg-&gt;getSVFGNode(edgepair.second));</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a> (n1&amp;&amp;n2 &amp;&amp; <span class="stringliteral">&quot;one node of removed pair is null&quot;</span>);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a> (n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a0931220d7a38e03f206cbdc6465d32ad">hasOutgoingEdge</a>() &amp;&amp; <span class="stringliteral">&quot;n1 doesn&#39;t have out edge&quot;</span>);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a> (n2-&gt;hasIncomingEdge() &amp;&amp; <span class="stringliteral">&quot;n2 doesn&#39;t have in edge&quot;</span>);</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; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;SVFGEdge*&gt;</a> removededges;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(); iter != n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); ++iter)</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"> 141</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>() &amp;&amp; (edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()==n2))</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; {</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* e = SVFUtil::cast&lt;IndirectSVFGEdge&gt;(edge);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; pts = e-&gt;<a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">getPointsTo</a>();</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> o = remove_pts.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), eo = remove_pts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>(); o != eo; ++o)</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">if</span> (const_cast&lt;NodeBS&amp;&gt;(pts).test(*o))</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; {</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp;<span class="keyword">&gt;</span>(pts).reset(*o);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a07c3f5fa2e0092dac28521cf901a26cf">MTASVFGBuilder::numOfRemovedPTS</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="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">if</span> (0 == e-&gt;<a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">getPointsTo</a>().count())</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; removededges.insert(edge);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</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;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">while</span>(!removededges.empty())</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *removededges.begin();</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; removededges.erase(removededges.begin());</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; svfg-&gt;removeSVFGEdge(edge);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a217a1ccdaec1abb103cf6b0373631234">DMTA</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>()&lt;&lt;<span class="stringliteral">&quot;Read Precision remove: &quot;</span>&lt;&lt;edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>()&lt;&lt;<span class="stringliteral">&quot; -&gt; &quot;</span>&lt;&lt;edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>()&lt;&lt;<span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a0319d1d2e78c79f9943f2e2f65da26ed">MTASVFGBuilder::numOfRemovedSVFGEdges</a>++;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; }</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;}</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a5c32c2f5038aab15ec2da50c7c99b405">MTASVFGBuilder::isHeadofSpan</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n, <a class="code" href="classSVF_1_1LockAnalysis.html#a07b7d49e1fbe3e5dc694b6aadbee05b8">LockAnalysis::LockSpan</a> lspan)</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;{</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <a class="code" href="classSVF_1_1SVFGNodeLockSpan.html">SVFGNodeLockSpan</a> pair(n,lspan);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">if</span> (pairheadmap.find(pair) != pairheadmap.end())</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">return</span> pairheadmap[pair];</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; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> prev = getPrevNodes(n);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">for</span> (SVFGNodeIDSet::iterator it = prev.begin(), eit = prev.end(); it != eit; ++it)</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; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a> (SVFUtil::isa&lt;StoreSVFGNode&gt;(svfg-&gt;getSVFGNode(*it)) &amp;&amp; <span class="stringliteral">&quot;prev is not a store node&quot;</span>);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* prevNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>&gt;(svfg-&gt;getSVFGNode(*it));</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevIns = prevNode-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">if</span> (lockana-&gt;hasOneCxtInLockSpan(prevIns, lspan))</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; pairheadmap[pair]=<span class="keyword">false</span>;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; }</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; pairheadmap[pair]=<span class="keyword">true</span>;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;}</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div><div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#ad0c3ea19875191721cd466fe85b91a8c"> 203</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a5c32c2f5038aab15ec2da50c7c99b405">MTASVFGBuilder::isHeadofSpan</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n, <a class="code" href="classSVF_1_1MTASVFGBuilder.html#acff9054fd525a5358532dd2e812171ce">InstSet</a> mergespan)</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;{</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> prev = getPrevNodes(n);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">for</span> (SVFGNodeIDSet::iterator it = prev.begin(), eit = prev.end(); it != eit; ++it)</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; {</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a> (SVFUtil::isa&lt;StoreSVFGNode&gt;(svfg-&gt;getSVFGNode(*it)) &amp;&amp; <span class="stringliteral">&quot;prev is not a store node&quot;</span>);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* prevNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>&gt;(svfg-&gt;getSVFGNode(*it));</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevIns = prevNode-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">if</span> (mergespan.find(prevIns)!=mergespan.end())</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</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="l00221"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a4d36dc553bc87508b78add9b52ce9c2a"> 221</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a5c32c2f5038aab15ec2da50c7c99b405">MTASVFGBuilder::isHeadofSpan</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n)</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;{</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">if</span> (headmap.find(n) != headmap.end())</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">return</span> headmap[n];</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"> 226</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> prev = getPrevNodes(n);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">for</span> (SVFGNodeIDSet::iterator it = prev.begin(), eit = prev.end(); it != eit; ++it)</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;StoreSVFGNode&gt;(svfg-&gt;getSVFGNode(*it)) &amp;&amp; <span class="stringliteral">&quot;prev is not a store node&quot;</span>);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* prevNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>&gt;(svfg-&gt;getSVFGNode(*it));</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevIns = prevNode-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">if</span> (lockana-&gt;isInSameSpan(prevIns, n-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>()))</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; {</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; headmap[n]=<span class="keyword">false</span>;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; headmap[n]=<span class="keyword">true</span>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;}</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"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#af8ea2da28e9818d4f9e4e9528997f023"> 244</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#ac8339229ade604f4205b111bfc99f23f">MTASVFGBuilder::isTailofSpan</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n, <a class="code" href="classSVF_1_1MTASVFGBuilder.html#acff9054fd525a5358532dd2e812171ce">InstSet</a> mergespan)</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;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ = getSuccNodes(n);</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; <span class="keywordflow">for</span> (SVFGNodeIDSet::iterator it = succ.begin(), eit = succ.end(); it != eit; ++it)</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a> ((SVFUtil::isa&lt;StoreSVFGNode&gt;(svfg-&gt;getSVFGNode(*it)) || SVFUtil::isa&lt;LoadSVFGNode&gt;(svfg-&gt;getSVFGNode(*it))) &amp;&amp; <span class="stringliteral">&quot;succ is not a store/load node&quot;</span>);</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* succNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>&gt;(svfg-&gt;getSVFGNode(*it));</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succIns = succNode-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">if</span> (mergespan.find(succIns)!=mergespan.end())</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; }</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;}</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div><div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#ac8339229ade604f4205b111bfc99f23f"> 262</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#ac8339229ade604f4205b111bfc99f23f">MTASVFGBuilder::isTailofSpan</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n, <a class="code" href="classSVF_1_1LockAnalysis.html#a07b7d49e1fbe3e5dc694b6aadbee05b8">LockAnalysis::LockSpan</a> lspan)</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;{</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;StoreSVFGNode&gt;(n) &amp;&amp; <span class="stringliteral">&quot;Node is not a store node&quot;</span>);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <a class="code" href="classSVF_1_1SVFGNodeLockSpan.html">SVFGNodeLockSpan</a> pair(n,lspan);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">if</span> (pairtailmap.find(pair) != pairtailmap.end())</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">return</span> pairtailmap[pair];</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ = getSuccNodes(n);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">for</span> (SVFGNodeIDSet::iterator it = succ.begin(), eit = succ.end(); it != eit; ++it)</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a> ((SVFUtil::isa&lt;StoreSVFGNode&gt;(svfg-&gt;getSVFGNode(*it)) || SVFUtil::isa&lt;LoadSVFGNode&gt;(svfg-&gt;getSVFGNode(*it))) &amp;&amp; <span class="stringliteral">&quot;succ is not a store/load node&quot;</span>);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;LoadSVFGNode&gt;(svfg-&gt;getSVFGNode(*it)))</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* succNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>&gt;(svfg-&gt;getSVFGNode(*it));</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succIns = succNode-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">if</span> (lockana-&gt;hasOneCxtInLockSpan(succIns, lspan))</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; pairtailmap[pair]=<span class="keyword">false</span>;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; }</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; pairtailmap[pair]=<span class="keyword">true</span>;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;}</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a9c8681767551575a18ee141f7336db05"> 292</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#ac8339229ade604f4205b111bfc99f23f">MTASVFGBuilder::isTailofSpan</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n)</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;{</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;StoreSVFGNode&gt;(n) &amp;&amp; <span class="stringliteral">&quot;Node is not a store node&quot;</span>);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">if</span> (tailmap.find(n) != tailmap.end())</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">return</span> tailmap[n];</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"> 299</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ = getSuccNodes(n);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">for</span> (SVFGNodeIDSet::iterator it = succ.begin(), eit = succ.end(); it != eit; ++it)</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((SVFUtil::isa&lt;StoreSVFGNode&gt;(svfg-&gt;getSVFGNode(*it)) || SVFUtil::isa&lt;LoadSVFGNode&gt;(svfg-&gt;getSVFGNode(*it)))</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; &amp;&amp; <span class="stringliteral">&quot;succ is not a store/load node&quot;</span>);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;LoadSVFGNode&gt;(svfg-&gt;getSVFGNode(*it)))</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* succNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>&gt;(svfg-&gt;getSVFGNode(*it));</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succIns = succNode-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</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"> 311</span>&#160; <span class="keywordflow">if</span> (lockana-&gt;isInSameSpan(succIns, n-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>()))</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; tailmap[n] = <span class="keyword">false</span>;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; tailmap[n]=<span class="keyword">true</span>;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;}</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;</div><div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a7b034f9f8f01823ecfb7f6c17e47b502"> 321</a></span>&#160;<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">MTASVFGBuilder::SVFGNodeIDSet</a> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a7b034f9f8f01823ecfb7f6c17e47b502">MTASVFGBuilder::getPrevNodes</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n)</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;{</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">if</span> (prevset.find(n)!=prevset.end())</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">return</span> prevset[n];</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; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> prev;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a467e7b445394acb735b1b24ce39e966a">SVFGNodeSet</a> worklist;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a467e7b445394acb735b1b24ce39e966a">SVFGNodeSet</a> visited;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">InEdgeBegin</a>(); iter != n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">InEdgeEnd</a>(); ++iter)</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>())</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; {</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; worklist.insert(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>());</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; }</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; }</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">while</span> (!worklist.empty())</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; {</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = *worklist.begin();</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; worklist.erase(worklist.begin());</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; visited.insert(node);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StoreSVFGNode&gt;(node))</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; prev.set(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">else</span></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="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">InEdgeBegin</a>(); iter != node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">InEdgeEnd</a>(); ++iter)</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; {</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>() &amp;&amp; visited.find(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>())==visited.end())</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; worklist.insert(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>());</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; }</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; }</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; prevset[n]=prev;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">return</span> prev;</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"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0"> 359</a></span>&#160;<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">MTASVFGBuilder::SVFGNodeIDSet</a> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0">MTASVFGBuilder::getSuccNodes</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n)</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;{</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">if</span> (succset.find(n)!=succset.end())</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">return</span> succset[n];</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a467e7b445394acb735b1b24ce39e966a">SVFGNodeSet</a> worklist;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a467e7b445394acb735b1b24ce39e966a">SVFGNodeSet</a> visited;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(); iter != n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); ++iter)</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; {</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>())</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; worklist.insert(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>());</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; }</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; }</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">while</span> (!worklist.empty())</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = *worklist.begin();</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; worklist.erase(worklist.begin());</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; visited.insert(node);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StoreSVFGNode&gt;(node) || SVFUtil::isa&lt;LoadSVFGNode&gt;(node))</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; succ.set(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; {</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(); iter != node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); ++iter)</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; {</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>() &amp;&amp; visited.find(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()) == visited.end())</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; worklist.insert(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>());</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="l00394"></a><span class="lineno"> 394</span>&#160; succset[n]=succ;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">return</span> succ;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;}</div><div class="line"><a name="l00397"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a8164ae39b494115142767abc29cebd53"> 397</a></span>&#160;<a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">MTASVFGBuilder::SVFGNodeIDSet</a> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0">MTASVFGBuilder::getSuccNodes</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o)</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;{</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a467e7b445394acb735b1b24ce39e966a">SVFGNodeSet</a> worklist;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a467e7b445394acb735b1b24ce39e966a">SVFGNodeSet</a> visited;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(); iter != n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); ++iter)</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; {</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>())</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; {</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* e = SVFUtil::cast&lt;IndirectSVFGEdge&gt;(edge);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> pts = e-&gt;<a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">getPointsTo</a>();</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">if</span>(pts.test(o))</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; worklist.insert(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>());</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; }</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; }</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">while</span> (!worklist.empty())</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="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = *worklist.begin();</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; worklist.erase(worklist.begin());</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; visited.insert(node);</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StoreSVFGNode&gt;(node) || SVFUtil::isa&lt;LoadSVFGNode&gt;(node))</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; succ.set(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; {</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(); iter != node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); ++iter)</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; {</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>() &amp;&amp; visited.find(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()) == visited.end())</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; {</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* e = SVFUtil::cast&lt;IndirectSVFGEdge&gt;(edge);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> pts = e-&gt;<a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">getPointsTo</a>();</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">if</span>(pts.test(o))</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; worklist.insert(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>());</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; }</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; }</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordflow">return</span> succ;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;}</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;</div><div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a82b52f8e70f51353cbd7476a509ff523"> 442</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a82b52f8e70f51353cbd7476a509ff523">MTASVFGBuilder::handleStoreLoadNonSparse</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1,<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2, <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta)</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;{</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; pts &amp;= pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>());</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; addTDEdges(n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;}</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;</div><div class="line"><a name="l00452"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a91ff57e51b0650963b4b5541fa0f7056"> 452</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a91ff57e51b0650963b4b5541fa0f7056">MTASVFGBuilder::handleStoreStoreNonSparse</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1,<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2, <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta)</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;{</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; pts &amp;= pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; addTDEdges(n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; addTDEdges(n2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;}</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;</div><div class="line"><a name="l00461"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a24921d1b1d79d7ef0b358be8d7a9e2c4"> 461</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a24921d1b1d79d7ef0b358be8d7a9e2c4">MTASVFGBuilder::handleStoreLoad</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1,<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2, <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta)</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;{</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1 = n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2 = n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keywordflow">if</span> (ADDEDGE_NOMHP!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a> &amp;&amp; !mhp-&gt;mayHappenInParallel(i1, i2))</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">if</span> (ADDEDGE_NOALIAS!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a> &amp;&amp; !pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a6c01f259ad2379a422d7106ce0255eb8">alias</a>(n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>()))</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; pts &amp;= pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>());</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keywordflow">if</span> (ADDEDGE_NOLOCK!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a> &amp;&amp; lockana-&gt;isProtectedByCommonLock(i1, i2))</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">if</span> (isTailofSpan(n1) &amp;&amp; isHeadofSpan(n2))</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; addTDEdges(n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; }</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; {</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; addTDEdges(n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;}</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;</div><div class="line"><a name="l00495"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a29a14309cfa1d7c4454fb1237704e487"> 495</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a29a14309cfa1d7c4454fb1237704e487">MTASVFGBuilder::handleStoreStore</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1,<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2, <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta)</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;{</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1 = n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2 = n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">if</span> (ADDEDGE_NOMHP!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a> &amp;&amp; !mhp-&gt;mayHappenInParallel(i1, i2))</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">if</span> (ADDEDGE_NOALIAS!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a> &amp;&amp; !pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a6c01f259ad2379a422d7106ce0255eb8">alias</a>(n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>()))</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts = pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; pts &amp;= pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a4dfb43679e9fa794ebad99b6584c32ec">getPts</a>(n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keywordflow">if</span> (ADDEDGE_NOLOCK!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a> &amp;&amp; lockana-&gt;isProtectedByCommonLock(i1, i2))</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; {</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordflow">if</span> (isTailofSpan(n1) &amp;&amp; isHeadofSpan(n2))</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; addTDEdges(n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordflow">if</span> (isTailofSpan(n2) &amp;&amp; isHeadofSpan(n1))</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; addTDEdges(n2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; }</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; {</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; addTDEdges(n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; addTDEdges(n2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), pts);</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; }</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;}</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;</div><div class="line"><a name="l00524"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#aa861922932233ab547b63c87551b8fd3"> 524</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#aa861922932233ab547b63c87551b8fd3">MTASVFGBuilder::handleStoreLoadWithLockPrecisely</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1,<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2, <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta)</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;{</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">if</span> (!pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a6c01f259ad2379a422d7106ce0255eb8">alias</a>(n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>()))</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;<span class="comment">// PointsTo pts = pta-&gt;getPts(n1-&gt;getPAGDstNodeID());</span></div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;<span class="comment">// pts &amp;= pta-&gt;getPts(n2-&gt;getPAGSrcNodeID());</span></div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;<span class="comment">// const Instruction* i1 = n1-&gt;getInst();</span></div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;<span class="comment">// const Instruction* i2 = n2-&gt;getInst();</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;<span class="comment">// NodeBS comlocks1;</span></div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;<span class="comment">// NodeBS comlocks2;</span></div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;<span class="comment">// lockana-&gt;getCommonLocks(i1, i2, comlocks1, comlocks2);</span></div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160;<span class="comment">// outs()&lt;&lt;comlocks1.count() &lt;&lt; &quot; &quot;&lt;&lt; comlocks2.count()&lt;&lt;&quot;\n&quot;;</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160;<span class="comment">// if(comlocks1.count() &amp;&amp; comlocks2.count()) {</span></div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;<span class="comment">// bool n1istail = false;</span></div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;<span class="comment">// for (NodeBS::iterator it1 = comlocks1.begin(), ie1 = comlocks1.end(); it1 != ie1; ++it1) {</span></div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;<span class="comment">// LockAnalysis::LockSpan lspan1 = lockana-&gt;getSpanfromCxtLock(*it1);</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;<span class="comment">// /// exist lock span, n1 is tail;</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;<span class="comment">// if (isTailofSpan(n1, lspan1))</span></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160;<span class="comment">// n1istail = true;</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;<span class="comment">// bool n2ishead = false;</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;<span class="comment">// for (NodeBS::iterator it2 = comlocks2.begin(), ie2 = comlocks2.end(); it2 != ie2; ++it2) {</span></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;<span class="comment">// LockAnalysis::LockSpan lspan2 = lockana-&gt;getSpanfromCxtLock(*it2);</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;<span class="comment">// /// exist lock span, n2 is head;</span></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;<span class="comment">// if (isHeadofSpan(n2, lspan2))</span></div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;<span class="comment">// n2ishead = true;</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160;<span class="comment">// if (n1istail &amp;&amp; n2ishead)</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;<span class="comment">// addTDEdges(n1-&gt;getId(), n2-&gt;getId(), pts);</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;<span class="comment">// } else {</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;<span class="comment">// addTDEdges(n1-&gt;getId(), n2-&gt;getId(), pts);</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160;}</div><div class="line"><a name="l00565"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a1802d8ed854bef817afa748d2bbcea05"> 565</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a1802d8ed854bef817afa748d2bbcea05">MTASVFGBuilder::handleStoreStoreWithLockPrecisely</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1,<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2, <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta)</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160;{</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordflow">if</span> (!pta-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a6c01f259ad2379a422d7106ce0255eb8">alias</a>(n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>()))</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;<span class="comment">// PointsTo pts = pta-&gt;getPts(n1-&gt;getPAGDstNodeID());</span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;<span class="comment">// pts &amp;= pta-&gt;getPts(n2-&gt;getPAGDstNodeID());</span></div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;<span class="comment">// const Instruction* i1 = n1-&gt;getInst();</span></div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160;<span class="comment">// const Instruction* i2 = n2-&gt;getInst();</span></div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;<span class="comment">// NodeBS comlocks1;</span></div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160;<span class="comment">// NodeBS comlocks2;</span></div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160;<span class="comment">// lockana-&gt;getCommonLocks(i1, i2, comlocks1, comlocks2);</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160;<span class="comment">// if(comlocks1.count() &amp;&amp; comlocks2.count()) {</span></div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;<span class="comment">// bool n1istail = false;</span></div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;<span class="comment">// for (NodeBS::iterator it1 = comlocks1.begin(), ie1 = comlocks1.end(); it1 != ie1; ++it1) {</span></div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160;<span class="comment">// LockAnalysis::LockSpan lspan1 = lockana-&gt;getSpanfromCxtLock(*it1);</span></div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;<span class="comment">// /// exist lock span, n1 is tail;</span></div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160;<span class="comment">// if (isTailofSpan(n1, lspan1))</span></div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;<span class="comment">// n1istail = true;</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;<span class="comment">// bool n2ishead = false;</span></div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160;<span class="comment">// for (NodeBS::iterator it2 = comlocks2.begin(), ie2 = comlocks2.end(); it2 != ie2; ++it2) {</span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160;<span class="comment">// LockAnalysis::LockSpan lspan2 = lockana-&gt;getSpanfromCxtLock(*it2);</span></div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;<span class="comment">// /// exist lock span, n2 is head;</span></div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;<span class="comment">// if (isHeadofSpan(n2, lspan2))</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160;<span class="comment">// n2ishead = true;</span></div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160;<span class="comment">// if (n1istail &amp;&amp; n2ishead)</span></div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;<span class="comment">// addTDEdges(n1-&gt;getId(), n2-&gt;getId(), pts);</span></div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;<span class="comment">// bool n2istail = false;</span></div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160;<span class="comment">// for (NodeBS::iterator it2 = comlocks2.begin(), ie2 = comlocks2.end(); it2 != ie2; ++it2) {</span></div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160;<span class="comment">// LockAnalysis::LockSpan lspan2 = lockana-&gt;getSpanfromCxtLock(*it2);</span></div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160;<span class="comment">// /// exist lock span, n2 is tail;</span></div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;<span class="comment">// if (isTailofSpan(n2, lspan2))</span></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;<span class="comment">// n2istail = true;</span></div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;<span class="comment">// bool n1ishead = false;</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;<span class="comment">// for (NodeBS::iterator it1 = comlocks1.begin(), ie1 = comlocks1.end(); it1 != ie1; ++it1) {</span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160;<span class="comment">// LockAnalysis::LockSpan lspan1 = lockana-&gt;getSpanfromCxtLock(*it1);</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160;<span class="comment">// /// exist lock span, n1 is head;</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;<span class="comment">// if (isHeadofSpan(n1, lspan1))</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;<span class="comment">// n1ishead = true;</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160;<span class="comment">// if (n2istail &amp;&amp; n1ishead)</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;<span class="comment">// addTDEdges(n2-&gt;getId(), n1-&gt;getId(), pts);</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;<span class="comment">// } else {</span></div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;<span class="comment">// addTDEdges(n1-&gt;getId(), n2-&gt;getId(), pts);</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;<span class="comment">// addTDEdges(n2-&gt;getId(), n1-&gt;getId(), pts);</span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;}</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;</div><div class="line"><a name="l00624"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#ae028fe894e3c6e7fd0ad6feeaa64320e"> 624</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#ae028fe894e3c6e7fd0ad6feeaa64320e">MTASVFGBuilder::mergeSpan</a>(<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> comlocks, <a class="code" href="classSVF_1_1MTASVFGBuilder.html#acff9054fd525a5358532dd2e812171ce">InstSet</a>&amp; res)</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;{</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;<span class="comment">// for (NodeBS::iterator it = comlocks.begin(), ie = comlocks.end(); it != ie; ++it) {</span></div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;<span class="comment">// LockAnalysis::LockSpan lspan = lockana-&gt;getSpanfromCxtLock(*it);</span></div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;<span class="comment">// for (LockAnalysis::LockSpan::const_iterator cts = lspan.begin(), ects = lspan.end(); cts!=ects; ++cts) {</span></div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160;<span class="comment">// res.insert((*cts).getStmt());</span></div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160;}</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160;</div><div class="line"><a name="l00635"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a5532751632ece036b3d6741908573b36"> 635</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a5532751632ece036b3d6741908573b36">MTASVFGBuilder::readPrecision</a>()</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160;{</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160;</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; recordedges.clear();</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; edge2pts.clear();</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160;</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="keywordflow">for</span> (SVFGNodeSet::iterator it1 = stnodeSet.begin(), eit1 = stnodeSet.end(); it1 != eit1; ++it1)</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; {</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1 = SVFUtil::cast&lt;StmtSVFGNode&gt;(*it1);</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160;</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keywordflow">for</span> (SVFGEdge::SVFGEdgeSetTy::iterator iter = n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">InEdgeBegin</a>(); iter != n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">InEdgeEnd</a>(); ++iter)</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *iter;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1VFGEdge.html#aa8f30d093d4950724a6688707326b57b">isIndirectVFGEdge</a>() &amp;&amp; SVFUtil::isa&lt;StoreSVFGNode&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()))</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; {</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2 = SVFUtil::cast&lt;StmtSVFGNode&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>());</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* e = SVFUtil::cast&lt;IndirectSVFGEdge&gt;(edge);</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> pts = e-&gt;<a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">getPointsTo</a>();</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> remove_pts;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator o = pts.begin(), eo = pts.end(); o != eo; ++o)</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; {</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ1 = getSuccNodes(n1, *o);</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVFGNodeIDSet</a> succ2 = getSuccNodes(n2, *o);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordtype">bool</span> <span class="keyword">remove</span> = <span class="keyword">true</span>;</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keywordflow">for</span> (SVFGNodeIDSet::iterator sn1 = succ1.begin(), esn1 = succ1.end(); sn1 != esn1; sn1++)</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; {</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <span class="keywordflow">if</span> (!succ2.test(*sn1))</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; {</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keyword">remove</span> = <span class="keyword">false</span>;</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; }</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; }</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">remove</span>)</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; remove_pts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(*o);</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; }</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160;</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordflow">if</span> (remove_pts.<a class="code" href="classSVF_1_1PointsTo.html#a879783ba6629e500af9aa7dfcda2563d">count</a>())</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; recordRemovingEdge(n2-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), n1-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), remove_pts);</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; }</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; }</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; }</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; performRemovingMHPEdges();</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160;}</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160;</div><div class="line"><a name="l00683"></a><span class="lineno"><a class="line" href="classSVF_1_1MTASVFGBuilder.html#a1010ef4fc52e312f2b22867a63a5810d"> 683</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MTASVFGBuilder.html#a1010ef4fc52e312f2b22867a63a5810d">MTASVFGBuilder::connectMHPEdges</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta)</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160;{</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <a class="code" href="classSVF_1_1PCG.html">PCG</a>* pcg = <span class="keyword">new</span> <a class="code" href="classSVF_1_1PCG.html">PCG</a>(pta);</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="keywordflow">if</span> ((ADDEDGE_NONSPARSE==<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a>) &amp;&amp; <a class="code" href="classSVF_1_1Options.html#af2f66307e1d51947676f622c98ef0762">Options::UsePCG</a>)</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; {</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; pcg-&gt;<a class="code" href="classSVF_1_1PCG.html#a50b677ec622247a464cee7f0f45c5a53">analyze</a>();</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; }</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; collectLoadStoreSVFGNodes();</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; recordedges.clear();</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; edge2pts.clear();</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="keywordflow">for</span> (SVFGNodeSet::const_iterator it1 = stnodeSet.begin(), eit1 = stnodeSet.end(); it1!=eit1; ++it1)</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; {</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n1 = SVFUtil::cast&lt;StmtSVFGNode&gt;(*it1);</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1 = n1-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keywordflow">for</span> (SVFGNodeSet::const_iterator it2 = ldnodeSet.begin(), eit2 = ldnodeSet.end(); it2 != eit2; ++it2)</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; {</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2 = SVFUtil::cast&lt;StmtSVFGNode&gt;(*it2);</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2 = n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keywordflow">if</span> (ADDEDGE_NONSPARSE==<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a>)</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; {</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#af2f66307e1d51947676f622c98ef0762">Options::UsePCG</a>)</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; {</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keywordflow">if</span> (pcg-&gt;<a class="code" href="classSVF_1_1PCG.html#a0a1d0abba4f0775a5d1e9b13aad2f2d0">mayHappenInParallel</a>(i1, i2) || mhp-&gt;mayHappenInParallel(i1, i2))</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; handleStoreLoadNonSparse(n1, n2, pta);</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; }</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; {</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; handleStoreLoadNonSparse(n1, n2, pta);</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; }</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; }</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; {</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; handleStoreLoad(n1, n2, pta);</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; }</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; }</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="keywordflow">for</span> (SVFGNodeSet::const_iterator it2 = std::next(it1), eit2 = stnodeSet.end(); it2!=eit2; ++it2)</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; {</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* n2 = SVFUtil::cast&lt;StmtSVFGNode&gt;(*it2);</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2 = n2-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keywordflow">if</span> (ADDEDGE_NONSPARSE == <a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a>)</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; {</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#af2f66307e1d51947676f622c98ef0762">Options::UsePCG</a>)</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; {</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">if</span>(pcg-&gt;<a class="code" href="classSVF_1_1PCG.html#a0a1d0abba4f0775a5d1e9b13aad2f2d0">mayHappenInParallel</a>(i1, i2) || mhp-&gt;mayHappenInParallel(i1, i2))</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; handleStoreStoreNonSparse(n1, n2, pta);</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; }</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; {</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; handleStoreStoreNonSparse(n1, n2, pta);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; }</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; }</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; {</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; handleStoreStore(n1, n2, pta);</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; }</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; }</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; }</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160;</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a6bec8aed8673d10d65cc3df9fad3383b">Options::ReadPrecisionTDEdge</a> &amp;&amp; ADDEDGE_NORP!=<a class="code" href="classSVF_1_1Options.html#af129d2ff94af3f6830c0678cb4b72371">Options::AddModelFlag</a>)</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; {</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>()&lt;&lt;<span class="stringliteral">&quot;Read precision edge removing \n&quot;</span>);</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a217a1ccdaec1abb103cf6b0373631234">DMTA</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>()&lt;&lt;<span class="stringliteral">&quot;Read precision edge removing \n&quot;</span>);</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; readPrecision();</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; }</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160;}</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160;</div><div class="line"><a name="l00757"></a><span class="lineno"><a class="line" href="classSVF_1_1FSMPTA.html#acbfb7d2a6d38b54966c98102c1ea6a38"> 757</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#ad6243c1317503bed39411dab47c83da7">FSMPTA::initialize</a>(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* module)</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160;{</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a431ec4f85eb0f029e5740b92fd9ceb32">PointerAnalysis::initialize</a>();</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a>* ander = <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a48ff6fc4badc79ad3204ae9bd95cc540">AndersenWaveDiff::createAndersenWaveDiff</a>(getPAG());</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <a class="code" href="classSVF_1_1MTASVFGBuilder.html">MTASVFGBuilder</a> mtaSVFGBuilder(mhp,lockana);</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; svfg = mtaSVFGBuilder.<a class="code" href="classSVF_1_1SVFGBuilder.html#ab7353191edd06568e2598177d253c1d9">buildPTROnlySVFG</a>(ander);</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; setGraph(svfg);</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="comment">//AndersenWaveDiff::releaseAndersenWaveDiff();</span></div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160;</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; stat = <span class="keyword">new</span> <a class="code" href="classSVF_1_1FlowSensitiveStat.html">FlowSensitiveStat</a>(<span class="keyword">this</span>);</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160;}</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;</div><div class="ttc" id="classSVF_1_1PointsTo_html_ae4749cf6dc43645e2479cefbcc246637"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ae4749cf6dc43645e2479cefbcc246637">SVF::PointsTo::toNodeBS</a></div><div class="ttdeci">NodeBS toNodeBS(void) const</div><div class="ttdoc">Returns this points-to set as a NodeBS. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00298">PointsTo.cpp:298</a></div></div>
70
70
  <div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_aed3e0bf64c3ccb6bfd24e89cc6f89ed9"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#aed3e0bf64c3ccb6bfd24e89cc6f89ed9">SVF::MTASVFGBuilder::NodeIDPair</a></div><div class="ttdeci">std::pair&lt; NodeID, NodeID &gt; NodeIDPair</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00074">FSMPTA.h:74</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a019a4597074fdad6e51d936ed4ead0d9"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a019a4597074fdad6e51d936ed4ead0d9">SVF::MTASVFGBuilder::numOfNewSVFGEdges</a></div><div class="ttdeci">static u32_t numOfNewSVFGEdges</div><div class="ttdoc">Number of newly added SVFG edges. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00086">FSMPTA.h:86</a></div></div>
72
72
  <div class="ttc" id="classSVF_1_1StmtVFGNode_html_a04986961ad507be9fcf141ab51787da8"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">SVF::StmtVFGNode::getPAGDstNodeID</a></div><div class="ttdeci">NodeID getPAGDstNodeID() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00146">VFGNode.h:146</a></div></div>
@@ -90,8 +90,7 @@ $(function() {
90
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>
91
91
  <div class="ttc" id="classSVF_1_1LockAnalysis_html_a07b7d49e1fbe3e5dc694b6aadbee05b8"><div class="ttname"><a href="classSVF_1_1LockAnalysis.html#a07b7d49e1fbe3e5dc694b6aadbee05b8">SVF::LockAnalysis::LockSpan</a></div><div class="ttdeci">Set&lt; CxtStmt &gt; LockSpan</div><div class="ttdef"><b>Definition:</b> <a href="LockAnalysis_8h_source.html#l00047">LockAnalysis.h:47</a></div></div>
92
92
  <div class="ttc" id="classSVF_1_1GenericNode_html_a0931220d7a38e03f206cbdc6465d32ad"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a0931220d7a38e03f206cbdc6465d32ad">SVF::GenericNode::hasOutgoingEdge</a></div><div class="ttdeci">bool hasOutgoingEdge() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00194">GenericGraph.h:194</a></div></div>
93
- <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a4880571f57542afc50da506dfe273183"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a4880571f57542afc50da506dfe273183">SVF::PointerAnalysis::printStat</a></div><div class="ttdeci">bool printStat()</div><div class="ttdoc">Whether print statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00370">PointerAnalysis.h:370</a></div></div>
94
- <div class="ttc" id="classSVF_1_1PointerAnalysis_html_abd9da46106d820721a24201caaa164e1"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#abd9da46106d820721a24201caaa164e1">SVF::PointerAnalysis::alias</a></div><div class="ttdeci">virtual AliasResult alias(const MemoryLocation &amp;LocA, const MemoryLocation &amp;LocB)=0</div><div class="ttdoc">Interface exposed to users of our pointer analysis, given Location infos. </div></div>
93
+ <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a4880571f57542afc50da506dfe273183"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a4880571f57542afc50da506dfe273183">SVF::PointerAnalysis::printStat</a></div><div class="ttdeci">bool printStat()</div><div class="ttdoc">Whether print statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00366">PointerAnalysis.h:366</a></div></div>
95
94
  <div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a55da7f1a8921727f84232e5905d6135f"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a55da7f1a8921727f84232e5905d6135f">SVF::MTASVFGBuilder::recordEdge</a></div><div class="ttdeci">bool recordEdge(NodeID id1, NodeID id2, PointsTo pts)</div><div class="ttdoc">Record edges. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00066">FSMPTA.cpp:66</a></div></div>
96
95
  <div class="ttc" id="classSVF_1_1SVFModule_html"><div class="ttname"><a href="classSVF_1_1SVFModule.html">SVF::SVFModule</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00041">SVFModule.h:41</a></div></div>
97
96
  <div class="ttc" id="classSVF_1_1FSMPTA_html"><div class="ttname"><a href="classSVF_1_1FSMPTA.html">SVF::FSMPTA</a></div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00168">FSMPTA.h:168</a></div></div>
@@ -100,7 +99,7 @@ $(function() {
100
99
  <div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a7033805052c8fae5cd0104fdd9e345c0"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a7033805052c8fae5cd0104fdd9e345c0">SVF::MTASVFGBuilder::getSuccNodes</a></div><div class="ttdeci">SVFGNodeIDSet getSuccNodes(const StmtSVFGNode *n)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00359">FSMPTA.cpp:359</a></div></div>
101
100
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a5dfa3f178d4abf37177d0d74ff4c6a97"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">SVF::GenericGraph::const_iterator</a></div><div class="ttdeci">IDToNodeMapTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00339">GenericGraph.h:339</a></div></div>
102
101
  <div class="ttc" id="classSVF_1_1IndirectSVFGEdge_html_a50ac2e33c6a4a41291c0a476ed07de53"><div class="ttname"><a href="classSVF_1_1IndirectSVFGEdge.html#a50ac2e33c6a4a41291c0a476ed07de53">SVF::IndirectSVFGEdge::addPointsTo</a></div><div class="ttdeci">bool addPointsTo(const NodeBS &amp;c)</div><div class="ttdoc">Handle memory region. </div><div class="ttdef"><b>Definition:</b> <a href="SVFGEdge_8h_source.html#l00057">SVFGEdge.h:57</a></div></div>
103
- <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#l00077">SVFBasicTypes.h:77</a></div></div>
102
+ <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#l00081">SVFBasicTypes.h:81</a></div></div>
104
103
  <div class="ttc" id="classSVF_1_1FSMPTA_html_af248a80855457ca9e5a7208c114681bb"><div class="ttname"><a href="classSVF_1_1FSMPTA.html#af248a80855457ca9e5a7208c114681bb">SVF::FSMPTA::mfspta</a></div><div class="ttdeci">static FSMPTA * mfspta</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00217">FSMPTA.h:217</a></div></div>
105
104
  <div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a2e654f80c3680cd434fd04932a309a2d"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a2e654f80c3680cd434fd04932a309a2d">SVF::MTASVFGBuilder::addTDEdges</a></div><div class="ttdeci">SVFGEdge * addTDEdges(NodeID srcId, NodeID dstId, PointsTo &amp;pts)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00103">FSMPTA.cpp:103</a></div></div>
106
105
  <div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_ae028fe894e3c6e7fd0ad6feeaa64320e"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#ae028fe894e3c6e7fd0ad6feeaa64320e">SVF::MTASVFGBuilder::mergeSpan</a></div><div class="ttdeci">void mergeSpan(NodeBS comlocks, InstSet &amp;res)</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00624">FSMPTA.cpp:624</a></div></div>
@@ -115,8 +114,8 @@ $(function() {
115
114
  <div class="ttc" id="classSVF_1_1PointsTo_html_aa53962e561399bf493d1f2b9137356f6"><div class="ttname"><a href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">SVF::PointsTo::begin</a></div><div class="ttdeci">const_iterator begin(void) const</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00127">PointsTo.h:127</a></div></div>
116
115
  <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>
117
116
  <div class="ttc" id="classSVF_1_1MemSSA_html"><div class="ttname"><a href="classSVF_1_1MemSSA.html">SVF::MemSSA</a></div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00046">MemSSA.h:46</a></div></div>
118
- <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#l00097">SVFBasicTypes.h:97</a></div></div>
119
- <div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00077">BasicTypes.h:77</a></div></div>
117
+ <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#l00101">SVFBasicTypes.h:101</a></div></div>
118
+ <div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00076">BasicTypes.h:76</a></div></div>
120
119
  <div class="ttc" id="classSVF_1_1PointsTo_html_a879783ba6629e500af9aa7dfcda2563d"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a879783ba6629e500af9aa7dfcda2563d">SVF::PointsTo::count</a></div><div class="ttdeci">u32_t count(void) const</div><div class="ttdoc">Returns number of elements. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00106">PointsTo.cpp:106</a></div></div>
121
120
  <div class="ttc" id="classSVF_1_1GenericNode_html_afe6a7b286d9af4992f41b59612fd2900"><div class="ttname"><a href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">SVF::GenericNode::InEdgeEnd</a></div><div class="ttdeci">iterator InEdgeEnd()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00214">GenericGraph.h:214</a></div></div>
122
121
  <div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a3b75cd10a314c920669cd0d4790e1a16"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a3b75cd10a314c920669cd0d4790e1a16">SVF::MTASVFGBuilder::buildSVFG</a></div><div class="ttdeci">virtual void buildSVFG()</div><div class="ttdoc">Re-write create SVFG method. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00025">FSMPTA.cpp:25</a></div></div>
@@ -134,6 +133,7 @@ $(function() {
134
133
  <div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_ac8339229ade604f4205b111bfc99f23f"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#ac8339229ade604f4205b111bfc99f23f">SVF::MTASVFGBuilder::isTailofSpan</a></div><div class="ttdeci">bool isTailofSpan(const StmtSVFGNode *n, LockAnalysis::LockSpan lspan)</div><div class="ttdoc">whether is a last write in the lock span. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00262">FSMPTA.cpp:262</a></div></div>
135
134
  <div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a5c32c2f5038aab15ec2da50c7c99b405"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a5c32c2f5038aab15ec2da50c7c99b405">SVF::MTASVFGBuilder::isHeadofSpan</a></div><div class="ttdeci">bool isHeadofSpan(const StmtSVFGNode *n, LockAnalysis::LockSpan lspan)</div><div class="ttdoc">whether is a first write in the lock span. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00179">FSMPTA.cpp:179</a></div></div>
136
135
  <div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
136
+ <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a6c01f259ad2379a422d7106ce0255eb8"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a6c01f259ad2379a422d7106ce0255eb8">SVF::PointerAnalysis::alias</a></div><div class="ttdeci">virtual AliasResult alias(const Value *V1, const Value *V2)=0</div><div class="ttdoc">Interface exposed to users of our pointer analysis, given Value infos. </div></div>
137
137
  <div class="ttc" id="classSVF_1_1VFGEdge_html_a156ae6a8b3a033f505c18c6b162e7cf5aae3168b6bc9141e4a1f3723eae4f3375"><div class="ttname"><a href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5aae3168b6bc9141e4a1f3723eae4f3375">SVF::VFGEdge::TheadMHPIndirectVF</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00059">VFGEdge.h:59</a></div></div>
138
138
  <div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a17da7e5da237c23873e17250d9746939"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a17da7e5da237c23873e17250d9746939">SVF::MTASVFGBuilder::SVFGNodeIDSet</a></div><div class="ttdeci">NodeBS SVFGNodeIDSet</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8h_source.html#l00072">FSMPTA.h:72</a></div></div>
139
139
  <div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a26b6750de23395a89767288b2eabb1ef"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a26b6750de23395a89767288b2eabb1ef">SVF::MTASVFGBuilder::performRemovingMHPEdges</a></div><div class="ttdeci">void performRemovingMHPEdges()</div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00123">FSMPTA.cpp:123</a></div></div>
@@ -145,7 +145,7 @@ $(function() {
145
145
  <div class="ttc" id="PCG_8h_html"><div class="ttname"><a href="PCG_8h.html">PCG.h</a></div></div>
146
146
  <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>
147
147
  <div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00165">GenericGraph.h:165</a></div></div>
148
- <div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00088">SVFBasicTypes.h:88</a></div></div>
148
+ <div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00092">SVFBasicTypes.h:92</a></div></div>
149
149
  <div class="ttc" id="classSVF_1_1MTASVFGBuilder_html_a1010ef4fc52e312f2b22867a63a5810d"><div class="ttname"><a href="classSVF_1_1MTASVFGBuilder.html#a1010ef4fc52e312f2b22867a63a5810d">SVF::MTASVFGBuilder::connectMHPEdges</a></div><div class="ttdeci">void connectMHPEdges(PointerAnalysis *pta)</div><div class="ttdoc">Connect MHP indirect value-flow edges for two nodes that may-happen-in-parallel. </div><div class="ttdef"><b>Definition:</b> <a href="FSMPTA_8cpp_source.html#l00683">FSMPTA.cpp:683</a></div></div>
150
150
  <div class="ttc" id="classSVF_1_1StmtVFGNode_html"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html">SVF::StmtVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00116">VFGNode.h:116</a></div></div>
151
151
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>