svf-tools 1.0.425 → 1.0.428

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 +1 -1
  35. package/SVF-doxygen/html/html/CoreBitVector_8h_source.html +2 -2
  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 +5 -5
  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 +52 -46
  122. package/SVF-doxygen/html/html/PathCondAllocator_8h.html +1 -0
  123. package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +74 -69
  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 +3 -3
  132. package/SVF-doxygen/html/html/PointsTo_8h_source.html +3 -3
  133. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +10 -9
  134. package/SVF-doxygen/html/html/ProgSlice_8h_source.html +18 -18
  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 +13 -11
  163. package/SVF-doxygen/html/html/SaberAnnotator_8h.html +1 -1
  164. package/SVF-doxygen/html/html/SaberAnnotator_8h_source.html +7 -8
  165. package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +2 -2
  166. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +8 -8
  167. package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +2 -2
  168. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +2 -2
  169. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +5 -5
  170. package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +1 -1
  171. package/SVF-doxygen/html/html/Steensgaard_8h_source.html +2 -2
  172. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +58 -58
  173. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +7 -7
  174. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +103 -104
  175. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +135 -139
  176. package/SVF-doxygen/html/html/TCT_8cpp_source.html +19 -19
  177. package/SVF-doxygen/html/html/TCT_8h_source.html +18 -18
  178. package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +5 -5
  179. package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +6 -6
  180. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +11 -11
  181. package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +6 -6
  182. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +4 -4
  183. package/SVF-doxygen/html/html/TypeAnalysis_8h_source.html +1 -1
  184. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +25 -25
  185. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +6 -6
  186. package/SVF-doxygen/html/html/Util_2BasicTypes_8h.html +0 -69
  187. package/SVF-doxygen/html/html/Util_2BasicTypes_8h_source.html +119 -153
  188. package/SVF-doxygen/html/html/VFGEdge_8h_source.html +2 -2
  189. package/SVF-doxygen/html/html/VFGNode_8h_source.html +165 -170
  190. package/SVF-doxygen/html/html/VFG_8cpp_source.html +19 -19
  191. package/SVF-doxygen/html/html/VFG_8h_source.html +22 -22
  192. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +6 -6
  193. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +7 -7
  194. package/SVF-doxygen/html/html/VersionedFlowSensitive_8h_source.html +4 -4
  195. package/SVF-doxygen/html/html/WPAFSSolver_8h_source.html +2 -2
  196. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +11 -11
  197. package/SVF-doxygen/html/html/WPAPass_8h_source.html +12 -12
  198. package/SVF-doxygen/html/html/WPASolver_8h_source.html +3 -3
  199. package/SVF-doxygen/html/html/WPAStat_8h_source.html +1 -1
  200. package/SVF-doxygen/html/html/WorkList_8h_source.html +1 -1
  201. package/SVF-doxygen/html/html/annotated.html +2 -3
  202. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
  203. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
  204. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +23 -23
  205. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +25 -25
  206. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +1 -1
  207. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +13 -13
  208. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +2 -2
  209. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +266 -267
  210. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +20 -23
  211. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +226 -227
  212. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +1 -4
  213. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +279 -280
  214. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +0 -3
  215. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +288 -289
  216. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +0 -3
  217. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +276 -277
  218. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +1 -4
  219. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +275 -276
  220. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +5 -8
  221. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +287 -288
  222. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +7 -10
  223. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +9 -9
  224. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +274 -275
  225. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +1 -4
  226. package/SVF-doxygen/html/html/classSVF_1_1Annotator.html +1 -1
  227. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +17 -17
  228. package/SVF-doxygen/html/html/classSVF_1_1BDDManager.html +3 -3
  229. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +173 -174
  230. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +24 -71
  231. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +1 -1
  232. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +33 -36
  233. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +6 -6
  234. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +24 -26
  235. package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +7 -7
  236. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +41 -41
  237. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +7 -7
  238. package/SVF-doxygen/html/html/classSVF_1_1CSC.html +4 -4
  239. package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +1 -1
  240. package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge.html +1 -1
  241. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +4 -4
  242. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +1 -1
  243. package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +1 -1
  244. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  245. package/SVF-doxygen/html/html/classSVF_1_1CallSite.html +41 -41
  246. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.html +1 -1
  247. package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.html +1 -1
  248. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +1 -1
  249. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +1 -1
  250. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +25 -28
  251. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl-members.html +166 -167
  252. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +120 -168
  253. package/SVF-doxygen/html/html/classSVF_1_1CondStdSet.html +2 -2
  254. package/SVF-doxygen/html/html/classSVF_1_1CondVar.html +1 -1
  255. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +4 -4
  256. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +8 -8
  257. package/SVF-doxygen/html/html/classSVF_1_1ContextCond.html +7 -7
  258. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA-members.html +266 -267
  259. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +31 -34
  260. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +1 -1
  261. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +2 -2
  262. package/SVF-doxygen/html/html/classSVF_1_1CoreBitVector.html +4 -4
  263. package/SVF-doxygen/html/html/classSVF_1_1CxtProc.html +7 -7
  264. package/SVF-doxygen/html/html/classSVF_1_1CxtStmt.html +7 -7
  265. package/SVF-doxygen/html/html/classSVF_1_1CxtThread.html +7 -7
  266. package/SVF-doxygen/html/html/classSVF_1_1CxtThreadProc.html +5 -5
  267. package/SVF-doxygen/html/html/classSVF_1_1CxtThreadStmt.html +5 -5
  268. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +64 -64
  269. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +1 -1
  270. package/SVF-doxygen/html/html/classSVF_1_1DDAPass-members.html +19 -20
  271. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +28 -72
  272. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +5 -5
  273. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +3 -3
  274. package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge.html +1 -1
  275. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +4 -4
  276. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +1 -1
  277. package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +1 -1
  278. package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode.html +1 -1
  279. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +1 -1
  280. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +293 -294
  281. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +0 -3
  282. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +259 -260
  283. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +10 -13
  284. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +284 -285
  285. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +43 -46
  286. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +12 -12
  287. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +324 -325
  288. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +25 -28
  289. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +65 -65
  290. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +1 -1
  291. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +1 -1
  292. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +29 -29
  293. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +28 -28
  294. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +2 -2
  295. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +2 -2
  296. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +3 -3
  297. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +6 -6
  298. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +1 -1
  299. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +13 -13
  300. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +2 -2
  301. package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.html +1 -1
  302. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +3 -3
  303. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +15 -15
  304. package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +1 -1
  305. package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +1 -1
  306. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +3 -3
  307. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +9 -9
  308. package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +17 -17
  309. package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +1 -1
  310. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +2 -2
  311. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
  312. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +37 -37
  313. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +1 -1
  314. package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge.html +1 -1
  315. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +4 -4
  316. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +1 -1
  317. package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +1 -1
  318. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +1 -1
  319. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +23 -23
  320. package/SVF-doxygen/html/html/classSVF_1_1IteratedDominanceFrontier.html +3 -3
  321. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +26 -26
  322. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +3 -3
  323. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +1 -1
  324. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +2 -2
  325. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +15 -15
  326. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +53 -53
  327. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +37 -37
  328. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +119 -119
  329. package/SVF-doxygen/html/html/classSVF_1_1MHPValidator.html +7 -7
  330. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +31 -31
  331. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +1 -1
  332. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +1 -1
  333. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +8 -8
  334. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +13 -13
  335. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +104 -104
  336. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +25 -25
  337. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +9 -9
  338. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +88 -88
  339. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +25 -25
  340. package/SVF-doxygen/html/html/classSVF_1_1MemSSADF.html +1 -1
  341. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +1 -1
  342. package/SVF-doxygen/html/html/classSVF_1_1MergeFunctionRets.html +3 -3
  343. package/SVF-doxygen/html/html/classSVF_1_1MutableDFPTData.html +1 -1
  344. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +2 -2
  345. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +22 -22
  346. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +99 -99
  347. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +2 -2
  348. package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +1 -1
  349. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +3 -3
  350. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +21 -21
  351. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +33 -33
  352. package/SVF-doxygen/html/html/classSVF_1_1PTACFInfoBuilder.html +7 -7
  353. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +5 -5
  354. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +1 -1
  355. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +2 -2
  356. package/SVF-doxygen/html/html/classSVF_1_1PTAStat-members.html +1 -1
  357. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +34 -49
  358. package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator-members.html +26 -25
  359. package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +256 -217
  360. package/SVF-doxygen/html/html/classSVF_1_1PersistentDFPTData.html +3 -3
  361. package/SVF-doxygen/html/html/classSVF_1_1PersistentDiffPTData.html +3 -3
  362. package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +6 -6
  363. package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache.html +6 -6
  364. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +2 -2
  365. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +129 -130
  366. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +107 -150
  367. package/SVF-doxygen/html/html/classSVF_1_1PointsTo.html +6 -6
  368. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +35 -32
  369. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +9 -9
  370. package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +1 -1
  371. package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge.html +1 -1
  372. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +1 -1
  373. package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +1 -1
  374. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  375. package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +1 -1
  376. package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +3 -3
  377. package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +29 -29
  378. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +11 -11
  379. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
  380. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +15 -15
  381. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +5 -5
  382. package/SVF-doxygen/html/html/classSVF_1_1SVFGlobal.html +3 -3
  383. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +21 -21
  384. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +180 -180
  385. package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +1 -1
  386. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +5 -5
  387. package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +5 -5
  388. package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator-members.html +3 -3
  389. package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +35 -31
  390. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +8 -8
  391. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +1 -1
  392. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +4 -4
  393. package/SVF-doxygen/html/html/classSVF_1_1StInfo.html +39 -39
  394. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +240 -241
  395. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +1 -4
  396. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +1 -1
  397. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +1 -1
  398. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +2 -2
  399. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +104 -104
  400. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +5 -7
  401. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +215 -281
  402. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +57 -57
  403. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
  404. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
  405. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +5 -5
  406. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +21 -21
  407. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +3 -3
  408. package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +1 -1
  409. package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +1 -1
  410. package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +1 -1
  411. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +232 -233
  412. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +6 -9
  413. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +33 -33
  414. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +1 -1
  415. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +35 -37
  416. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +28 -28
  417. package/SVF-doxygen/html/html/classSVF_1_1VFGEdge.html +1 -1
  418. package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +2 -2
  419. package/SVF-doxygen/html/html/classSVF_1_1VFPathCond.html +5 -5
  420. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +1 -1
  421. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +1 -1
  422. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +337 -338
  423. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +12 -15
  424. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +8 -8
  425. package/SVF-doxygen/html/html/classSVF_1_1WPAFSSolver.html +2 -2
  426. package/SVF-doxygen/html/html/classSVF_1_1WPAMinimumSolver.html +2 -2
  427. package/SVF-doxygen/html/html/classSVF_1_1WPAPass-members.html +19 -20
  428. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +24 -68
  429. package/SVF-doxygen/html/html/classSVF_1_1WPASCCSolver.html +2 -2
  430. package/SVF-doxygen/html/html/classSVF_1_1WPASolver.html +1 -1
  431. package/SVF-doxygen/html/html/classSVF_1_1Z3Manager.html +4 -4
  432. package/SVF-doxygen/html/html/classes.html +96 -97
  433. package/SVF-doxygen/html/html/classllvm_1_1GraphPrinter.html +1 -1
  434. package/SVF-doxygen/html/html/classllvm_1_1generic__bridge__gep__type__iterator.html +3 -3
  435. package/SVF-doxygen/html/html/functions_a.html +7 -7
  436. package/SVF-doxygen/html/html/functions_b.html +1 -1
  437. package/SVF-doxygen/html/html/functions_d.html +0 -3
  438. package/SVF-doxygen/html/html/functions_e.html +2 -2
  439. package/SVF-doxygen/html/html/functions_f.html +3 -3
  440. package/SVF-doxygen/html/html/functions_func.html +10 -10
  441. package/SVF-doxygen/html/html/functions_func_b.html +1 -1
  442. package/SVF-doxygen/html/html/functions_func_e.html +2 -2
  443. package/SVF-doxygen/html/html/functions_func_g.html +6 -8
  444. package/SVF-doxygen/html/html/functions_func_o.html +1 -2
  445. package/SVF-doxygen/html/html/functions_g.html +5 -7
  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 +11 -10
  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 +6 -6
  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_5.js +2 -2
  502. package/SVF-doxygen/html/html/search/all_6.js +3 -3
  503. package/SVF-doxygen/html/html/search/all_7.js +3 -3
  504. package/SVF-doxygen/html/html/search/all_8.js +0 -1
  505. package/SVF-doxygen/html/html/search/all_9.js +4 -4
  506. package/SVF-doxygen/html/html/search/all_c.js +3 -3
  507. package/SVF-doxygen/html/html/search/all_d.js +2 -2
  508. package/SVF-doxygen/html/html/search/all_e.js +3 -3
  509. package/SVF-doxygen/html/html/search/all_f.js +2 -2
  510. package/SVF-doxygen/html/html/search/classes_7.js +0 -1
  511. package/SVF-doxygen/html/html/search/functions_0.js +4 -4
  512. package/SVF-doxygen/html/html/search/functions_1.js +1 -1
  513. package/SVF-doxygen/html/html/search/functions_10.js +1 -1
  514. package/SVF-doxygen/html/html/search/functions_4.js +2 -2
  515. package/SVF-doxygen/html/html/search/functions_6.js +2 -2
  516. package/SVF-doxygen/html/html/search/functions_d.js +1 -1
  517. package/SVF-doxygen/html/html/search/typedefs_0.js +2 -2
  518. package/SVF-doxygen/html/html/search/typedefs_1.js +2 -2
  519. package/SVF-doxygen/html/html/search/typedefs_10.js +1 -1
  520. package/SVF-doxygen/html/html/search/typedefs_11.js +4 -7
  521. package/SVF-doxygen/html/html/search/typedefs_13.js +2 -2
  522. package/SVF-doxygen/html/html/search/typedefs_14.js +4 -4
  523. package/SVF-doxygen/html/html/search/typedefs_2.js +7 -9
  524. package/SVF-doxygen/html/html/search/typedefs_5.js +2 -2
  525. package/SVF-doxygen/html/html/search/typedefs_6.js +1 -1
  526. package/SVF-doxygen/html/html/search/typedefs_8.js +4 -4
  527. package/SVF-doxygen/html/html/search/typedefs_b.js +1 -1
  528. package/SVF-doxygen/html/html/search/typedefs_c.js +1 -1
  529. package/SVF-doxygen/html/html/search/typedefs_f.js +1 -2
  530. package/SVF-doxygen/html/html/search/variables_14.js +1 -1
  531. package/SVF-doxygen/html/html/search/variables_4.js +0 -1
  532. package/SVF-doxygen/html/html/search/variables_e.js +2 -2
  533. package/SVF-doxygen/html/html/structSVF_1_1Hash.html +3 -3
  534. package/SVF-doxygen/html/html/structSVF_1_1Hash_3_01std_1_1pair_3_01S_00_01T_01_4_01_4.html +5 -5
  535. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  536. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +2 -2
  537. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +2 -2
  538. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +1 -1
  539. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PTACallGraph_01_5_01_4.html +2 -2
  540. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +19 -19
  541. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +19 -19
  542. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CallSite_01_4.html +3 -3
  543. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CondStdSet_3_01Element_01_4_01_4.html +1 -1
  544. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtDPItem_01_4.html +1 -1
  545. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtProc_01_4.html +1 -1
  546. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtStmtDPItem_3_01LocCond_01_4_01_4.html +1 -1
  547. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtStmt_01_4.html +1 -1
  548. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1LocationSet_01_4.html +1 -1
  549. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1StmtDPItem_3_01LocCond_01_4_01_4.html +1 -1
  550. package/SVF-doxygen/html/html/structstd_1_1hash_3_01llvm_1_1SparseBitVector_3_01N_01_4_01_4.html +3 -3
  551. package/SVF-doxygen/html/html/structstd_1_1hash_3_01std_1_1vector_3_01T_01_4_01_4.html +3 -3
  552. package/SVF-doxygen/html/html/svf-ex_8cpp.html +4 -4
  553. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +6 -6
  554. package/clean.sh +2 -2
  555. package/include/DDA/DDAPass.h +0 -6
  556. package/include/Graphs/VFGNode.h +4 -18
  557. package/include/MemoryModel/PointerAnalysis.h +0 -4
  558. package/include/MemoryModel/PointerAnalysisImpl.h +0 -10
  559. package/include/MemoryModel/SVFVariables.h +4 -4
  560. package/include/MemoryModel/SymbolTableInfo.h +0 -11
  561. package/include/SABER/PathCondAllocator.h +9 -2
  562. package/include/SABER/SaberAnnotator.h +4 -4
  563. package/include/SVF-FE/BasicTypes.h +41 -2
  564. package/include/SVF-FE/LLVMUtil.h +7 -0
  565. package/include/Util/BasicTypes.h +0 -35
  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/SVFVariables.cpp +2 -2
  576. package/lib/MemoryModel/SymbolTableInfo.cpp +0 -5
  577. package/lib/SABER/PathCondAllocator.cpp +32 -27
  578. package/lib/SABER/ProgSlice.cpp +7 -4
  579. package/lib/SABER/SaberAnnotator.cpp +8 -8
  580. package/lib/SVF-FE/BreakConstantExpr.cpp +1 -0
  581. package/lib/SVF-FE/LLVMUtil.cpp +3 -2
  582. package/lib/SVF-FE/SVFIRBuilder.cpp +1 -1
  583. package/lib/Util/PTAStat.cpp +3 -1
  584. package/package.json +1 -1
@@ -81,7 +81,7 @@ $(function() {
81
81
  <div class="ttc" id="classSVF_1_1PTData_html_a9ae6037637d8b9acb323333f491f4a7d"><div class="ttname"><a href="classSVF_1_1PTData.html#a9ae6037637d8b9acb323333f491f4a7d">SVF::PTData::getPts</a></div><div class="ttdeci">virtual const DataSet &amp; getPts(const Key &amp;var)=0</div><div class="ttdoc">Get points-to set of var. </div></div>
82
82
  <div class="ttc" id="classSVF_1_1DFPTData_html"><div class="ttname"><a href="classSVF_1_1DFPTData.html">SVF::DFPTData</a></div><div class="ttdef"><b>Definition:</b> <a href="AbstractPointsToDS_8h_source.html#l00160">AbstractPointsToDS.h:160</a></div></div>
83
83
  <div class="ttc" id="classSVF_1_1DiffPTData_html_a76b2abf95bf425044e8a6c4141bd470b"><div class="ttname"><a href="classSVF_1_1DiffPTData.html#a76b2abf95bf425044e8a6c4141bd470b">SVF::DiffPTData::PTDataTy</a></div><div class="ttdeci">BasePTData::PTDataTy PTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="AbstractPointsToDS_8h_source.html#l00119">AbstractPointsToDS.h:119</a></div></div>
84
- <div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map&lt; Key, Value, Hash, KeyEqual, Allocator &gt; Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00102">SVFBasicTypes.h:102</a></div></div>
84
+ <div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map&lt; Key, Value, Hash, KeyEqual, Allocator &gt; Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00106">SVFBasicTypes.h:106</a></div></div>
85
85
  <div class="ttc" id="classSVF_1_1PTData_html_ad45879017d8fdeedc987ce35c4eba1a5"><div class="ttname"><a href="classSVF_1_1PTData.html#ad45879017d8fdeedc987ce35c4eba1a5">SVF::PTData::clear</a></div><div class="ttdeci">virtual void clear()=0</div><div class="ttdoc">Clears all points-to sets as if nothing is stored. </div></div>
86
86
  <div class="ttc" id="classSVF_1_1VersionedPTData_html_a9833b47df24ed821a55d5ce9a3917f1f"><div class="ttname"><a href="classSVF_1_1VersionedPTData.html#a9833b47df24ed821a55d5ce9a3917f1f">SVF::VersionedPTData::BasePTData</a></div><div class="ttdeci">PTData&lt; Key, KeySet, Data, DataSet &gt; BasePTData</div><div class="ttdef"><b>Definition:</b> <a href="AbstractPointsToDS_8h_source.html#l00238">AbstractPointsToDS.h:238</a></div></div>
87
87
  <div class="ttc" id="SVFBasicTypes_8h_html"><div class="ttname"><a href="SVFBasicTypes_8h.html">SVFBasicTypes.h</a></div></div>
@@ -67,9 +67,9 @@ $(function() {
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
69
  <a href="AndersenLCD_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">//===- AndersenLCD.cpp -- LCD based field-sensitive Andersen&#39;s analysis-------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * AndersenLCD.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: 13 Sep. 2018</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Yuxiang Lei</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</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="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<a class="code" href="classSVF_1_1AndersenLCD.html">AndersenLCD</a>* <a class="code" href="classSVF_1_1AndersenLCD.html#ae4e979d6e7fa83c8961d0caf0ca0f54e">AndersenLCD::lcdAndersen</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#a52399086e540c2adabc03a978155f55d"> 39</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenLCD.html#a52399086e540c2adabc03a978155f55d">AndersenLCD::solveWorklist</a>()</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;{</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">while</span> (!isWorklistEmpty())</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// Merge detected SCC cycles</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; mergeSCC();</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = popFromWorklist();</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; collapsePWCNode(nodeId);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="comment">// Keep solving until workList is empty.</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; processNode(nodeId);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; collapseFields();</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#a139d80e25fe713194f719581915d36d5"> 57</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenLCD.html#a139d80e25fe713194f719581915d36d5">AndersenLCD::handleCopyGep</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node)</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;{</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordtype">double</span> propStart = stat-&gt;getClk();</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; computeDiffPts(nodeId);</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; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge : node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#ab77173aa8af6155b569f20ff0cdcec72">getCopyOutEdges</a>())</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstNodeId = edge-&gt;getDstID();</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; srcPts = getPts(nodeId);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; dstPts = getPts(dstNodeId);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="comment">// In one edge, if the pts of src node equals to that of dst node, and the edge</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="comment">// is never met, push it into &#39;metEdges&#39; and push the dst node into &#39;lcdCandidates&#39;</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">if</span> (!srcPts.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>() &amp;&amp; srcPts == dstPts &amp;&amp; !isMetEdge(edge))</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; addMetEdge(edge);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; addLCDCandidate((edge)-&gt;getDstID());</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; processCopy(nodeId, edge);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge : node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a19d3d2c996ba821227a836717e5443c8">getGepOutEdges</a>())</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepCGEdge.html">GepCGEdge</a>* gepEdge = SVFUtil::dyn_cast&lt;GepCGEdge&gt;(edge))</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; processGep(nodeId, gepEdge);</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;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordtype">double</span> propEnd = stat-&gt;getClk();</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; timeOfProcessCopyGep += (propEnd - propStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;}</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#a132fe3985f04b55b5e172649db7e44d7"> 91</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenLCD.html#a132fe3985f04b55b5e172649db7e44d7">AndersenLCD::mergeSCC</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; <span class="keywordflow">if</span> (hasLCDCandidate())</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; {</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; SCCDetect();</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; cleanLCDCandidate();</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;}</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#a078a58b3b3f18cca4e09ff5a9a8ed791"> 103</a></span>&#160;<a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; <a class="code" href="classSVF_1_1AndersenLCD.html#a078a58b3b3f18cca4e09ff5a9a8ed791">AndersenLCD::SCCDetect</a>()</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; numOfSCCDetection++;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> sccCandidates;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; sccCandidates.clear();</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">for</span> (NodeSet::iterator it = lcdCandidates.begin(); it != lcdCandidates.end(); ++it)</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">if</span> (sccRepNode(*it) == *it)</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; sccCandidates.insert(*it);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordtype">double</span> sccStart = stat-&gt;getClk();</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; getSCCDetector()-&gt;find(sccCandidates);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordtype">double</span> sccEnd = stat-&gt;getClk();</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; timeOfSCCDetection += (sccEnd - sccStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordtype">double</span> mergeStart = stat-&gt;getClk();</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; mergeSccCycle();</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordtype">double</span> mergeEnd = stat-&gt;getClk();</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; timeOfSCCMerges += (mergeEnd - mergeStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</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">return</span> getSCCDetector()-&gt;topoNodeStack();</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;}</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenLCD.html#ac78efb1e4246c06c64dad1d368ed032d"> 131</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenLCD.html#ac78efb1e4246c06c64dad1d368ed032d">AndersenLCD::mergeSrcToTgt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId)</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;{</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">if</span>(nodeId==newRepId)</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; updatePropaPts(newRepId, nodeId);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; unionPts(newRepId,nodeId);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; pushIntoWorklist(newRepId);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = consCG-&gt;getConstraintNode(nodeId);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordtype">bool</span> gepInsideScc = consCG-&gt;moveEdgesToRepNode(node, consCG-&gt;getConstraintNode(newRepId));</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; updateNodeRepAndSubs(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(),newRepId);</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; consCG-&gt;removeConstraintNode(node);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">return</span> gepInsideScc;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;}</div><div class="ttc" id="Andersen_8h_html"><div class="ttname"><a href="Andersen_8h.html">Andersen.h</a></div></div>
70
- <div class="ttc" id="namespaceSVF_html_a212231734fa43d5c7414137deaac7df3"><div class="ttname"><a href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">SVF::NodeSet</a></div><div class="ttdeci">Set&lt; NodeID &gt; NodeSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00116">SVFBasicTypes.h:116</a></div></div>
70
+ <div class="ttc" id="namespaceSVF_html_a212231734fa43d5c7414137deaac7df3"><div class="ttname"><a href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">SVF::NodeSet</a></div><div class="ttdeci">Set&lt; NodeID &gt; NodeSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00118">SVFBasicTypes.h:118</a></div></div>
71
71
  <div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
72
- <div class="ttc" id="namespaceSVF_html_a1811127aebdb9c926e39d155e20b3dc0"><div class="ttname"><a href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">SVF::NodeStack</a></div><div class="ttdeci">std::stack&lt; NodeID &gt; NodeStack</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00121">SVFBasicTypes.h:121</a></div></div>
72
+ <div class="ttc" id="namespaceSVF_html_a1811127aebdb9c926e39d155e20b3dc0"><div class="ttname"><a href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">SVF::NodeStack</a></div><div class="ttdeci">std::stack&lt; NodeID &gt; NodeStack</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00123">SVFBasicTypes.h:123</a></div></div>
73
73
  <div class="ttc" id="classSVF_1_1GepCGEdge_html"><div class="ttname"><a href="classSVF_1_1GepCGEdge.html">SVF::GepCGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00225">ConsGEdge.h:225</a></div></div>
74
74
  <div class="ttc" id="classSVF_1_1AndersenLCD_html_a52399086e540c2adabc03a978155f55d"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#a52399086e540c2adabc03a978155f55d">SVF::AndersenLCD::solveWorklist</a></div><div class="ttdeci">void solveWorklist()</div><div class="ttdef"><b>Definition:</b> <a href="AndersenLCD_8cpp_source.html#l00039">AndersenLCD.cpp:39</a></div></div>
75
75
  <div class="ttc" id="classSVF_1_1AndersenLCD_html_ae4e979d6e7fa83c8961d0caf0ca0f54e"><div class="ttname"><a href="classSVF_1_1AndersenLCD.html#ae4e979d6e7fa83c8961d0caf0ca0f54e">SVF::AndersenLCD::lcdAndersen</a></div><div class="ttdeci">static AndersenLCD * lcdAndersen</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00473">Andersen.h:473</a></div></div>
@@ -66,10 +66,10 @@ $(function() {
66
66
  <div class="title">AndersenSCD.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="AndersenSCD_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">//===- AndersenSCD.cpp -- SCD based field-sensitive Andersen&#39;s analysis-------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * AndersenSCD.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: 09, Feb, 2019</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Yuxiang Lei</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="AndersenSFR_8h.html">WPA/AndersenSFR.h</a>&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</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="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<a class="code" href="classSVF_1_1AndersenSCD.html">AndersenSCD</a>* <a class="code" href="classSVF_1_1AndersenSCD.html#a1d143f104c0bfb5258b7129d0eceb4cd">AndersenSCD::scdAndersen</a> = <span class="keyword">nullptr</span>;</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_1AndersenSCD.html#a98fac4ecfe203666178e2ace39da81e2"> 42</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a98fac4ecfe203666178e2ace39da81e2">AndersenSCD::solveWorklist</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; <span class="comment">// Initialize the nodeStack via a whole SCC detection</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="comment">// Nodes in nodeStack are in topological order by default.</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; nodeStack = SCCDetect();</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nId : sccCandidates)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; pushIntoWorklist(nId);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; sccCandidates.clear();</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="comment">// propagate point-to sets</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">while</span> (!nodeStack.empty())</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = nodeStack.top();</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; nodeStack.pop();</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="keywordflow">if</span> (sccRepNode(nodeId) == nodeId)</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; collapsePWCNode(nodeId);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">if</span> (isInWorklist(nodeId))</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="comment">// push the rep of node into worklist</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; pushIntoWorklist(nodeId);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordtype">double</span> propStart = stat-&gt;getClk();</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="comment">// propagate pts through copy and gep edges</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = consCG-&gt;getConstraintNode(nodeId);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; handleCopyGep(node);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordtype">double</span> propEnd = stat-&gt;getClk();</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; timeOfProcessCopyGep += (propEnd - propStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; collapseFields();</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; }</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; <span class="comment">// New nodes will be inserted into workList during processing.</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">while</span> (!isWorklistEmpty())</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = popFromWorklist();</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordtype">double</span> insertStart = stat-&gt;getClk();</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="comment">// add copy edges via processing load or store edges</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = consCG-&gt;getConstraintNode(nodeId);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; handleLoadStore(node);</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordtype">double</span> insertEnd = stat-&gt;getClk();</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; timeOfProcessLoadStore += (insertEnd - insertStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;}</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"> 91</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#a70f69baf47587b742b5013a63a3ce593"> 95</a></span>&#160;<a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; <a class="code" href="classSVF_1_1AndersenSCD.html#a70f69baf47587b742b5013a63a3ce593">AndersenSCD::SCCDetect</a>()</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;{</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; numOfSCCDetection++;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordtype">double</span> sccStart = stat-&gt;getClk();</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; getSCCDetector()-&gt;find(sccCandidates);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordtype">double</span> sccEnd = stat-&gt;getClk();</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; timeOfSCCDetection += (sccEnd - sccStart)/<a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordtype">double</span> mergeStart = stat-&gt;getClk();</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; mergeSccCycle();</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordtype">double</span> mergeEnd = stat-&gt;getClk();</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; timeOfSCCMerges += (mergeEnd - mergeStart)/<a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</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> (!mergePWC())</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; <span class="keywordtype">double</span> sccStart = stat-&gt;getClk();</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; PWCDetect();</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordtype">double</span> sccEnd = stat-&gt;getClk();</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; timeOfSCCDetection += (sccEnd - sccStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</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;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">return</span> getSCCDetector()-&gt;topoNodeStack();</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;}</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;</div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#af155524f6f78424a846fe2eb575bb40a"> 124</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#af155524f6f78424a846fe2eb575bb40a">AndersenSCD::PWCDetect</a>()</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;{</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="comment">// replace scc candidates by their reps</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> tmpSccCandidates = sccCandidates;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; sccCandidates.clear();</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> candidate : tmpSccCandidates)</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; sccCandidates.insert(sccRepNode(candidate));</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; tmpSccCandidates.clear();</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="comment">// set scc edge type as direct edge</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html#a6e59b815d784bc1a9437290ff0e1e28c">ConstraintNode::SCCEdgeFlag</a> f = <a class="code" href="classSVF_1_1ConstraintNode.html#a0fd9fca5ed82cf83dbd825d23c63783a">ConstraintNode::sccEdgeFlag</a>;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; setSCCEdgeFlag(<a class="code" href="classSVF_1_1ConstraintNode.html#a6e59b815d784bc1a9437290ff0e1e28ca7f8c92a2f50277fee80899235ae477f9">ConstraintNode::Direct</a>);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; getSCCDetector()-&gt;find(sccCandidates);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="comment">// reset scc edge type</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; setSCCEdgeFlag(f);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;}</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#aa0a496376f7bea2c417ef83c51d19a61"> 147</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#aa0a496376f7bea2c417ef83c51d19a61">AndersenSCD::handleCopyGep</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node)</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;{</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">if</span> (!mergePWC() &amp;&amp; getSCCDetector()-&gt;subNodes(nodeId).count() &gt; 1)</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; processPWC(node);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(isInWorklist(nodeId))</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#ab069683dd6ca563113efbde2813ab35e">Andersen::handleCopyGep</a>(node);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;}</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;</div><div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#aaee864bb1fc5b5d4643e145d80ecfb8b"> 161</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#aaee864bb1fc5b5d4643e145d80ecfb8b">AndersenSCD::processPWC</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* rep)</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;{</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> repId = rep-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> pwcNodes;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nId : getSCCDetector()-&gt;subNodes(repId))</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; pwcNodes.insert(nId);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a> tmpWorkList;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> subId : pwcNodes)</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">if</span> (isInWorklist(subId))</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; tmpWorkList.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(subId);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">while</span> (!tmpWorkList.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = tmpWorkList.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; computeDiffPts(nodeId);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">if</span> (!getDiffPts(nodeId).<a class="code" href="cuddInt_8c.html#a5beb39637a978181c7c17714ac96672e">empty</a>())</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_1ConstraintNode.html">ConstraintNode</a> *node = consCG-&gt;getConstraintNode(nodeId);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge : node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#ab77173aa8af6155b569f20ff0cdcec72">getCopyOutEdges</a>())</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; {</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordtype">bool</span> changed = processCopy(nodeId, edge);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">if</span> (changed &amp;&amp; pwcNodes.find(edge-&gt;getDstID()) != pwcNodes.end())</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; tmpWorkList.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(edge-&gt;getDstID());</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; }</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge : node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a19d3d2c996ba821227a836717e5443c8">getGepOutEdges</a>())</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepCGEdge.html">GepCGEdge</a> *gepEdge = SVFUtil::dyn_cast&lt;GepCGEdge&gt;(edge))</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; {</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordtype">bool</span> changed = processGep(nodeId, gepEdge);</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">if</span> (changed &amp;&amp; pwcNodes.find(edge-&gt;getDstID()) != pwcNodes.end())</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; tmpWorkList.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(edge-&gt;getDstID());</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; }</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;}</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#a7ae683eb8c607a0e742b44e3019b8cbc"> 206</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a7ae683eb8c607a0e742b44e3019b8cbc">AndersenSCD::handleLoadStore</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node)</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="keywordtype">double</span> insertStart = stat-&gt;getClk();</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="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="comment">// handle load</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">ConstraintNode::const_iterator</a> it = node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#af69c7e623ab5a36644b6aeabaa1a1e28">outgoingLoadsBegin</a>(),</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; eit = node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a134e8ed040d7749c2b9a02662115f746">outgoingLoadsEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> piter = getPts(nodeId).begin(), epiter =</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; getPts(nodeId).end(); piter != epiter; ++piter)</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = *piter;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">if</span> (processLoad(ptd, *it))</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; reanalyze = <span class="keyword">true</span>;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="comment">// handle store</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">ConstraintNode::const_iterator</a> it = node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a5a90b39f9e5769bde44a673806270714">incomingStoresBegin</a>(),</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; eit = node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a8d58f5224728bb6811f12c94826167f6">incomingStoresEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> piter = getPts(nodeId).begin(), epiter =</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; getPts(nodeId).end(); piter != epiter; ++piter)</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="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = *piter;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">if</span> (processStore(ptd, *it))</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; {</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; reanalyze = <span class="keyword">true</span>;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordtype">double</span> insertEnd = stat-&gt;getClk();</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; timeOfProcessLoadStore += (insertEnd - insertStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</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;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#a52704e25a1e3b30ddf8676811f4e1584"> 245</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a52704e25a1e3b30ddf8676811f4e1584">AndersenSCD::processAddr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a> *addr)</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; numOfProcessedAddr++;</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = addr-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = addr-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>();</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; addPts(dst,src);</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; addSccCandidate(dst);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;}</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;</div><div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#a0b5990e8b0230c019a2bcedbab354cba"> 259</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a0b5990e8b0230c019a2bcedbab354cba">AndersenSCD::addCopyEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst)</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;{</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57">Andersen::addCopyEdge</a>(src, dst))</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; {</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; addSccCandidate(src);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</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; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;}</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#a512c636bdaafe6a3ac8f0cc29392c573"> 273</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a512c636bdaafe6a3ac8f0cc29392c573">AndersenSCD::updateCallGraph</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">PointerAnalysis::CallSiteToFunPtrMap</a>&amp; callsites)</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;{</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordtype">double</span> cgUpdateStart = stat-&gt;getClk();</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a35bd5f0fb2c146199e9f1aa6a19b4062">CallEdgeMap</a> newEdges;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; onTheFlyCallGraphSolve(callsites,newEdges);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <a class="code" href="namespaceSVF.html#ac82022f3f81965c3ce9b26c299f537a7">NodePairSet</a> cpySrcNodes; </div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">for</span>(CallEdgeMap::iterator it = newEdges.begin(), eit = newEdges.end(); it!=eit; ++it )</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(it-&gt;first-&gt;getCallSite());</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">for</span>(FunctionSet::iterator cit = it-&gt;second.begin(), ecit = it-&gt;second.end(); cit!=ecit; ++cit)</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; connectCaller2CalleeParams(cs,*cit,cpySrcNodes);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; }</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordtype">double</span> cgUpdateEnd = stat-&gt;getClk();</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; timeOfUpdateCallGraph += (cgUpdateEnd - cgUpdateStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">return</span> (!newEdges.empty());</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a212231734fa43d5c7414137deaac7df3"><div class="ttname"><a href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">SVF::NodeSet</a></div><div class="ttdeci">Set&lt; NodeID &gt; NodeSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00116">SVFBasicTypes.h:116</a></div></div>
69
+ <a href="AndersenSCD_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">//===- AndersenSCD.cpp -- SCD based field-sensitive Andersen&#39;s analysis-------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * AndersenSCD.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: 09, Feb, 2019</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Yuxiang Lei</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="AndersenSFR_8h.html">WPA/AndersenSFR.h</a>&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</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="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<a class="code" href="classSVF_1_1AndersenSCD.html">AndersenSCD</a>* <a class="code" href="classSVF_1_1AndersenSCD.html#a1d143f104c0bfb5258b7129d0eceb4cd">AndersenSCD::scdAndersen</a> = <span class="keyword">nullptr</span>;</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_1AndersenSCD.html#a98fac4ecfe203666178e2ace39da81e2"> 42</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a98fac4ecfe203666178e2ace39da81e2">AndersenSCD::solveWorklist</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; <span class="comment">// Initialize the nodeStack via a whole SCC detection</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="comment">// Nodes in nodeStack are in topological order by default.</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; nodeStack = SCCDetect();</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nId : sccCandidates)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; pushIntoWorklist(nId);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; sccCandidates.clear();</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="comment">// propagate point-to sets</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">while</span> (!nodeStack.empty())</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = nodeStack.top();</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; nodeStack.pop();</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="keywordflow">if</span> (sccRepNode(nodeId) == nodeId)</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; collapsePWCNode(nodeId);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">if</span> (isInWorklist(nodeId))</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="comment">// push the rep of node into worklist</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; pushIntoWorklist(nodeId);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordtype">double</span> propStart = stat-&gt;getClk();</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="comment">// propagate pts through copy and gep edges</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = consCG-&gt;getConstraintNode(nodeId);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; handleCopyGep(node);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordtype">double</span> propEnd = stat-&gt;getClk();</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; timeOfProcessCopyGep += (propEnd - propStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; collapseFields();</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; }</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; <span class="comment">// New nodes will be inserted into workList during processing.</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">while</span> (!isWorklistEmpty())</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = popFromWorklist();</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordtype">double</span> insertStart = stat-&gt;getClk();</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="comment">// add copy edges via processing load or store edges</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = consCG-&gt;getConstraintNode(nodeId);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; handleLoadStore(node);</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordtype">double</span> insertEnd = stat-&gt;getClk();</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; timeOfProcessLoadStore += (insertEnd - insertStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;}</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"> 91</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#a70f69baf47587b742b5013a63a3ce593"> 95</a></span>&#160;<a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; <a class="code" href="classSVF_1_1AndersenSCD.html#a70f69baf47587b742b5013a63a3ce593">AndersenSCD::SCCDetect</a>()</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;{</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; numOfSCCDetection++;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordtype">double</span> sccStart = stat-&gt;getClk();</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; getSCCDetector()-&gt;find(sccCandidates);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordtype">double</span> sccEnd = stat-&gt;getClk();</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; timeOfSCCDetection += (sccEnd - sccStart)/<a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordtype">double</span> mergeStart = stat-&gt;getClk();</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; mergeSccCycle();</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordtype">double</span> mergeEnd = stat-&gt;getClk();</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; timeOfSCCMerges += (mergeEnd - mergeStart)/<a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</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> (!mergePWC())</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; <span class="keywordtype">double</span> sccStart = stat-&gt;getClk();</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; PWCDetect();</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordtype">double</span> sccEnd = stat-&gt;getClk();</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; timeOfSCCDetection += (sccEnd - sccStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</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;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">return</span> getSCCDetector()-&gt;topoNodeStack();</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;}</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;</div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#af155524f6f78424a846fe2eb575bb40a"> 124</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#af155524f6f78424a846fe2eb575bb40a">AndersenSCD::PWCDetect</a>()</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;{</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="comment">// replace scc candidates by their reps</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> tmpSccCandidates = sccCandidates;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; sccCandidates.clear();</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> candidate : tmpSccCandidates)</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; sccCandidates.insert(sccRepNode(candidate));</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; tmpSccCandidates.clear();</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="comment">// set scc edge type as direct edge</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html#a6e59b815d784bc1a9437290ff0e1e28c">ConstraintNode::SCCEdgeFlag</a> f = <a class="code" href="classSVF_1_1ConstraintNode.html#a0fd9fca5ed82cf83dbd825d23c63783a">ConstraintNode::sccEdgeFlag</a>;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; setSCCEdgeFlag(<a class="code" href="classSVF_1_1ConstraintNode.html#a6e59b815d784bc1a9437290ff0e1e28ca7f8c92a2f50277fee80899235ae477f9">ConstraintNode::Direct</a>);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; getSCCDetector()-&gt;find(sccCandidates);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="comment">// reset scc edge type</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; setSCCEdgeFlag(f);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;}</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#aa0a496376f7bea2c417ef83c51d19a61"> 147</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#aa0a496376f7bea2c417ef83c51d19a61">AndersenSCD::handleCopyGep</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node)</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;{</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">if</span> (!mergePWC() &amp;&amp; getSCCDetector()-&gt;subNodes(nodeId).count() &gt; 1)</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; processPWC(node);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(isInWorklist(nodeId))</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#ab069683dd6ca563113efbde2813ab35e">Andersen::handleCopyGep</a>(node);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;}</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;</div><div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#aaee864bb1fc5b5d4643e145d80ecfb8b"> 161</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#aaee864bb1fc5b5d4643e145d80ecfb8b">AndersenSCD::processPWC</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* rep)</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;{</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> repId = rep-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> pwcNodes;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nId : getSCCDetector()-&gt;subNodes(repId))</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; pwcNodes.insert(nId);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a> tmpWorkList;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> subId : pwcNodes)</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">if</span> (isInWorklist(subId))</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; tmpWorkList.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(subId);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">while</span> (!tmpWorkList.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = tmpWorkList.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; computeDiffPts(nodeId);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">if</span> (!getDiffPts(nodeId).<a class="code" href="cuddInt_8c.html#a5beb39637a978181c7c17714ac96672e">empty</a>())</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_1ConstraintNode.html">ConstraintNode</a> *node = consCG-&gt;getConstraintNode(nodeId);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge : node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#ab77173aa8af6155b569f20ff0cdcec72">getCopyOutEdges</a>())</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; {</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordtype">bool</span> changed = processCopy(nodeId, edge);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">if</span> (changed &amp;&amp; pwcNodes.find(edge-&gt;getDstID()) != pwcNodes.end())</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; tmpWorkList.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(edge-&gt;getDstID());</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; }</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge : node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a19d3d2c996ba821227a836717e5443c8">getGepOutEdges</a>())</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepCGEdge.html">GepCGEdge</a> *gepEdge = SVFUtil::dyn_cast&lt;GepCGEdge&gt;(edge))</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; {</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordtype">bool</span> changed = processGep(nodeId, gepEdge);</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">if</span> (changed &amp;&amp; pwcNodes.find(edge-&gt;getDstID()) != pwcNodes.end())</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; tmpWorkList.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(edge-&gt;getDstID());</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; }</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;}</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#a7ae683eb8c607a0e742b44e3019b8cbc"> 206</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a7ae683eb8c607a0e742b44e3019b8cbc">AndersenSCD::handleLoadStore</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node)</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="keywordtype">double</span> insertStart = stat-&gt;getClk();</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="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="comment">// handle load</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">ConstraintNode::const_iterator</a> it = node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#af69c7e623ab5a36644b6aeabaa1a1e28">outgoingLoadsBegin</a>(),</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; eit = node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a134e8ed040d7749c2b9a02662115f746">outgoingLoadsEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> piter = getPts(nodeId).begin(), epiter =</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; getPts(nodeId).end(); piter != epiter; ++piter)</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = *piter;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">if</span> (processLoad(ptd, *it))</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; reanalyze = <span class="keyword">true</span>;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="comment">// handle store</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">ConstraintNode::const_iterator</a> it = node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a5a90b39f9e5769bde44a673806270714">incomingStoresBegin</a>(),</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; eit = node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a8d58f5224728bb6811f12c94826167f6">incomingStoresEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> piter = getPts(nodeId).begin(), epiter =</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; getPts(nodeId).end(); piter != epiter; ++piter)</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="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = *piter;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">if</span> (processStore(ptd, *it))</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; {</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; reanalyze = <span class="keyword">true</span>;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordtype">double</span> insertEnd = stat-&gt;getClk();</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; timeOfProcessLoadStore += (insertEnd - insertStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</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;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#a52704e25a1e3b30ddf8676811f4e1584"> 245</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a52704e25a1e3b30ddf8676811f4e1584">AndersenSCD::processAddr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a> *addr)</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; numOfProcessedAddr++;</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = addr-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = addr-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>();</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; addPts(dst,src);</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; addSccCandidate(dst);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;}</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;</div><div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#a0b5990e8b0230c019a2bcedbab354cba"> 259</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a0b5990e8b0230c019a2bcedbab354cba">AndersenSCD::addCopyEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst)</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;{</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57">Andersen::addCopyEdge</a>(src, dst))</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; {</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; addSccCandidate(src);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</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; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;}</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#a512c636bdaafe6a3ac8f0cc29392c573"> 273</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a512c636bdaafe6a3ac8f0cc29392c573">AndersenSCD::updateCallGraph</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">PointerAnalysis::CallSiteToFunPtrMap</a>&amp; callsites)</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;{</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordtype">double</span> cgUpdateStart = stat-&gt;getClk();</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a35bd5f0fb2c146199e9f1aa6a19b4062">CallEdgeMap</a> newEdges;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; onTheFlyCallGraphSolve(callsites,newEdges);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <a class="code" href="namespaceSVF.html#ac82022f3f81965c3ce9b26c299f537a7">NodePairSet</a> cpySrcNodes; </div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">for</span>(CallEdgeMap::iterator it = newEdges.begin(), eit = newEdges.end(); it!=eit; ++it )</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(it-&gt;first-&gt;getCallSite());</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">for</span>(FunctionSet::iterator cit = it-&gt;second.begin(), ecit = it-&gt;second.end(); cit!=ecit; ++cit)</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; connectCaller2CalleeParams(cs,*cit,cpySrcNodes);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; }</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordtype">double</span> cgUpdateEnd = stat-&gt;getClk();</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; timeOfUpdateCallGraph += (cgUpdateEnd - cgUpdateStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">return</span> (!newEdges.empty());</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a212231734fa43d5c7414137deaac7df3"><div class="ttname"><a href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">SVF::NodeSet</a></div><div class="ttdeci">Set&lt; NodeID &gt; NodeSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00118">SVFBasicTypes.h:118</a></div></div>
70
70
  <div class="ttc" id="classSVF_1_1GenericEdge_html_ad9edb45e74ae675d9da82f5acf02d56e"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">SVF::GenericEdge::getDstID</a></div><div class="ttdeci">NodeID getDstID() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00077">GenericGraph.h:77</a></div></div>
71
71
  <div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
72
- <div class="ttc" id="namespaceSVF_html_a1811127aebdb9c926e39d155e20b3dc0"><div class="ttname"><a href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">SVF::NodeStack</a></div><div class="ttdeci">std::stack&lt; NodeID &gt; NodeStack</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00121">SVFBasicTypes.h:121</a></div></div>
72
+ <div class="ttc" id="namespaceSVF_html_a1811127aebdb9c926e39d155e20b3dc0"><div class="ttname"><a href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">SVF::NodeStack</a></div><div class="ttdeci">std::stack&lt; NodeID &gt; NodeStack</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00123">SVFBasicTypes.h:123</a></div></div>
73
73
  <div class="ttc" id="classSVF_1_1FIFOWorkList_html_a7056704c224dfb4b57287fe90c004aa8"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">SVF::FIFOWorkList::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00146">WorkList.h:146</a></div></div>
74
74
  <div class="ttc" id="classSVF_1_1PointsTo_1_1PointsToIterator_html"><div class="ttname"><a href="classSVF_1_1PointsTo_1_1PointsToIterator.html">SVF::PointsTo::PointsToIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00174">PointsTo.h:174</a></div></div>
75
75
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_ab1868f04de44f6fe1e9ac14f3d4ee56b"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">SVF::ConstraintNode::const_iterator</a></div><div class="ttdeci">ConstraintEdge::ConstraintEdgeSetTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00045">ConsGNode.h:45</a></div></div>
@@ -78,7 +78,7 @@ $(function() {
78
78
  <div class="ttc" id="classSVF_1_1GepCGEdge_html"><div class="ttname"><a href="classSVF_1_1GepCGEdge.html">SVF::GepCGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00225">ConsGEdge.h:225</a></div></div>
79
79
  <div class="ttc" id="cuddInt_8c_html_a5beb39637a978181c7c17714ac96672e"><div class="ttname"><a href="cuddInt_8c.html#a5beb39637a978181c7c17714ac96672e">empty</a></div><div class="ttdeci">static DdNode * empty</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8c_source.html#l28567">cuddInt.c:28567</a></div></div>
80
80
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_a6e59b815d784bc1a9437290ff0e1e28ca7f8c92a2f50277fee80899235ae477f9"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a6e59b815d784bc1a9437290ff0e1e28ca7f8c92a2f50277fee80899235ae477f9">SVF::ConstraintNode::Direct</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00050">ConsGNode.h:50</a></div></div>
81
- <div class="ttc" id="namespaceSVF_html_ac82022f3f81965c3ce9b26c299f537a7"><div class="ttname"><a href="namespaceSVF.html#ac82022f3f81965c3ce9b26c299f537a7">SVF::NodePairSet</a></div><div class="ttdeci">Set&lt; NodePair &gt; NodePairSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00117">SVFBasicTypes.h:117</a></div></div>
81
+ <div class="ttc" id="namespaceSVF_html_ac82022f3f81965c3ce9b26c299f537a7"><div class="ttname"><a href="namespaceSVF.html#ac82022f3f81965c3ce9b26c299f537a7">SVF::NodePairSet</a></div><div class="ttdeci">Set&lt; NodePair &gt; NodePairSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00119">SVFBasicTypes.h:119</a></div></div>
82
82
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_a5a90b39f9e5769bde44a673806270714"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a5a90b39f9e5769bde44a673806270714">SVF::ConstraintNode::incomingStoresBegin</a></div><div class="ttdeci">const_iterator incomingStoresBegin() const</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00283">ConsGNode.h:283</a></div></div>
83
83
  <div class="ttc" id="classSVF_1_1AndersenSCD_html_aa0a496376f7bea2c417ef83c51d19a61"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#aa0a496376f7bea2c417ef83c51d19a61">SVF::AndersenSCD::handleCopyGep</a></div><div class="ttdeci">virtual void handleCopyGep(ConstraintNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00147">AndersenSCD.cpp:147</a></div></div>
84
84
  <div class="ttc" id="classSVF_1_1AndersenSCD_html_a512c636bdaafe6a3ac8f0cc29392c573"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#a512c636bdaafe6a3ac8f0cc29392c573">SVF::AndersenSCD::updateCallGraph</a></div><div class="ttdeci">virtual bool updateCallGraph(const CallSiteToFunPtrMap &amp;callsites)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00273">AndersenSCD.cpp:273</a></div></div>
@@ -103,7 +103,7 @@ $(function() {
103
103
  <div class="ttc" id="classSVF_1_1Andersen_html_a8ba593bd16d4436310f2f25e75687c57"><div class="ttname"><a href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57">SVF::Andersen::addCopyEdge</a></div><div class="ttdeci">virtual bool addCopyEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add copy edge on constraint graph. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00328">Andersen.h:328</a></div></div>
104
104
  <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>
105
105
  <div class="ttc" id="classSVF_1_1AndersenSCD_html_aaee864bb1fc5b5d4643e145d80ecfb8b"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#aaee864bb1fc5b5d4643e145d80ecfb8b">SVF::AndersenSCD::processPWC</a></div><div class="ttdeci">virtual void processPWC(ConstraintNode *rep)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00161">AndersenSCD.cpp:161</a></div></div>
106
- <div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00294">BasicTypes.h:294</a></div></div>
106
+ <div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00259">BasicTypes.h:259</a></div></div>
107
107
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_ad95c842964e6ca46e51fb763fefec585"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">SVF::PointerAnalysis::CallSiteToFunPtrMap</a></div><div class="ttdeci">SVFIR::CallSiteToFunPtrMap CallSiteToFunPtrMap</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00109">PointerAnalysis.h:109</a></div></div>
108
108
  <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>
109
109
  <div class="ttc" id="classSVF_1_1AddrCGEdge_html"><div class="ttname"><a href="classSVF_1_1AddrCGEdge.html">SVF::AddrCGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00093">ConsGEdge.h:93</a></div></div>