svf-tools 1.0.753 → 1.0.755

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 (416) hide show
  1. package/SVF-doxygen/html/html/AndersenPWC_8h_source.html +3 -3
  2. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +2 -2
  3. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +3 -3
  4. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +15 -15
  5. package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +3 -3
  6. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +736 -718
  7. package/SVF-doxygen/html/html/Andersen_8h_source.html +364 -355
  8. package/SVF-doxygen/html/html/CFGNormalizer_8cpp_source.html +76 -76
  9. package/SVF-doxygen/html/html/CFGNormalizer_8h.html +1 -1
  10. package/SVF-doxygen/html/html/CFGNormalizer_8h_source.html +29 -29
  11. package/SVF-doxygen/html/html/CFGrammar_8cpp.html +88 -0
  12. package/SVF-doxygen/html/html/CFGrammar_8cpp_source.html +568 -0
  13. package/SVF-doxygen/html/html/CFGrammar_8h.html +108 -0
  14. package/SVF-doxygen/html/html/CFGrammar_8h_source.html +643 -0
  15. package/SVF-doxygen/html/html/CFLAlias_8h_source.html +5 -5
  16. package/SVF-doxygen/html/html/CFLBase_8cpp_source.html +120 -127
  17. package/SVF-doxygen/html/html/CFLBase_8h_source.html +14 -14
  18. package/SVF-doxygen/html/html/CFLGramGraphChecker_8h.html +1 -1
  19. package/SVF-doxygen/html/html/CFLGramGraphChecker_8h_source.html +12 -12
  20. package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +464 -409
  21. package/SVF-doxygen/html/html/CFLGraphBuilder_8h.html +10 -2
  22. package/SVF-doxygen/html/html/CFLGraphBuilder_8h_source.html +120 -175
  23. package/SVF-doxygen/html/html/CFLGraph_8cpp_source.html +2 -2
  24. package/SVF-doxygen/html/html/CFLGraph_8h.html +1 -1
  25. package/SVF-doxygen/html/html/CFLGraph_8h_source.html +11 -11
  26. package/SVF-doxygen/html/html/CFLSolver_8cpp_source.html +60 -60
  27. package/SVF-doxygen/html/html/CFLSolver_8h.html +1 -1
  28. package/SVF-doxygen/html/html/CFLSolver_8h_source.html +19 -19
  29. package/SVF-doxygen/html/html/CFLStat_8cpp_source.html +2 -2
  30. package/SVF-doxygen/html/html/CFLVF_8cpp_source.html +7 -7
  31. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +4 -4
  32. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +1 -1
  33. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +3 -3
  34. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +2 -2
  35. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +2 -2
  36. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
  37. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
  38. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +710 -668
  39. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +245 -236
  40. package/SVF-doxygen/html/html/GrammarBuilder_8cpp_source.html +7 -7
  41. package/SVF-doxygen/html/html/GrammarBuilder_8h.html +1 -1
  42. package/SVF-doxygen/html/html/GrammarBuilder_8h_source.html +3 -3
  43. package/SVF-doxygen/html/html/GraphWriter_8cpp_source.html +1 -1
  44. package/SVF-doxygen/html/html/GraphWriter_8h_source.html +1 -1
  45. package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
  46. package/SVF-doxygen/html/html/PAGGrammar_8txt.html +209 -0
  47. package/SVF-doxygen/html/html/PEGGrammar_8txt.html +11 -11
  48. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +7 -7
  49. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +2 -2
  50. package/SVF-doxygen/html/html/Steensgaard_8h_source.html +2 -2
  51. package/SVF-doxygen/html/html/VFGGrammar_8txt.html +119 -0
  52. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +11 -11
  53. package/SVF-doxygen/html/html/VersionedFlowSensitive_8h_source.html +2 -2
  54. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +2 -2
  55. package/SVF-doxygen/html/html/annotated.html +6 -6
  56. package/SVF-doxygen/html/html/classSVF_1_1AliasCFLGraphBuilder-members.html +21 -20
  57. package/SVF-doxygen/html/html/classSVF_1_1AliasCFLGraphBuilder.html +223 -220
  58. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +58 -55
  59. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +749 -743
  60. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +48 -45
  61. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +236 -134
  62. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +57 -54
  63. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +31 -25
  64. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +64 -61
  65. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +16 -10
  66. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +15 -15
  67. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +54 -51
  68. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +43 -37
  69. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +7 -7
  70. package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer-members.html +10 -10
  71. package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer.html +119 -119
  72. package/SVF-doxygen/html/html/classSVF_1_1CFGrammar-members.html +158 -0
  73. package/SVF-doxygen/html/html/classSVF_1_1CFGrammar.html +1051 -0
  74. package/SVF-doxygen/html/html/classSVF_1_1CFGrammar.png +0 -0
  75. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias-members.html +1 -1
  76. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +13 -13
  77. package/SVF-doxygen/html/html/classSVF_1_1CFLBase-members.html +1 -1
  78. package/SVF-doxygen/html/html/classSVF_1_1CFLBase.html +108 -114
  79. package/SVF-doxygen/html/html/classSVF_1_1CFLFIFOWorkList.html +17 -17
  80. package/SVF-doxygen/html/html/classSVF_1_1CFLGraph-members.html +2 -2
  81. package/SVF-doxygen/html/html/classSVF_1_1CFLGraph.html +16 -16
  82. package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder-members.html +17 -16
  83. package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder.html +333 -280
  84. package/SVF-doxygen/html/html/classSVF_1_1CFLSolver-members.html +5 -5
  85. package/SVF-doxygen/html/html/classSVF_1_1CFLSolver.html +56 -56
  86. package/SVF-doxygen/html/html/classSVF_1_1CFLStat.html +2 -2
  87. package/SVF-doxygen/html/html/classSVF_1_1CFLVF-members.html +1 -1
  88. package/SVF-doxygen/html/html/classSVF_1_1CFLVF.html +16 -16
  89. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +4 -4
  90. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +1 -1
  91. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +1 -1
  92. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +64 -61
  93. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +14 -8
  94. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +1 -1
  95. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +62 -59
  96. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +932 -800
  97. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +33 -33
  98. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +3 -3
  99. package/SVF-doxygen/html/html/classSVF_1_1GrammarBase.html +76 -76
  100. package/SVF-doxygen/html/html/classSVF_1_1GrammarBase.png +0 -0
  101. package/SVF-doxygen/html/html/classSVF_1_1GrammarBase_1_1SymbolHash.html +4 -4
  102. package/SVF-doxygen/html/html/classSVF_1_1GrammarBuilder.html +5 -5
  103. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +1 -1
  104. package/SVF-doxygen/html/html/classSVF_1_1POCRAlias-members.html +1 -1
  105. package/SVF-doxygen/html/html/classSVF_1_1POCRAlias.html +4 -4
  106. package/SVF-doxygen/html/html/classSVF_1_1POCRHybrid-members.html +1 -1
  107. package/SVF-doxygen/html/html/classSVF_1_1POCRHybrid.html +4 -4
  108. package/SVF-doxygen/html/html/classSVF_1_1POCRHybridSolver-members.html +7 -7
  109. package/SVF-doxygen/html/html/classSVF_1_1POCRHybridSolver.html +53 -53
  110. package/SVF-doxygen/html/html/classSVF_1_1POCRSolver-members.html +6 -6
  111. package/SVF-doxygen/html/html/classSVF_1_1POCRSolver.html +47 -47
  112. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +2 -2
  113. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +54 -51
  114. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +10 -4
  115. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +51 -48
  116. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +6 -0
  117. package/SVF-doxygen/html/html/classSVF_1_1VFCFLGraphBuilder-members.html +21 -20
  118. package/SVF-doxygen/html/html/classSVF_1_1VFCFLGraphBuilder.html +148 -145
  119. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +79 -76
  120. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +18 -12
  121. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +28 -28
  122. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive_1_1SCC.html +1 -1
  123. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +2 -2
  124. package/SVF-doxygen/html/html/classes.html +6 -6
  125. package/SVF-doxygen/html/html/dir_1b8e404556d3e8597ae60437f0a084bf.html +7 -2
  126. package/SVF-doxygen/html/html/dir_7de7f3d0ab1cbd78bc64b135e4cd18be.html +80 -0
  127. package/SVF-doxygen/html/html/dir_8a9c8659eb68b9cbd3fead4690588a47.html +2 -2
  128. package/SVF-doxygen/html/html/files.html +14 -13
  129. package/SVF-doxygen/html/html/functions_a.html +5 -5
  130. package/SVF-doxygen/html/html/functions_b.html +9 -7
  131. package/SVF-doxygen/html/html/functions_c.html +5 -5
  132. package/SVF-doxygen/html/html/functions_d.html +1 -1
  133. package/SVF-doxygen/html/html/functions_e.html +4 -4
  134. package/SVF-doxygen/html/html/functions_f.html +2 -2
  135. package/SVF-doxygen/html/html/functions_func.html +5 -5
  136. package/SVF-doxygen/html/html/functions_func_b.html +9 -7
  137. package/SVF-doxygen/html/html/functions_func_c.html +5 -5
  138. package/SVF-doxygen/html/html/functions_func_d.html +1 -1
  139. package/SVF-doxygen/html/html/functions_func_e.html +3 -3
  140. package/SVF-doxygen/html/html/functions_func_f.html +1 -1
  141. package/SVF-doxygen/html/html/functions_func_g.html +13 -13
  142. package/SVF-doxygen/html/html/functions_func_h.html +3 -3
  143. package/SVF-doxygen/html/html/functions_func_i.html +1 -1
  144. package/SVF-doxygen/html/html/functions_func_n.html +2 -2
  145. package/SVF-doxygen/html/html/functions_func_p.html +2 -2
  146. package/SVF-doxygen/html/html/functions_func_r.html +8 -4
  147. package/SVF-doxygen/html/html/functions_func_s.html +25 -17
  148. package/SVF-doxygen/html/html/functions_g.html +15 -15
  149. package/SVF-doxygen/html/html/functions_h.html +3 -3
  150. package/SVF-doxygen/html/html/functions_i.html +2 -2
  151. package/SVF-doxygen/html/html/functions_k.html +3 -3
  152. package/SVF-doxygen/html/html/functions_n.html +6 -6
  153. package/SVF-doxygen/html/html/functions_o.html +16 -16
  154. package/SVF-doxygen/html/html/functions_p.html +19 -15
  155. package/SVF-doxygen/html/html/functions_r.html +7 -5
  156. package/SVF-doxygen/html/html/functions_s.html +28 -22
  157. package/SVF-doxygen/html/html/functions_t.html +9 -9
  158. package/SVF-doxygen/html/html/functions_type_k.html +2 -2
  159. package/SVF-doxygen/html/html/functions_type_p.html +1 -1
  160. package/SVF-doxygen/html/html/functions_type_s.html +3 -3
  161. package/SVF-doxygen/html/html/functions_vars_e.html +1 -1
  162. package/SVF-doxygen/html/html/functions_vars_f.html +1 -1
  163. package/SVF-doxygen/html/html/functions_vars_g.html +2 -2
  164. package/SVF-doxygen/html/html/functions_vars_k.html +1 -1
  165. package/SVF-doxygen/html/html/functions_vars_n.html +1 -1
  166. package/SVF-doxygen/html/html/functions_vars_s.html +2 -2
  167. package/SVF-doxygen/html/html/functions_w.html +9 -9
  168. package/SVF-doxygen/html/html/globals.html +6 -4
  169. package/SVF-doxygen/html/html/globals_e.html +1 -1
  170. package/SVF-doxygen/html/html/globals_g.html +3 -3
  171. package/SVF-doxygen/html/html/globals_s.html +1 -1
  172. package/SVF-doxygen/html/html/globals_v.html +2 -2
  173. package/SVF-doxygen/html/html/globals_vars.html +12 -10
  174. package/SVF-doxygen/html/html/hierarchy.html +1 -1
  175. package/SVF-doxygen/html/html/namespaceSVF.html +40 -2
  176. package/SVF-doxygen/html/html/namespacemembers_b.html +3 -0
  177. package/SVF-doxygen/html/html/namespacemembers_enum.html +3 -0
  178. package/SVF-doxygen/html/html/search/all_0.js +147 -146
  179. package/SVF-doxygen/html/html/search/all_1.js +478 -478
  180. package/SVF-doxygen/html/html/search/all_10.js +327 -325
  181. package/SVF-doxygen/html/html/search/all_11.js +209 -208
  182. package/SVF-doxygen/html/html/search/all_12.js +547 -545
  183. package/SVF-doxygen/html/html/search/all_13.js +189 -189
  184. package/SVF-doxygen/html/html/search/all_14.js +66 -66
  185. package/SVF-doxygen/html/html/search/all_15.js +170 -170
  186. package/SVF-doxygen/html/html/search/all_16.js +60 -60
  187. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  188. package/SVF-doxygen/html/html/search/all_18.js +1 -1
  189. package/SVF-doxygen/html/html/search/all_19.js +10 -10
  190. package/SVF-doxygen/html/html/search/all_1a.js +169 -169
  191. package/SVF-doxygen/html/html/search/all_2.js +159 -156
  192. package/SVF-doxygen/html/html/search/all_3.js +637 -638
  193. package/SVF-doxygen/html/html/search/all_4.js +227 -227
  194. package/SVF-doxygen/html/html/search/all_5.js +156 -156
  195. package/SVF-doxygen/html/html/search/all_6.js +223 -223
  196. package/SVF-doxygen/html/html/search/all_7.js +1012 -1012
  197. package/SVF-doxygen/html/html/search/all_8.js +192 -192
  198. package/SVF-doxygen/html/html/search/all_9.js +597 -597
  199. package/SVF-doxygen/html/html/search/all_a.js +47 -47
  200. package/SVF-doxygen/html/html/search/all_b.js +26 -26
  201. package/SVF-doxygen/html/html/search/all_c.js +113 -113
  202. package/SVF-doxygen/html/html/search/all_d.js +196 -196
  203. package/SVF-doxygen/html/html/search/all_e.js +206 -206
  204. package/SVF-doxygen/html/html/search/all_f.js +122 -122
  205. package/SVF-doxygen/html/html/search/classes_0.js +26 -26
  206. package/SVF-doxygen/html/html/search/classes_1.js +9 -9
  207. package/SVF-doxygen/html/html/search/classes_10.js +73 -73
  208. package/SVF-doxygen/html/html/search/classes_11.js +15 -15
  209. package/SVF-doxygen/html/html/search/classes_12.js +2 -2
  210. package/SVF-doxygen/html/html/search/classes_13.js +10 -10
  211. package/SVF-doxygen/html/html/search/classes_14.js +14 -14
  212. package/SVF-doxygen/html/html/search/classes_15.js +1 -1
  213. package/SVF-doxygen/html/html/search/classes_2.js +76 -76
  214. package/SVF-doxygen/html/html/search/classes_3.js +35 -35
  215. package/SVF-doxygen/html/html/search/classes_4.js +10 -10
  216. package/SVF-doxygen/html/html/search/classes_5.js +28 -28
  217. package/SVF-doxygen/html/html/search/classes_6.js +98 -98
  218. package/SVF-doxygen/html/html/search/classes_7.js +33 -33
  219. package/SVF-doxygen/html/html/search/classes_8.js +56 -56
  220. package/SVF-doxygen/html/html/search/classes_9.js +1 -1
  221. package/SVF-doxygen/html/html/search/classes_a.js +12 -12
  222. package/SVF-doxygen/html/html/search/classes_b.js +29 -29
  223. package/SVF-doxygen/html/html/search/classes_c.js +6 -6
  224. package/SVF-doxygen/html/html/search/classes_d.js +19 -19
  225. package/SVF-doxygen/html/html/search/classes_e.js +36 -36
  226. package/SVF-doxygen/html/html/search/classes_f.js +25 -25
  227. package/SVF-doxygen/html/html/search/defines_0.js +3 -3
  228. package/SVF-doxygen/html/html/search/defines_1.js +2 -2
  229. package/SVF-doxygen/html/html/search/defines_2.js +30 -30
  230. package/SVF-doxygen/html/html/search/defines_3.js +20 -20
  231. package/SVF-doxygen/html/html/search/defines_4.js +3 -3
  232. package/SVF-doxygen/html/html/search/defines_5.js +4 -4
  233. package/SVF-doxygen/html/html/search/defines_6.js +2 -2
  234. package/SVF-doxygen/html/html/search/defines_7.js +5 -5
  235. package/SVF-doxygen/html/html/search/defines_8.js +13 -13
  236. package/SVF-doxygen/html/html/search/defines_9.js +9 -9
  237. package/SVF-doxygen/html/html/search/defines_a.js +2 -2
  238. package/SVF-doxygen/html/html/search/defines_b.js +1 -1
  239. package/SVF-doxygen/html/html/search/defines_c.js +2 -2
  240. package/SVF-doxygen/html/html/search/defines_d.js +2 -2
  241. package/SVF-doxygen/html/html/search/defines_e.js +6 -6
  242. package/SVF-doxygen/html/html/search/defines_f.js +3 -3
  243. package/SVF-doxygen/html/html/search/enums_0.js +3 -3
  244. package/SVF-doxygen/html/html/search/enums_1.js +2 -1
  245. package/SVF-doxygen/html/html/search/enums_10.js +1 -1
  246. package/SVF-doxygen/html/html/search/enums_11.js +1 -1
  247. package/SVF-doxygen/html/html/search/enums_2.js +8 -8
  248. package/SVF-doxygen/html/html/search/enums_3.js +1 -1
  249. package/SVF-doxygen/html/html/search/enums_4.js +4 -4
  250. package/SVF-doxygen/html/html/search/enums_5.js +1 -1
  251. package/SVF-doxygen/html/html/search/enums_6.js +2 -2
  252. package/SVF-doxygen/html/html/search/enums_7.js +2 -2
  253. package/SVF-doxygen/html/html/search/enums_8.js +4 -4
  254. package/SVF-doxygen/html/html/search/enums_9.js +1 -1
  255. package/SVF-doxygen/html/html/search/enums_a.js +2 -2
  256. package/SVF-doxygen/html/html/search/enums_b.js +7 -7
  257. package/SVF-doxygen/html/html/search/enums_c.js +1 -1
  258. package/SVF-doxygen/html/html/search/enums_d.js +4 -4
  259. package/SVF-doxygen/html/html/search/enums_e.js +2 -2
  260. package/SVF-doxygen/html/html/search/enums_f.js +4 -4
  261. package/SVF-doxygen/html/html/search/enumvalues_0.js +14 -14
  262. package/SVF-doxygen/html/html/search/enumvalues_1.js +14 -13
  263. package/SVF-doxygen/html/html/search/enumvalues_10.js +35 -35
  264. package/SVF-doxygen/html/html/search/enumvalues_11.js +3 -3
  265. package/SVF-doxygen/html/html/search/enumvalues_12.js +10 -10
  266. package/SVF-doxygen/html/html/search/enumvalues_13.js +1 -1
  267. package/SVF-doxygen/html/html/search/enumvalues_14.js +1 -1
  268. package/SVF-doxygen/html/html/search/enumvalues_15.js +3 -3
  269. package/SVF-doxygen/html/html/search/enumvalues_2.js +40 -40
  270. package/SVF-doxygen/html/html/search/enumvalues_3.js +13 -13
  271. package/SVF-doxygen/html/html/search/enumvalues_4.js +34 -34
  272. package/SVF-doxygen/html/html/search/enumvalues_5.js +48 -48
  273. package/SVF-doxygen/html/html/search/enumvalues_6.js +6 -6
  274. package/SVF-doxygen/html/html/search/enumvalues_7.js +9 -9
  275. package/SVF-doxygen/html/html/search/enumvalues_8.js +23 -23
  276. package/SVF-doxygen/html/html/search/enumvalues_9.js +6 -6
  277. package/SVF-doxygen/html/html/search/enumvalues_a.js +17 -17
  278. package/SVF-doxygen/html/html/search/enumvalues_b.js +11 -11
  279. package/SVF-doxygen/html/html/search/enumvalues_c.js +6 -6
  280. package/SVF-doxygen/html/html/search/enumvalues_d.js +18 -17
  281. package/SVF-doxygen/html/html/search/enumvalues_e.js +11 -11
  282. package/SVF-doxygen/html/html/search/enumvalues_f.js +45 -45
  283. package/SVF-doxygen/html/html/search/files_0.js +13 -13
  284. package/SVF-doxygen/html/html/search/files_1.js +7 -7
  285. package/SVF-doxygen/html/html/search/files_10.js +8 -8
  286. package/SVF-doxygen/html/html/search/files_11.js +8 -8
  287. package/SVF-doxygen/html/html/search/files_12.js +2 -2
  288. package/SVF-doxygen/html/html/search/files_2.js +49 -50
  289. package/SVF-doxygen/html/html/search/files_3.js +14 -14
  290. package/SVF-doxygen/html/html/search/files_4.js +4 -4
  291. package/SVF-doxygen/html/html/search/files_5.js +13 -13
  292. package/SVF-doxygen/html/html/search/files_6.js +9 -9
  293. package/SVF-doxygen/html/html/search/files_7.js +14 -14
  294. package/SVF-doxygen/html/html/search/files_8.js +13 -13
  295. package/SVF-doxygen/html/html/search/files_9.js +18 -18
  296. package/SVF-doxygen/html/html/search/files_a.js +3 -3
  297. package/SVF-doxygen/html/html/search/files_b.js +2 -2
  298. package/SVF-doxygen/html/html/search/files_c.js +20 -19
  299. package/SVF-doxygen/html/html/search/files_d.js +4 -4
  300. package/SVF-doxygen/html/html/search/files_e.js +62 -62
  301. package/SVF-doxygen/html/html/search/files_f.js +8 -8
  302. package/SVF-doxygen/html/html/search/functions_0.js +351 -351
  303. package/SVF-doxygen/html/html/search/functions_1.js +81 -80
  304. package/SVF-doxygen/html/html/search/functions_10.js +122 -121
  305. package/SVF-doxygen/html/html/search/functions_11.js +283 -281
  306. package/SVF-doxygen/html/html/search/functions_12.js +55 -55
  307. package/SVF-doxygen/html/html/search/functions_13.js +38 -38
  308. package/SVF-doxygen/html/html/search/functions_14.js +71 -71
  309. package/SVF-doxygen/html/html/search/functions_15.js +29 -29
  310. package/SVF-doxygen/html/html/search/functions_16.js +2 -2
  311. package/SVF-doxygen/html/html/search/functions_17.js +169 -169
  312. package/SVF-doxygen/html/html/search/functions_2.js +251 -251
  313. package/SVF-doxygen/html/html/search/functions_3.js +71 -71
  314. package/SVF-doxygen/html/html/search/functions_4.js +55 -55
  315. package/SVF-doxygen/html/html/search/functions_5.js +55 -55
  316. package/SVF-doxygen/html/html/search/functions_6.js +832 -832
  317. package/SVF-doxygen/html/html/search/functions_7.js +144 -144
  318. package/SVF-doxygen/html/html/search/functions_8.js +417 -417
  319. package/SVF-doxygen/html/html/search/functions_9.js +29 -29
  320. package/SVF-doxygen/html/html/search/functions_a.js +2 -2
  321. package/SVF-doxygen/html/html/search/functions_b.js +23 -23
  322. package/SVF-doxygen/html/html/search/functions_c.js +75 -75
  323. package/SVF-doxygen/html/html/search/functions_d.js +35 -35
  324. package/SVF-doxygen/html/html/search/functions_e.js +56 -56
  325. package/SVF-doxygen/html/html/search/functions_f.js +143 -143
  326. package/SVF-doxygen/html/html/search/namespaces_0.js +1 -1
  327. package/SVF-doxygen/html/html/search/namespaces_1.js +7 -7
  328. package/SVF-doxygen/html/html/search/related_0.js +2 -2
  329. package/SVF-doxygen/html/html/search/related_1.js +1 -1
  330. package/SVF-doxygen/html/html/search/related_2.js +2 -2
  331. package/SVF-doxygen/html/html/search/related_3.js +2 -2
  332. package/SVF-doxygen/html/html/search/related_4.js +2 -2
  333. package/SVF-doxygen/html/html/search/related_5.js +1 -1
  334. package/SVF-doxygen/html/html/search/related_6.js +2 -2
  335. package/SVF-doxygen/html/html/search/related_7.js +4 -4
  336. package/SVF-doxygen/html/html/search/related_8.js +2 -2
  337. package/SVF-doxygen/html/html/search/related_9.js +4 -4
  338. package/SVF-doxygen/html/html/search/related_a.js +19 -19
  339. package/SVF-doxygen/html/html/search/related_b.js +4 -4
  340. package/SVF-doxygen/html/html/search/related_c.js +1 -1
  341. package/SVF-doxygen/html/html/search/related_d.js +11 -11
  342. package/SVF-doxygen/html/html/search/related_e.js +2 -2
  343. package/SVF-doxygen/html/html/search/related_f.js +2 -2
  344. package/SVF-doxygen/html/html/search/typedefs_0.js +18 -18
  345. package/SVF-doxygen/html/html/search/typedefs_1.js +25 -25
  346. package/SVF-doxygen/html/html/search/typedefs_10.js +60 -60
  347. package/SVF-doxygen/html/html/search/typedefs_11.js +13 -13
  348. package/SVF-doxygen/html/html/search/typedefs_12.js +11 -11
  349. package/SVF-doxygen/html/html/search/typedefs_13.js +35 -35
  350. package/SVF-doxygen/html/html/search/typedefs_14.js +8 -8
  351. package/SVF-doxygen/html/html/search/typedefs_2.js +126 -126
  352. package/SVF-doxygen/html/html/search/typedefs_3.js +39 -39
  353. package/SVF-doxygen/html/html/search/typedefs_4.js +16 -16
  354. package/SVF-doxygen/html/html/search/typedefs_5.js +41 -41
  355. package/SVF-doxygen/html/html/search/typedefs_6.js +52 -52
  356. package/SVF-doxygen/html/html/search/typedefs_7.js +40 -40
  357. package/SVF-doxygen/html/html/search/typedefs_8.js +1 -1
  358. package/SVF-doxygen/html/html/search/typedefs_9.js +6 -6
  359. package/SVF-doxygen/html/html/search/typedefs_a.js +29 -29
  360. package/SVF-doxygen/html/html/search/typedefs_b.js +29 -29
  361. package/SVF-doxygen/html/html/search/typedefs_c.js +40 -40
  362. package/SVF-doxygen/html/html/search/typedefs_d.js +15 -15
  363. package/SVF-doxygen/html/html/search/typedefs_e.js +52 -52
  364. package/SVF-doxygen/html/html/search/typedefs_f.js +14 -14
  365. package/SVF-doxygen/html/html/search/variables_0.js +147 -146
  366. package/SVF-doxygen/html/html/search/variables_1.js +74 -74
  367. package/SVF-doxygen/html/html/search/variables_10.js +97 -97
  368. package/SVF-doxygen/html/html/search/variables_11.js +46 -46
  369. package/SVF-doxygen/html/html/search/variables_12.js +93 -93
  370. package/SVF-doxygen/html/html/search/variables_13.js +77 -77
  371. package/SVF-doxygen/html/html/search/variables_14.js +14 -14
  372. package/SVF-doxygen/html/html/search/variables_15.js +48 -48
  373. package/SVF-doxygen/html/html/search/variables_16.js +9 -9
  374. package/SVF-doxygen/html/html/search/variables_17.js +1 -1
  375. package/SVF-doxygen/html/html/search/variables_18.js +2 -2
  376. package/SVF-doxygen/html/html/search/variables_2.js +35 -35
  377. package/SVF-doxygen/html/html/search/variables_3.js +148 -148
  378. package/SVF-doxygen/html/html/search/variables_4.js +56 -56
  379. package/SVF-doxygen/html/html/search/variables_5.js +40 -40
  380. package/SVF-doxygen/html/html/search/variables_6.js +67 -67
  381. package/SVF-doxygen/html/html/search/variables_7.js +33 -33
  382. package/SVF-doxygen/html/html/search/variables_8.js +7 -7
  383. package/SVF-doxygen/html/html/search/variables_9.js +77 -77
  384. package/SVF-doxygen/html/html/search/variables_a.js +4 -4
  385. package/SVF-doxygen/html/html/search/variables_b.js +10 -10
  386. package/SVF-doxygen/html/html/search/variables_c.js +45 -45
  387. package/SVF-doxygen/html/html/search/variables_d.js +56 -56
  388. package/SVF-doxygen/html/html/search/variables_e.js +123 -123
  389. package/SVF-doxygen/html/html/search/variables_f.js +33 -33
  390. package/SVF-doxygen/html/html/structSVF_1_1GrammarBase_1_1Symbol.html +25 -25
  391. package/SVF-doxygen/html/html/structSVF_1_1GrammarBase_1_1SymbolVectorHash.html +4 -4
  392. package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
  393. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
  394. package/package.json +1 -1
  395. package/svf/include/CFL/CFGNormalizer.h +11 -11
  396. package/svf/include/CFL/{CFLGrammar.h → CFGrammar.h} +5 -5
  397. package/svf/include/CFL/CFLAlias.h +2 -2
  398. package/svf/include/CFL/CFLBase.h +2 -2
  399. package/svf/include/CFL/CFLGramGraphChecker.h +1 -1
  400. package/svf/include/CFL/CFLGraphBuilder.h +30 -81
  401. package/svf/include/CFL/CFLSolver.h +8 -8
  402. package/svf/include/CFL/GrammarBuilder.h +1 -1
  403. package/svf/include/Graphs/CFLGraph.h +3 -3
  404. package/svf/include/WPA/Andersen.h +6 -0
  405. package/svf/include/WPA/FlowSensitive.h +6 -0
  406. package/svf/lib/CFL/CFGNormalizer.cpp +11 -11
  407. package/svf/lib/CFL/{CFLGrammar.cpp → CFGrammar.cpp} +7 -7
  408. package/svf/lib/CFL/CFLBase.cpp +5 -11
  409. package/svf/lib/CFL/CFLGraphBuilder.cpp +125 -74
  410. package/svf/lib/CFL/CFLVF.cpp +2 -2
  411. package/svf/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
  412. package/svf/lib/WPA/Andersen.cpp +63 -43
  413. package/svf/lib/WPA/FlowSensitive.cpp +50 -8
  414. /package/svf/include/CFL/{CFLGrammar.txt → grammar/PAGGrammar.txt} +0 -0
  415. /package/svf/include/CFL/{PEGGrammar.txt → grammar/PEGGrammar.txt} +0 -0
  416. /package/svf/include/CFL/{VFG.txt → grammar/VFGGrammar.txt} +0 -0
@@ -155,745 +155,759 @@ $(function() {
155
155
  <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a638f58c3bf6efdb3787fafaa4e6f19ca">BVDataPTAImpl::finalize</a>();</div>
156
156
  <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;}</div>
157
157
  <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; </div>
158
- <div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751"> 103</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">AndersenBase::analyze</a>()</div>
159
- <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;{</div>
160
- <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; initialize();</div>
161
- <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div>
162
- <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordtype">bool</span> readResultsFromFile = <span class="keyword">false</span>;</div>
163
- <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">if</span>(!<a class="code" href="classSVF_1_1Options.html#a453571cd0205f14ead205b3a54477475">Options::ReadAnder</a>().empty())</div>
164
- <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; {</div>
165
- <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; readResultsFromFile = this-&gt;readFromFile(<a class="code" href="classSVF_1_1Options.html#a453571cd0205f14ead205b3a54477475">Options::ReadAnder</a>());</div>
166
- <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="comment">// Finalize the analysis</span></div>
167
- <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a118dabc50024b5cd91095814ade47166">PointerAnalysis::finalize</a>();</div>
168
- <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div>
158
+ <div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#ac02d1fedb0beb39e5a4c22ee4bb3501a"> 100</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#ac02d1fedb0beb39e5a4c22ee4bb3501a">AndersenBase::solveConstraints</a>()</div>
159
+ <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;{</div>
160
+ <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="comment">// Start solving constraints</span></div>
161
+ <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot;Start Solving Constraints\n&quot;</span>));</div>
162
+ <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; </div>
163
+ <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordtype">bool</span> limitTimerSet = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a757815a2c758695176120509ceb0ce70">SVFUtil::startAnalysisLimitTimer</a>(<a class="code" href="classSVF_1_1Options.html#a36db0fdd38ff9093d2e6bb30581b25e1">Options::AnderTimeLimit</a>());</div>
164
+ <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
165
+ <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; initWorklist();</div>
166
+ <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">do</span></div>
167
+ <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div>
168
+ <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; numOfIteration++;</div>
169
+ <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">if</span> (0 == numOfIteration % iterationForPrintStat)</div>
170
+ <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; printStat();</div>
171
+ <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; </div>
172
+ <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; reanalyze = <span class="keyword">false</span>;</div>
169
173
  <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; </div>
170
- <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1Options.html#aabeb232a46547fd35ddc96244fdaf1b9">Options::WriteAnder</a>().empty())</div>
171
- <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; this-&gt;writeObjVarToFile(<a class="code" href="classSVF_1_1Options.html#aabeb232a46547fd35ddc96244fdaf1b9">Options::WriteAnder</a>());</div>
172
- <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; </div>
173
- <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">if</span>(!readResultsFromFile)</div>
174
- <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; {</div>
175
- <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="comment">// Start solving constraints</span></div>
176
- <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot;Start Solving Constraints\n&quot;</span>));</div>
174
+ <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; solveWorklist();</div>
175
+ <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; </div>
176
+ <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">if</span> (updateCallGraph(getIndirectCallsites()))</div>
177
+ <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; reanalyze = <span class="keyword">true</span>;</div>
178
+ <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
179
+ <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; }</div>
180
+ <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">while</span> (reanalyze);</div>
177
181
  <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; </div>
178
- <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordtype">bool</span> limitTimerSet = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a757815a2c758695176120509ceb0ce70">SVFUtil::startAnalysisLimitTimer</a>(<a class="code" href="classSVF_1_1Options.html#a36db0fdd38ff9093d2e6bb30581b25e1">Options::AnderTimeLimit</a>());</div>
179
- <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
180
- <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; initWorklist();</div>
181
- <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">do</span></div>
182
- <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; {</div>
183
- <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; numOfIteration++;</div>
184
- <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">if</span> (0 == numOfIteration % iterationForPrintStat)</div>
185
- <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; printStat();</div>
186
- <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; </div>
187
- <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; reanalyze = <span class="keyword">false</span>;</div>
188
- <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; </div>
189
- <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; solveWorklist();</div>
190
- <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; </div>
191
- <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">if</span> (updateCallGraph(getIndirectCallsites()))</div>
192
- <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; reanalyze = <span class="keyword">true</span>;</div>
193
- <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; </div>
194
- <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div>
195
- <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">while</span> (reanalyze);</div>
196
- <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; </div>
197
- <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="comment">// Analysis is finished, reset the alarm if we set it.</span></div>
198
- <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a168f7f7a3a8c70dbf2b5b4269cd4c7c5">SVFUtil::stopAnalysisLimitTimer</a>(limitTimerSet);</div>
199
- <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; </div>
200
- <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot;Finish Solving Constraints\n&quot;</span>));</div>
201
- <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; </div>
202
- <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div>
203
- <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; </div>
204
- <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1Options.html#aabeb232a46547fd35ddc96244fdaf1b9">Options::WriteAnder</a>().empty())</div>
205
- <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; {</div>
206
- <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; this-&gt;writeToFile(<a class="code" href="classSVF_1_1Options.html#aabeb232a46547fd35ddc96244fdaf1b9">Options::WriteAnder</a>());</div>
207
- <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div>
208
- <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; </div>
209
- <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">if</span> (!readResultsFromFile)</div>
210
- <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="comment">// Finalize the analysis</span></div>
211
- <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; finalize();</div>
212
- <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;}</div>
213
- <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; </div>
214
- <div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#aebfe0c7238eb24f74f105b950b86cb5e"> 160</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#aebfe0c7238eb24f74f105b950b86cb5e">AndersenBase::cleanConsCG</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div>
215
- <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;{</div>
216
- <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; consCG-&gt;resetSubs(consCG-&gt;getRep(<span class="keywordtype">id</span>));</div>
217
- <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> sub: consCG-&gt;getSubs(<span class="keywordtype">id</span>))</div>
218
- <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; consCG-&gt;resetRep(sub);</div>
219
- <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; consCG-&gt;resetSubs(<span class="keywordtype">id</span>);</div>
220
- <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; consCG-&gt;resetRep(<span class="keywordtype">id</span>);</div>
221
- <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; assert(!consCG-&gt;hasGNode(<span class="keywordtype">id</span>) &amp;&amp; <span class="stringliteral">&quot;this is either a rep nodeid or a sub nodeid should have already been merged to its field-insensitive base! &quot;</span>);</div>
222
- <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;}</div>
223
- <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; </div>
224
- <div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#af37392229dab0a1f2f807a12186c3b39"> 170</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#af37392229dab0a1f2f807a12186c3b39">AndersenBase::normalizePointsTo</a>()</div>
225
- <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;{</div>
226
- <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#ab6abb822445c9b3f5cb2b7206042e940">SVFIR::MemObjToFieldsMap</a> &amp;memToFieldsMap = pag-&gt;getMemToFieldsMap();</div>
227
- <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#ae683914bce36e2d387bc0bc97dfcb14d">SVFIR::NodeOffsetMap</a> &amp;GepObjVarMap = pag-&gt;getGepObjNodeMap();</div>
228
- <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; </div>
229
- <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="comment">// clear GepObjVarMap/memToFieldsMap/nodeToSubsMap/nodeToRepMap</span></div>
230
- <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="comment">// for redundant gepnodes and remove those nodes from pag</span></div>
231
- <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>: redundantGepNodes)</div>
232
- <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {</div>
233
- <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = pag-&gt;getBaseObjVar(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>);</div>
234
- <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *gepNode = SVFUtil::dyn_cast&lt;GepObjVar&gt;(pag-&gt;getGNode(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>));</div>
235
- <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; assert(gepNode &amp;&amp; <span class="stringliteral">&quot;Not a gep node in redundantGepNodes set&quot;</span>);</div>
236
- <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> apOffset = gepNode-&gt;<a class="code" href="classSVF_1_1GepObjVar.html#a10790e82dbb00532d4aa171f592c54bc">getConstantFieldIdx</a>();</div>
237
- <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; GepObjVarMap.erase(std::make_pair(base, apOffset));</div>
238
- <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; memToFieldsMap[base].reset(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>);</div>
239
- <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; cleanConsCG(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>);</div>
240
- <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; </div>
241
- <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; pag-&gt;removeGNode(gepNode);</div>
242
- <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; }</div>
243
- <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;}</div>
244
- <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; </div>
245
- <div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a20617a69c112ad423b1b5021e48a8548"> 194</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a20617a69c112ad423b1b5021e48a8548">Andersen::initialize</a>()</div>
246
- <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;{</div>
247
- <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; resetData();</div>
248
- <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a891816407a4c6346f56bc01a67b78aac">AndersenBase::initialize</a>();</div>
249
- <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; </div>
250
- <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a46743284466ff803f52a82b094186d16">Options::ClusterAnder</a>()) cluster();</div>
251
- <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; </div>
252
- <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; processAllAddr();</div>
253
- <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;}</div>
254
- <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; </div>
255
- <div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ad90c8cf193bd81870ce8dd88c9580e2c"> 208</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#ad90c8cf193bd81870ce8dd88c9580e2c">Andersen::finalize</a>()</div>
256
- <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;{</div>
257
- <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="comment">// TODO: check -stat too.</span></div>
258
- <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="comment">// TODO: broken</span></div>
259
- <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a46743284466ff803f52a82b094186d16">Options::ClusterAnder</a>())</div>
260
- <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; {</div>
261
- <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;std::string, std::string&gt;</a> stats;</div>
262
- <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTDataTy</a> *ptd = getPTDataTy();</div>
263
- <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="comment">// TODO: should we use liveOnly?</span></div>
264
- <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="comment">// TODO: parameterise final arg.</span></div>
265
- <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#acbbc5c04c79846fe1cc46a3bd5a65aba">NodeIDAllocator::Clusterer::evaluate</a>(*<a class="code" href="classSVF_1_1PointsTo.html#ae349a9ce6a8739925baffd83d1878b0e">PointsTo::getCurrentBestNodeMapping</a>(), ptd-&gt;<a class="code" href="classSVF_1_1PTData.html#adbe2b955f119871b54dc502de84b94c4">getAllPts</a>(<span class="keyword">true</span>), stats, <span class="keyword">true</span>);</div>
266
- <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac10cbda6a84ce890c9946a5ff35800b7">NodeIDAllocator::Clusterer::printStats</a>(<span class="stringliteral">&quot;post-main&quot;</span>, stats);</div>
267
- <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; }</div>
268
- <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; </div>
269
- <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="comment">// sanitizePts();</span></div>
270
- <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a28a1c3571cdee5e05004b29ace364e67">AndersenBase::finalize</a>();</div>
271
- <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;}</div>
272
- <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; </div>
273
- <div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a1caa6fa0740f4fa789d960a5a6fcb9c1"> 231</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a1caa6fa0740f4fa789d960a5a6fcb9c1">Andersen::processNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div>
274
- <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;{</div>
275
- <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="comment">// sub nodes do not need to be processed</span></div>
276
- <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">if</span> (sccRepNode(nodeId) != nodeId)</div>
277
- <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">return</span>;</div>
278
- <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; </div>
279
- <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = consCG-&gt;getConstraintNode(nodeId);</div>
280
- <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordtype">double</span> insertStart = stat-&gt;getClk();</div>
281
- <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; handleLoadStore(node);</div>
282
- <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordtype">double</span> insertEnd = stat-&gt;getClk();</div>
283
- <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; timeOfProcessLoadStore += (insertEnd - insertStart) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
284
- <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; </div>
285
- <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordtype">double</span> propStart = stat-&gt;getClk();</div>
286
- <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; handleCopyGep(node);</div>
287
- <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordtype">double</span> propEnd = stat-&gt;getClk();</div>
288
- <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; timeOfProcessCopyGep += (propEnd - propStart) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
289
- <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;}</div>
290
- <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; </div>
291
- <div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ab069683dd6ca563113efbde2813ab35e"> 252</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#ab069683dd6ca563113efbde2813ab35e">Andersen::handleCopyGep</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node)</div>
292
- <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;{</div>
293
- <div class="line"><a name="l00254"></a><span class="lineno"> 254</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>
294
- <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; computeDiffPts(nodeId);</div>
182
+ <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="comment">// Analysis is finished, reset the alarm if we set it.</span></div>
183
+ <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a168f7f7a3a8c70dbf2b5b4269cd4c7c5">SVFUtil::stopAnalysisLimitTimer</a>(limitTimerSet);</div>
184
+ <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div>
185
+ <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot;Finish Solving Constraints\n&quot;</span>));</div>
186
+ <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;}</div>
187
+ <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; </div>
188
+ <div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751"> 133</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">AndersenBase::analyze</a>()</div>
189
+ <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;{</div>
190
+ <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span>(!<a class="code" href="classSVF_1_1Options.html#a453571cd0205f14ead205b3a54477475">Options::ReadAnder</a>().empty())</div>
191
+ <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div>
192
+ <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; readPtsFromFile(<a class="code" href="classSVF_1_1Options.html#a453571cd0205f14ead205b3a54477475">Options::ReadAnder</a>());</div>
193
+ <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div>
194
+ <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">else</span></div>
195
+ <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; {</div>
196
+ <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#aabeb232a46547fd35ddc96244fdaf1b9">Options::WriteAnder</a>().empty())</div>
197
+ <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div>
198
+ <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; initialize();</div>
199
+ <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; solveConstraints();</div>
200
+ <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; finalize();</div>
201
+ <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div>
202
+ <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">else</span></div>
203
+ <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; {</div>
204
+ <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; solveAndwritePtsToFile(<a class="code" href="classSVF_1_1Options.html#aabeb232a46547fd35ddc96244fdaf1b9">Options::WriteAnder</a>());</div>
205
+ <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; }</div>
206
+ <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div>
207
+ <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;}</div>
208
+ <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; </div>
209
+ <div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#a69685be598d8aa2576af09912b94a8ef"> 157</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#a69685be598d8aa2576af09912b94a8ef">AndersenBase::readPtsFromFile</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>&amp; filename)</div>
210
+ <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;{</div>
211
+ <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; initialize();</div>
212
+ <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">if</span> (!filename.empty())</div>
213
+ <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; this-&gt;readFromFile(filename);</div>
214
+ <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a118dabc50024b5cd91095814ade47166">PointerAnalysis::finalize</a>();</div>
215
+ <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;}</div>
216
+ <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; </div>
217
+ <div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#add7a5c53783fb2277dfc0c304cdfecd7"> 168</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#add7a5c53783fb2277dfc0c304cdfecd7">AndersenBase:: solveAndwritePtsToFile</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>&amp; filename)</div>
218
+ <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;{</div>
219
+ <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; initialize();</div>
220
+ <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">if</span> (!filename.empty())</div>
221
+ <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; this-&gt;writeObjVarToFile(filename);</div>
222
+ <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; solveConstraints();</div>
223
+ <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">if</span> (!filename.empty())</div>
224
+ <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; this-&gt;writeToFile(filename);</div>
225
+ <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; finalize();</div>
226
+ <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;}</div>
227
+ <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; </div>
228
+ <div class="line"><a name="l00180"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#aebfe0c7238eb24f74f105b950b86cb5e"> 180</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#aebfe0c7238eb24f74f105b950b86cb5e">AndersenBase::cleanConsCG</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div>
229
+ <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;{</div>
230
+ <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; consCG-&gt;resetSubs(consCG-&gt;getRep(<span class="keywordtype">id</span>));</div>
231
+ <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> sub: consCG-&gt;getSubs(<span class="keywordtype">id</span>))</div>
232
+ <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; consCG-&gt;resetRep(sub);</div>
233
+ <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; consCG-&gt;resetSubs(<span class="keywordtype">id</span>);</div>
234
+ <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; consCG-&gt;resetRep(<span class="keywordtype">id</span>);</div>
235
+ <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; assert(!consCG-&gt;hasGNode(<span class="keywordtype">id</span>) &amp;&amp; <span class="stringliteral">&quot;this is either a rep nodeid or a sub nodeid should have already been merged to its field-insensitive base! &quot;</span>);</div>
236
+ <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;}</div>
237
+ <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; </div>
238
+ <div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenBase.html#af37392229dab0a1f2f807a12186c3b39"> 190</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenBase.html#af37392229dab0a1f2f807a12186c3b39">AndersenBase::normalizePointsTo</a>()</div>
239
+ <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;{</div>
240
+ <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#ab6abb822445c9b3f5cb2b7206042e940">SVFIR::MemObjToFieldsMap</a> &amp;memToFieldsMap = pag-&gt;getMemToFieldsMap();</div>
241
+ <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#ae683914bce36e2d387bc0bc97dfcb14d">SVFIR::NodeOffsetMap</a> &amp;GepObjVarMap = pag-&gt;getGepObjNodeMap();</div>
242
+ <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; </div>
243
+ <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="comment">// clear GepObjVarMap/memToFieldsMap/nodeToSubsMap/nodeToRepMap</span></div>
244
+ <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="comment">// for redundant gepnodes and remove those nodes from pag</span></div>
245
+ <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>: redundantGepNodes)</div>
246
+ <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; {</div>
247
+ <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = pag-&gt;getBaseObjVar(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>);</div>
248
+ <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *gepNode = SVFUtil::dyn_cast&lt;GepObjVar&gt;(pag-&gt;getGNode(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>));</div>
249
+ <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; assert(gepNode &amp;&amp; <span class="stringliteral">&quot;Not a gep node in redundantGepNodes set&quot;</span>);</div>
250
+ <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> apOffset = gepNode-&gt;<a class="code" href="classSVF_1_1GepObjVar.html#a10790e82dbb00532d4aa171f592c54bc">getConstantFieldIdx</a>();</div>
251
+ <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; GepObjVarMap.erase(std::make_pair(base, apOffset));</div>
252
+ <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; memToFieldsMap[base].reset(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>);</div>
253
+ <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; cleanConsCG(<a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>);</div>
254
+ <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; </div>
255
+ <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; pag-&gt;removeGNode(gepNode);</div>
256
+ <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div>
257
+ <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;}</div>
258
+ <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; </div>
259
+ <div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a20617a69c112ad423b1b5021e48a8548"> 214</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a20617a69c112ad423b1b5021e48a8548">Andersen::initialize</a>()</div>
260
+ <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;{</div>
261
+ <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; resetData();</div>
262
+ <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a891816407a4c6346f56bc01a67b78aac">AndersenBase::initialize</a>();</div>
263
+ <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; </div>
264
+ <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a46743284466ff803f52a82b094186d16">Options::ClusterAnder</a>()) cluster();</div>
265
+ <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; </div>
266
+ <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; processAllAddr();</div>
267
+ <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;}</div>
268
+ <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; </div>
269
+ <div class="line"><a name="l00228"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ad90c8cf193bd81870ce8dd88c9580e2c"> 228</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#ad90c8cf193bd81870ce8dd88c9580e2c">Andersen::finalize</a>()</div>
270
+ <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;{</div>
271
+ <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="comment">// TODO: check -stat too.</span></div>
272
+ <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="comment">// TODO: broken</span></div>
273
+ <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a46743284466ff803f52a82b094186d16">Options::ClusterAnder</a>())</div>
274
+ <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; {</div>
275
+ <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;std::string, std::string&gt;</a> stats;</div>
276
+ <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTDataTy</a> *ptd = getPTDataTy();</div>
277
+ <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="comment">// TODO: should we use liveOnly?</span></div>
278
+ <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="comment">// TODO: parameterise final arg.</span></div>
279
+ <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#acbbc5c04c79846fe1cc46a3bd5a65aba">NodeIDAllocator::Clusterer::evaluate</a>(*<a class="code" href="classSVF_1_1PointsTo.html#ae349a9ce6a8739925baffd83d1878b0e">PointsTo::getCurrentBestNodeMapping</a>(), ptd-&gt;<a class="code" href="classSVF_1_1PTData.html#adbe2b955f119871b54dc502de84b94c4">getAllPts</a>(<span class="keyword">true</span>), stats, <span class="keyword">true</span>);</div>
280
+ <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac10cbda6a84ce890c9946a5ff35800b7">NodeIDAllocator::Clusterer::printStats</a>(<span class="stringliteral">&quot;post-main&quot;</span>, stats);</div>
281
+ <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div>
282
+ <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; </div>
283
+ <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="comment">// sanitizePts();</span></div>
284
+ <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a28a1c3571cdee5e05004b29ace364e67">AndersenBase::finalize</a>();</div>
285
+ <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;}</div>
286
+ <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; </div>
287
+ <div class="line"><a name="l00251"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a1caa6fa0740f4fa789d960a5a6fcb9c1"> 251</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a1caa6fa0740f4fa789d960a5a6fcb9c1">Andersen::processNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div>
288
+ <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;{</div>
289
+ <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="comment">// sub nodes do not need to be processed</span></div>
290
+ <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">if</span> (sccRepNode(nodeId) != nodeId)</div>
291
+ <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">return</span>;</div>
295
292
  <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; </div>
296
- <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">if</span> (!getDiffPts(nodeId).empty())</div>
297
- <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; {</div>
298
- <div class="line"><a name="l00259"></a><span class="lineno"> 259</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>
299
- <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; processCopy(nodeId, edge);</div>
300
- <div class="line"><a name="l00261"></a><span class="lineno"> 261</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>
301
- <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; {</div>
302
- <div class="line"><a name="l00263"></a><span class="lineno"> 263</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>
303
- <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; processGep(nodeId, gepEdge);</div>
304
- <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; }</div>
305
- <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; }</div>
293
+ <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = consCG-&gt;getConstraintNode(nodeId);</div>
294
+ <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordtype">double</span> insertStart = stat-&gt;getClk();</div>
295
+ <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; handleLoadStore(node);</div>
296
+ <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordtype">double</span> insertEnd = stat-&gt;getClk();</div>
297
+ <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; timeOfProcessLoadStore += (insertEnd - insertStart) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
298
+ <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; </div>
299
+ <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordtype">double</span> propStart = stat-&gt;getClk();</div>
300
+ <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; handleCopyGep(node);</div>
301
+ <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordtype">double</span> propEnd = stat-&gt;getClk();</div>
302
+ <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; timeOfProcessCopyGep += (propEnd - propStart) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
306
303
  <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;}</div>
307
304
  <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; </div>
308
- <div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a0f32ba8cb1109c257552fa775a007ffd"> 272</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a0f32ba8cb1109c257552fa775a007ffd">Andersen::handleLoadStore</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a> *node)</div>
305
+ <div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ab069683dd6ca563113efbde2813ab35e"> 272</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#ab069683dd6ca563113efbde2813ab35e">Andersen::handleCopyGep</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node)</div>
309
306
  <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;{</div>
310
307
  <div class="line"><a name="l00274"></a><span class="lineno"> 274</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>
311
- <div class="line"><a name="l00275"></a><span class="lineno"> 275</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>
312
- <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; getPts(nodeId).end(); piter != epiter; ++piter)</div>
313
- <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; {</div>
314
- <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = *piter;</div>
315
- <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="comment">// handle load</span></div>
316
- <div class="line"><a name="l00280"></a><span class="lineno"> 280</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>
317
- <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; eit = node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a134e8ed040d7749c2b9a02662115f746">outgoingLoadsEnd</a>(); it != eit; ++it)</div>
308
+ <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; computeDiffPts(nodeId);</div>
309
+ <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; </div>
310
+ <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">if</span> (!getDiffPts(nodeId).empty())</div>
311
+ <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; {</div>
312
+ <div class="line"><a name="l00279"></a><span class="lineno"> 279</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>
313
+ <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; processCopy(nodeId, edge);</div>
314
+ <div class="line"><a name="l00281"></a><span class="lineno"> 281</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>
318
315
  <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; {</div>
319
- <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">if</span> (processLoad(ptd, *it))</div>
320
- <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; pushIntoWorklist(ptd);</div>
316
+ <div class="line"><a name="l00283"></a><span class="lineno"> 283</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>
317
+ <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; processGep(nodeId, gepEdge);</div>
321
318
  <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; }</div>
322
- <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; </div>
323
- <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="comment">// handle store</span></div>
324
- <div class="line"><a name="l00288"></a><span class="lineno"> 288</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>
325
- <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; eit = node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a8d58f5224728bb6811f12c94826167f6">incomingStoresEnd</a>(); it != eit; ++it)</div>
326
- <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; {</div>
327
- <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">if</span> (processStore(ptd, *it))</div>
328
- <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; pushIntoWorklist((*it)-&gt;getSrcID());</div>
329
- <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; }</div>
330
- <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; }</div>
331
- <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;}</div>
332
- <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; </div>
333
- <div class="line"><a name="l00300"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#adccf6acf63abc9cafc92b2148396fd10"> 300</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#adccf6acf63abc9cafc92b2148396fd10">Andersen::processAllAddr</a>()</div>
334
- <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;{</div>
335
- <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">ConstraintGraph::const_iterator</a> nodeIt = consCG-&gt;begin(), nodeEit = consCG-&gt;end(); nodeIt != nodeEit; nodeIt++)</div>
336
- <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; {</div>
337
- <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a> * cgNode = nodeIt-&gt;second;</div>
338
- <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">ConstraintNode::const_iterator</a> it = cgNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a19c1ed324f65f4cc58dd2fd21ed4a971">incomingAddrsBegin</a>(), eit = cgNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#ae8ac9ad8e766b961c7ce06d7219f37af">incomingAddrsEnd</a>();</div>
339
- <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; it != eit; ++it)</div>
340
- <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; processAddr(SVFUtil::cast&lt;AddrCGEdge&gt;(*it));</div>
341
- <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; }</div>
342
- <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;}</div>
343
- <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; </div>
344
- <div class="line"><a name="l00314"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#aca095e135edb5d27efe76bb7ee71184c"> 314</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#aca095e135edb5d27efe76bb7ee71184c">Andersen::processAddr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* addr)</div>
345
- <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;{</div>
346
- <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; numOfProcessedAddr++;</div>
347
- <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; </div>
348
- <div class="line"><a name="l00318"></a><span class="lineno"> 318</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>
349
- <div class="line"><a name="l00319"></a><span class="lineno"> 319</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>
350
- <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">if</span>(addPts(dst,src))</div>
351
- <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; pushIntoWorklist(dst);</div>
352
- <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;}</div>
353
- <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; </div>
354
- <div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#abc20264231658b99998bc4af1f03a4de"> 329</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#abc20264231658b99998bc4af1f03a4de">Andersen::processLoad</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* load)</div>
355
- <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;{</div>
356
- <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;<span class="comment">// if (pag-&gt;isBlkObjOrConstantObj(node) || isNonPointerObj(node))</span></div>
357
- <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">if</span> (pag-&gt;isConstantObj(node) || isNonPointerObj(node))</div>
358
- <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
319
+ <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div>
320
+ <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;}</div>
321
+ <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; </div>
322
+ <div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a0f32ba8cb1109c257552fa775a007ffd"> 292</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a0f32ba8cb1109c257552fa775a007ffd">Andersen::handleLoadStore</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a> *node)</div>
323
+ <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;{</div>
324
+ <div class="line"><a name="l00294"></a><span class="lineno"> 294</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>
325
+ <div class="line"><a name="l00295"></a><span class="lineno"> 295</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>
326
+ <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; getPts(nodeId).end(); piter != epiter; ++piter)</div>
327
+ <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; {</div>
328
+ <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = *piter;</div>
329
+ <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="comment">// handle load</span></div>
330
+ <div class="line"><a name="l00300"></a><span class="lineno"> 300</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>
331
+ <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; eit = node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a134e8ed040d7749c2b9a02662115f746">outgoingLoadsEnd</a>(); it != eit; ++it)</div>
332
+ <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; {</div>
333
+ <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">if</span> (processLoad(ptd, *it))</div>
334
+ <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; pushIntoWorklist(ptd);</div>
335
+ <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div>
336
+ <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; </div>
337
+ <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="comment">// handle store</span></div>
338
+ <div class="line"><a name="l00308"></a><span class="lineno"> 308</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>
339
+ <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; eit = node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a8d58f5224728bb6811f12c94826167f6">incomingStoresEnd</a>(); it != eit; ++it)</div>
340
+ <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; {</div>
341
+ <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">if</span> (processStore(ptd, *it))</div>
342
+ <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; pushIntoWorklist((*it)-&gt;getSrcID());</div>
343
+ <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; }</div>
344
+ <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; }</div>
345
+ <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;}</div>
346
+ <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; </div>
347
+ <div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#adccf6acf63abc9cafc92b2148396fd10"> 320</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#adccf6acf63abc9cafc92b2148396fd10">Andersen::processAllAddr</a>()</div>
348
+ <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;{</div>
349
+ <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">ConstraintGraph::const_iterator</a> nodeIt = consCG-&gt;begin(), nodeEit = consCG-&gt;end(); nodeIt != nodeEit; nodeIt++)</div>
350
+ <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; {</div>
351
+ <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a> * cgNode = nodeIt-&gt;second;</div>
352
+ <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">ConstraintNode::const_iterator</a> it = cgNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a19c1ed324f65f4cc58dd2fd21ed4a971">incomingAddrsBegin</a>(), eit = cgNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#ae8ac9ad8e766b961c7ce06d7219f37af">incomingAddrsEnd</a>();</div>
353
+ <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; it != eit; ++it)</div>
354
+ <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; processAddr(SVFUtil::cast&lt;AddrCGEdge&gt;(*it));</div>
355
+ <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; }</div>
356
+ <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;}</div>
357
+ <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; </div>
358
+ <div class="line"><a name="l00334"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#aca095e135edb5d27efe76bb7ee71184c"> 334</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#aca095e135edb5d27efe76bb7ee71184c">Andersen::processAddr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* addr)</div>
359
+ <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;{</div>
360
+ <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; numOfProcessedAddr++;</div>
359
361
  <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; </div>
360
- <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; numOfProcessedLoad++;</div>
361
- <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; </div>
362
- <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = load-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div>
363
- <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordflow">return</span> addCopyEdge(node, dst);</div>
362
+ <div class="line"><a name="l00338"></a><span class="lineno"> 338</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>
363
+ <div class="line"><a name="l00339"></a><span class="lineno"> 339</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>
364
+ <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">if</span>(addPts(dst,src))</div>
365
+ <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; pushIntoWorklist(dst);</div>
364
366
  <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;}</div>
365
367
  <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; </div>
366
- <div class="line"><a name="l00349"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ac262d42d45dc6130cb031d5b0ed1f024"> 349</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#ac262d42d45dc6130cb031d5b0ed1f024">Andersen::processStore</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* store)</div>
368
+ <div class="line"><a name="l00349"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#abc20264231658b99998bc4af1f03a4de"> 349</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#abc20264231658b99998bc4af1f03a4de">Andersen::processLoad</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* load)</div>
367
369
  <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;{</div>
368
370
  <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;<span class="comment">// if (pag-&gt;isBlkObjOrConstantObj(node) || isNonPointerObj(node))</span></div>
369
371
  <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">if</span> (pag-&gt;isConstantObj(node) || isNonPointerObj(node))</div>
370
372
  <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
371
373
  <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; </div>
372
- <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; numOfProcessedStore++;</div>
374
+ <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; numOfProcessedLoad++;</div>
373
375
  <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; </div>
374
- <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = store-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>();</div>
375
- <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">return</span> addCopyEdge(src, node);</div>
376
+ <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = load-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div>
377
+ <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">return</span> addCopyEdge(node, dst);</div>
376
378
  <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;}</div>
377
379
  <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; </div>
378
- <div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ac4afe532655c3f311143ebbe15175ca2"> 369</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#ac4afe532655c3f311143ebbe15175ca2">Andersen::processCopy</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge)</div>
380
+ <div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ac262d42d45dc6130cb031d5b0ed1f024"> 369</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#ac262d42d45dc6130cb031d5b0ed1f024">Andersen::processStore</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* store)</div>
379
381
  <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;{</div>
380
- <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; numOfProcessedCopy++;</div>
381
- <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; </div>
382
- <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; assert((SVFUtil::isa&lt;CopyCGEdge&gt;(edge)) &amp;&amp; <span class="stringliteral">&quot;not copy/call/ret ??&quot;</span>);</div>
383
- <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div>
384
- <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; srcPts = getDiffPts(node);</div>
385
- <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; </div>
386
- <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordtype">bool</span> changed = unionPts(dst, srcPts);</div>
387
- <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">if</span> (changed)</div>
388
- <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; pushIntoWorklist(dst);</div>
389
- <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordflow">return</span> changed;</div>
390
- <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;}</div>
391
- <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; </div>
392
- <div class="line"><a name="l00389"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#aa697d4a6fe09dd6e50abb09228b3567f"> 389</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#aa697d4a6fe09dd6e50abb09228b3567f">Andersen::processGep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepCGEdge.html">GepCGEdge</a>* edge)</div>
382
+ <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;<span class="comment">// if (pag-&gt;isBlkObjOrConstantObj(node) || isNonPointerObj(node))</span></div>
383
+ <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">if</span> (pag-&gt;isConstantObj(node) || isNonPointerObj(node))</div>
384
+ <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
385
+ <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; </div>
386
+ <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; numOfProcessedStore++;</div>
387
+ <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; </div>
388
+ <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = store-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>();</div>
389
+ <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">return</span> addCopyEdge(src, node);</div>
390
+ <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;}</div>
391
+ <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; </div>
392
+ <div class="line"><a name="l00389"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ac4afe532655c3f311143ebbe15175ca2"> 389</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#ac4afe532655c3f311143ebbe15175ca2">Andersen::processCopy</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge)</div>
393
393
  <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;{</div>
394
- <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; srcPts = getDiffPts(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>());</div>
395
- <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">return</span> processGepPts(srcPts, edge);</div>
396
- <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;}</div>
397
- <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; </div>
398
- <div class="line"><a name="l00398"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ac6b1efcaadfed48c226701ecf6bac55e"> 398</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#ac6b1efcaadfed48c226701ecf6bac55e">Andersen::processGepPts</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts, <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepCGEdge.html">GepCGEdge</a>* edge)</div>
399
- <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;{</div>
400
- <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; numOfProcessedGep++;</div>
401
- <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; </div>
402
- <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> tmpDstPts;</div>
403
- <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;VariantGepCGEdge&gt;(edge))</div>
404
- <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; {</div>
405
- <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="comment">// If a pointer is connected by a variant gep edge,</span></div>
406
- <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="comment">// then set this memory object to be field insensitive,</span></div>
407
- <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="comment">// unless the object is a black hole/constant.</span></div>
408
- <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div>
409
- <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; {</div>
410
- <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordflow">if</span> (consCG-&gt;isBlkObjOrConstantObj(o))</div>
411
- <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; {</div>
412
- <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; tmpDstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div>
413
- <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">continue</span>;</div>
414
- <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; }</div>
415
- <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; </div>
416
- <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">if</span> (!isFieldInsensitive(o))</div>
417
- <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; {</div>
418
- <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; setObjFieldInsensitive(o);</div>
419
- <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; consCG-&gt;addNodeToBeCollapsed(consCG-&gt;getBaseObjVar(o));</div>
420
- <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; }</div>
394
+ <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; numOfProcessedCopy++;</div>
395
+ <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; </div>
396
+ <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; assert((SVFUtil::isa&lt;CopyCGEdge&gt;(edge)) &amp;&amp; <span class="stringliteral">&quot;not copy/call/ret ??&quot;</span>);</div>
397
+ <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div>
398
+ <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; srcPts = getDiffPts(node);</div>
399
+ <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; </div>
400
+ <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordtype">bool</span> changed = unionPts(dst, srcPts);</div>
401
+ <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordflow">if</span> (changed)</div>
402
+ <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; pushIntoWorklist(dst);</div>
403
+ <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordflow">return</span> changed;</div>
404
+ <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;}</div>
405
+ <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; </div>
406
+ <div class="line"><a name="l00409"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#aa697d4a6fe09dd6e50abb09228b3567f"> 409</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#aa697d4a6fe09dd6e50abb09228b3567f">Andersen::processGep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepCGEdge.html">GepCGEdge</a>* edge)</div>
407
+ <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;{</div>
408
+ <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; srcPts = getDiffPts(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>());</div>
409
+ <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">return</span> processGepPts(srcPts, edge);</div>
410
+ <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;}</div>
411
+ <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; </div>
412
+ <div class="line"><a name="l00418"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ac6b1efcaadfed48c226701ecf6bac55e"> 418</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#ac6b1efcaadfed48c226701ecf6bac55e">Andersen::processGepPts</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts, <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepCGEdge.html">GepCGEdge</a>* edge)</div>
413
+ <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160;{</div>
414
+ <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; numOfProcessedGep++;</div>
421
415
  <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; </div>
422
- <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="comment">// Add the field-insensitive node into pts.</span></div>
423
- <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseId = consCG-&gt;getFIObjVar(o);</div>
424
- <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; tmpDstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(baseId);</div>
425
- <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</div>
426
- <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; }</div>
427
- <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>* normalGepEdge = SVFUtil::dyn_cast&lt;NormalGepCGEdge&gt;(edge))</div>
428
- <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; {</div>
429
- <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="comment">// TODO: after the node is set to field insensitive, handling invariant</span></div>
430
- <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="comment">// gep edge may lose precision because offsets here are ignored, and the</span></div>
431
- <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="comment">// base object is always returned.</span></div>
432
- <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div>
433
- <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; {</div>
434
- <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keywordflow">if</span> (consCG-&gt;isBlkObjOrConstantObj(o) || isFieldInsensitive(o))</div>
435
- <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; {</div>
436
- <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; tmpDstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div>
437
- <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordflow">continue</span>;</div>
438
- <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; }</div>
439
- <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; </div>
440
- <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fieldSrcPtdNode = consCG-&gt;getGepObjVar(o, normalGepEdge-&gt;getAccessPath().getConstantFieldIdx());</div>
441
- <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; tmpDstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(fieldSrcPtdNode);</div>
442
- <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; }</div>
443
- <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; }</div>
444
- <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">else</span></div>
445
- <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; {</div>
446
- <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Andersen::processGepPts: New type GEP edge type?&quot;</span>);</div>
447
- <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; }</div>
448
- <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; </div>
449
- <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div>
450
- <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">if</span> (unionPts(dstId, tmpDstPts))</div>
451
- <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; {</div>
452
- <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; pushIntoWorklist(dstId);</div>
453
- <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
454
- <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; }</div>
455
- <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; </div>
456
- <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
457
- <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;}</div>
458
- <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; </div>
459
- <div class="line"><a name="l00462"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ae79bff0e9c49f15e7db00ed605824d98"> 462</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#ae79bff0e9c49f15e7db00ed605824d98">Andersen::collapsePWCNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div>
460
- <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;{</div>
461
- <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="comment">// If a node is a PWC node, collapse all its points-to tarsget.</span></div>
462
- <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="comment">// collapseNodePts() may change the points-to set of the nodes which have been processed</span></div>
463
- <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="comment">// before, in this case, we may need to re-do the analysis.</span></div>
464
- <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">if</span> (consCG-&gt;isPWCNode(nodeId) &amp;&amp; collapseNodePts(nodeId))</div>
465
- <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; reanalyze = <span class="keyword">true</span>;</div>
466
- <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;}</div>
467
- <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; </div>
468
- <div class="line"><a name="l00471"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ac22a6946de30bc5887b9e4ec9259764f"> 471</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#ac22a6946de30bc5887b9e4ec9259764f">Andersen::collapseFields</a>()</div>
469
- <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;{</div>
470
- <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keywordflow">while</span> (consCG-&gt;hasNodesToBeCollapsed())</div>
471
- <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; {</div>
472
- <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node = consCG-&gt;getNextCollapseNode();</div>
473
- <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="comment">// collapseField() may change the points-to set of the nodes which have been processed</span></div>
474
- <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="comment">// before, in this case, we may need to re-do the analysis.</span></div>
475
- <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keywordflow">if</span> (collapseField(node))</div>
476
- <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; reanalyze = <span class="keyword">true</span>;</div>
477
- <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; }</div>
478
- <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;}</div>
479
- <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; </div>
480
- <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;<span class="comment">/*</span></div>
481
- <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;<span class="comment"> * Merge constraint graph nodes based on SCC cycle detected.</span></div>
482
- <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;<span class="comment"> */</span></div>
483
- <div class="line"><a name="l00486"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ac86ffd334568e4df5c08b3c827018bef"> 486</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#ac86ffd334568e4df5c08b3c827018bef">Andersen::mergeSccCycle</a>()</div>
484
- <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;{</div>
485
- <div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a> revTopoOrder;</div>
486
- <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a> &amp; topoOrder = getSCCDetector()-&gt;topoNodeStack();</div>
487
- <div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">while</span> (!topoOrder.empty())</div>
488
- <div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; {</div>
489
- <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> repNodeId = topoOrder.top();</div>
490
- <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; topoOrder.pop();</div>
491
- <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; revTopoOrder.push(repNodeId);</div>
492
- <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>&amp; subNodes = getSCCDetector()-&gt;subNodes(repNodeId);</div>
493
- <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="comment">// merge sub nodes to rep node</span></div>
494
- <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; mergeSccNodes(repNodeId, subNodes);</div>
495
- <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; }</div>
496
- <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; </div>
497
- <div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="comment">// restore the topological order for later solving.</span></div>
498
- <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">while</span> (!revTopoOrder.empty())</div>
499
- <div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; {</div>
500
- <div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = revTopoOrder.top();</div>
501
- <div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; revTopoOrder.pop();</div>
502
- <div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; topoOrder.push(nodeId);</div>
503
- <div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; }</div>
504
- <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;}</div>
505
- <div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; </div>
506
- <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; </div>
507
- <div class="line"><a name="l00514"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a1ba1e1e36af289982146de06cf06ab0a"> 514</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a1ba1e1e36af289982146de06cf06ab0a">Andersen::mergeSccNodes</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> repNodeId, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>&amp; subNodes)</div>
508
- <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;{</div>
509
- <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">NodeBS::iterator</a> nodeIt = subNodes.<a class="code" href="classSVF_1_1SparseBitVector.html#abf76d8157c49ddba24bdc9dab3655772">begin</a>(); nodeIt != subNodes.<a class="code" href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">end</a>(); nodeIt++)</div>
510
- <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; {</div>
511
- <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> subNodeId = *nodeIt;</div>
512
- <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keywordflow">if</span> (subNodeId != repNodeId)</div>
513
- <div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; {</div>
514
- <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; mergeNodeToRep(subNodeId, repNodeId);</div>
515
- <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; }</div>
516
- <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; }</div>
517
- <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160;}</div>
518
- <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; </div>
519
- <div class="line"><a name="l00529"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a3f0048155f0b3a6899dac6f30553aa9e"> 529</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#a3f0048155f0b3a6899dac6f30553aa9e">Andersen::collapseNodePts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div>
520
- <div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;{</div>
521
- <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div>
522
- <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; nodePts = getPts(nodeId);</div>
523
- <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> ptsClone = nodePts;</div>
524
- <div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> ptsIt = ptsClone.<a class="code" href="classSVF_1_1PointsTo.html#ad5b582d2672617806c61e6170d0b5a7e">begin</a>(), ptsEit = ptsClone.<a class="code" href="classSVF_1_1PointsTo.html#a6e2ff63437d07a30cc6db35de032728a">end</a>(); ptsIt != ptsEit; ptsIt++)</div>
525
- <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; {</div>
526
- <div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="keywordflow">if</span> (isFieldInsensitive(*ptsIt))</div>
527
- <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="keywordflow">continue</span>;</div>
528
- <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; </div>
529
- <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">if</span> (collapseField(*ptsIt))</div>
530
- <div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; changed = <span class="keyword">true</span>;</div>
531
- <div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; }</div>
532
- <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="keywordflow">return</span> changed;</div>
416
+ <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> tmpDstPts;</div>
417
+ <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;VariantGepCGEdge&gt;(edge))</div>
418
+ <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; {</div>
419
+ <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="comment">// If a pointer is connected by a variant gep edge,</span></div>
420
+ <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="comment">// then set this memory object to be field insensitive,</span></div>
421
+ <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="comment">// unless the object is a black hole/constant.</span></div>
422
+ <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div>
423
+ <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; {</div>
424
+ <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">if</span> (consCG-&gt;isBlkObjOrConstantObj(o))</div>
425
+ <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; {</div>
426
+ <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; tmpDstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div>
427
+ <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keywordflow">continue</span>;</div>
428
+ <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div>
429
+ <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; </div>
430
+ <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">if</span> (!isFieldInsensitive(o))</div>
431
+ <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; {</div>
432
+ <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; setObjFieldInsensitive(o);</div>
433
+ <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; consCG-&gt;addNodeToBeCollapsed(consCG-&gt;getBaseObjVar(o));</div>
434
+ <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; }</div>
435
+ <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; </div>
436
+ <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="comment">// Add the field-insensitive node into pts.</span></div>
437
+ <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseId = consCG-&gt;getFIObjVar(o);</div>
438
+ <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; tmpDstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(baseId);</div>
439
+ <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; }</div>
440
+ <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; }</div>
441
+ <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>* normalGepEdge = SVFUtil::dyn_cast&lt;NormalGepCGEdge&gt;(edge))</div>
442
+ <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; {</div>
443
+ <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="comment">// TODO: after the node is set to field insensitive, handling invariant</span></div>
444
+ <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="comment">// gep edge may lose precision because offsets here are ignored, and the</span></div>
445
+ <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="comment">// base object is always returned.</span></div>
446
+ <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div>
447
+ <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; {</div>
448
+ <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keywordflow">if</span> (consCG-&gt;isBlkObjOrConstantObj(o) || isFieldInsensitive(o))</div>
449
+ <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; {</div>
450
+ <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; tmpDstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div>
451
+ <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="keywordflow">continue</span>;</div>
452
+ <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; }</div>
453
+ <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; </div>
454
+ <div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fieldSrcPtdNode = consCG-&gt;getGepObjVar(o, normalGepEdge-&gt;getAccessPath().getConstantFieldIdx());</div>
455
+ <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; tmpDstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(fieldSrcPtdNode);</div>
456
+ <div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; }</div>
457
+ <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; }</div>
458
+ <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">else</span></div>
459
+ <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; {</div>
460
+ <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Andersen::processGepPts: New type GEP edge type?&quot;</span>);</div>
461
+ <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; }</div>
462
+ <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; </div>
463
+ <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div>
464
+ <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">if</span> (unionPts(dstId, tmpDstPts))</div>
465
+ <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; {</div>
466
+ <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; pushIntoWorklist(dstId);</div>
467
+ <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
468
+ <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; }</div>
469
+ <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; </div>
470
+ <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
471
+ <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;}</div>
472
+ <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; </div>
473
+ <div class="line"><a name="l00482"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ae79bff0e9c49f15e7db00ed605824d98"> 482</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#ae79bff0e9c49f15e7db00ed605824d98">Andersen::collapsePWCNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div>
474
+ <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;{</div>
475
+ <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="comment">// If a node is a PWC node, collapse all its points-to tarsget.</span></div>
476
+ <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="comment">// collapseNodePts() may change the points-to set of the nodes which have been processed</span></div>
477
+ <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="comment">// before, in this case, we may need to re-do the analysis.</span></div>
478
+ <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">if</span> (consCG-&gt;isPWCNode(nodeId) &amp;&amp; collapseNodePts(nodeId))</div>
479
+ <div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; reanalyze = <span class="keyword">true</span>;</div>
480
+ <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;}</div>
481
+ <div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; </div>
482
+ <div class="line"><a name="l00491"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ac22a6946de30bc5887b9e4ec9259764f"> 491</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#ac22a6946de30bc5887b9e4ec9259764f">Andersen::collapseFields</a>()</div>
483
+ <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;{</div>
484
+ <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keywordflow">while</span> (consCG-&gt;hasNodesToBeCollapsed())</div>
485
+ <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; {</div>
486
+ <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node = consCG-&gt;getNextCollapseNode();</div>
487
+ <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="comment">// collapseField() may change the points-to set of the nodes which have been processed</span></div>
488
+ <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="comment">// before, in this case, we may need to re-do the analysis.</span></div>
489
+ <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keywordflow">if</span> (collapseField(node))</div>
490
+ <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; reanalyze = <span class="keyword">true</span>;</div>
491
+ <div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; }</div>
492
+ <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;}</div>
493
+ <div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; </div>
494
+ <div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;<span class="comment">/*</span></div>
495
+ <div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;<span class="comment"> * Merge constraint graph nodes based on SCC cycle detected.</span></div>
496
+ <div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;<span class="comment"> */</span></div>
497
+ <div class="line"><a name="l00506"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ac86ffd334568e4df5c08b3c827018bef"> 506</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#ac86ffd334568e4df5c08b3c827018bef">Andersen::mergeSccCycle</a>()</div>
498
+ <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;{</div>
499
+ <div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a> revTopoOrder;</div>
500
+ <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a> &amp; topoOrder = getSCCDetector()-&gt;topoNodeStack();</div>
501
+ <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keywordflow">while</span> (!topoOrder.empty())</div>
502
+ <div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; {</div>
503
+ <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> repNodeId = topoOrder.top();</div>
504
+ <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; topoOrder.pop();</div>
505
+ <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; revTopoOrder.push(repNodeId);</div>
506
+ <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>&amp; subNodes = getSCCDetector()-&gt;subNodes(repNodeId);</div>
507
+ <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="comment">// merge sub nodes to rep node</span></div>
508
+ <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; mergeSccNodes(repNodeId, subNodes);</div>
509
+ <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; }</div>
510
+ <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; </div>
511
+ <div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="comment">// restore the topological order for later solving.</span></div>
512
+ <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">while</span> (!revTopoOrder.empty())</div>
513
+ <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; {</div>
514
+ <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = revTopoOrder.top();</div>
515
+ <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; revTopoOrder.pop();</div>
516
+ <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; topoOrder.push(nodeId);</div>
517
+ <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; }</div>
518
+ <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;}</div>
519
+ <div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; </div>
520
+ <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; </div>
521
+ <div class="line"><a name="l00534"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a1ba1e1e36af289982146de06cf06ab0a"> 534</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a1ba1e1e36af289982146de06cf06ab0a">Andersen::mergeSccNodes</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> repNodeId, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>&amp; subNodes)</div>
522
+ <div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;{</div>
523
+ <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">NodeBS::iterator</a> nodeIt = subNodes.<a class="code" href="classSVF_1_1SparseBitVector.html#abf76d8157c49ddba24bdc9dab3655772">begin</a>(); nodeIt != subNodes.<a class="code" href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">end</a>(); nodeIt++)</div>
524
+ <div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; {</div>
525
+ <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> subNodeId = *nodeIt;</div>
526
+ <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">if</span> (subNodeId != repNodeId)</div>
527
+ <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; {</div>
528
+ <div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; mergeNodeToRep(subNodeId, repNodeId);</div>
529
+ <div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; }</div>
530
+ <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; }</div>
533
531
  <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;}</div>
534
532
  <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; </div>
535
- <div class="line"><a name="l00549"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#af4a0d960ef198047517bb32ee1e24a61"> 549</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#af4a0d960ef198047517bb32ee1e24a61">Andersen::collapseField</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div>
533
+ <div class="line"><a name="l00549"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a3f0048155f0b3a6899dac6f30553aa9e"> 549</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#a3f0048155f0b3a6899dac6f30553aa9e">Andersen::collapseNodePts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div>
536
534
  <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;{</div>
537
- <div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="keywordflow">if</span> (consCG-&gt;isBlkObjOrConstantObj(nodeId))</div>
538
- <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
539
- <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; </div>
540
- <div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div>
535
+ <div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div>
536
+ <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; nodePts = getPts(nodeId);</div>
537
+ <div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> ptsClone = nodePts;</div>
538
+ <div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> ptsIt = ptsClone.<a class="code" href="classSVF_1_1PointsTo.html#ad5b582d2672617806c61e6170d0b5a7e">begin</a>(), ptsEit = ptsClone.<a class="code" href="classSVF_1_1PointsTo.html#a6e2ff63437d07a30cc6db35de032728a">end</a>(); ptsIt != ptsEit; ptsIt++)</div>
539
+ <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; {</div>
540
+ <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordflow">if</span> (isFieldInsensitive(*ptsIt))</div>
541
+ <div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="keywordflow">continue</span>;</div>
541
542
  <div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; </div>
542
- <div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div>
543
- <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; </div>
544
- <div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="comment">// set base node field-insensitive.</span></div>
545
- <div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; setObjFieldInsensitive(nodeId);</div>
546
- <div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; </div>
547
- <div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="comment">// replace all occurrences of each field with the field-insensitive node</span></div>
548
- <div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseId = consCG-&gt;getFIObjVar(nodeId);</div>
549
- <div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseRepNodeId = consCG-&gt;sccRepNode(baseId);</div>
550
- <div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> &amp; allFields = consCG-&gt;getAllFieldsObjVars(baseId);</div>
551
- <div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">NodeBS::iterator</a> fieldIt = allFields.<a class="code" href="classSVF_1_1SparseBitVector.html#abf76d8157c49ddba24bdc9dab3655772">begin</a>(), fieldEit = allFields.<a class="code" href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">end</a>(); fieldIt != fieldEit; fieldIt++)</div>
552
- <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; {</div>
553
- <div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fieldId = *fieldIt;</div>
554
- <div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">if</span> (fieldId != baseId)</div>
555
- <div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; {</div>
556
- <div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="comment">// use the reverse pts of this field node to find all pointers point to it</span></div>
557
- <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> revPts = getRevPts(fieldId);</div>
558
- <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : revPts)</div>
559
- <div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; {</div>
560
- <div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="comment">// change the points-to target from field to base node</span></div>
561
- <div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; clearPts(o, fieldId);</div>
562
- <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; addPts(o, baseId);</div>
563
- <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; pushIntoWorklist(o);</div>
564
- <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; </div>
565
- <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; changed = <span class="keyword">true</span>;</div>
566
- <div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; }</div>
567
- <div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="comment">// merge field node into base node, including edges and pts.</span></div>
568
- <div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fieldRepNodeId = consCG-&gt;sccRepNode(fieldId);</div>
569
- <div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; mergeNodeToRep(fieldRepNodeId, baseRepNodeId);</div>
570
- <div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="keywordflow">if</span> (fieldId != baseRepNodeId)</div>
571
- <div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; {</div>
572
- <div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="comment">// gep node fieldId becomes redundant if it is merged to its base node who is set as field-insensitive</span></div>
573
- <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="comment">// two node IDs should be different otherwise this field is actually the base and should not be removed.</span></div>
574
- <div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; redundantGepNodes.set(fieldId);</div>
575
- <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; }</div>
576
- <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; }</div>
577
- <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; }</div>
578
- <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; </div>
579
- <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordflow">if</span> (consCG-&gt;isPWCNode(baseRepNodeId))</div>
580
- <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keywordflow">if</span> (collapseNodePts(baseRepNodeId))</div>
581
- <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; changed = <span class="keyword">true</span>;</div>
582
- <div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; </div>
583
- <div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div>
584
- <div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; timeOfCollapse += (end - start) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
585
- <div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; </div>
586
- <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="keywordflow">return</span> changed;</div>
587
- <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;}</div>
588
- <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; </div>
589
- <div class="line"><a name="l00610"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a31ea24432ff42ab86a4728f2bde571bc"> 610</a></span>&#160;<a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; <a class="code" href="classSVF_1_1Andersen.html#a31ea24432ff42ab86a4728f2bde571bc">Andersen::SCCDetect</a>()</div>
590
- <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;{</div>
591
- <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; numOfSCCDetection++;</div>
592
- <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; </div>
593
- <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordtype">double</span> sccStart = stat-&gt;getClk();</div>
594
- <div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#aaa932894d00b69cfa741f9987a9cc6b8">WPAConstraintSolver::SCCDetect</a>();</div>
595
- <div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="keywordtype">double</span> sccEnd = stat-&gt;getClk();</div>
596
- <div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; </div>
597
- <div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; timeOfSCCDetection += (sccEnd - sccStart)/<a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
598
- <div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; </div>
599
- <div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordtype">double</span> mergeStart = stat-&gt;getClk();</div>
600
- <div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; </div>
601
- <div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; mergeSccCycle();</div>
543
+ <div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="keywordflow">if</span> (collapseField(*ptsIt))</div>
544
+ <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; changed = <span class="keyword">true</span>;</div>
545
+ <div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; }</div>
546
+ <div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordflow">return</span> changed;</div>
547
+ <div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160;}</div>
548
+ <div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; </div>
549
+ <div class="line"><a name="l00569"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#af4a0d960ef198047517bb32ee1e24a61"> 569</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#af4a0d960ef198047517bb32ee1e24a61">Andersen::collapseField</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div>
550
+ <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;{</div>
551
+ <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <span class="keywordflow">if</span> (consCG-&gt;isBlkObjOrConstantObj(nodeId))</div>
552
+ <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
553
+ <div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; </div>
554
+ <div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div>
555
+ <div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; </div>
556
+ <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div>
557
+ <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; </div>
558
+ <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="comment">// set base node field-insensitive.</span></div>
559
+ <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; setObjFieldInsensitive(nodeId);</div>
560
+ <div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; </div>
561
+ <div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="comment">// replace all occurrences of each field with the field-insensitive node</span></div>
562
+ <div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseId = consCG-&gt;getFIObjVar(nodeId);</div>
563
+ <div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseRepNodeId = consCG-&gt;sccRepNode(baseId);</div>
564
+ <div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> &amp; allFields = consCG-&gt;getAllFieldsObjVars(baseId);</div>
565
+ <div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">NodeBS::iterator</a> fieldIt = allFields.<a class="code" href="classSVF_1_1SparseBitVector.html#abf76d8157c49ddba24bdc9dab3655772">begin</a>(), fieldEit = allFields.<a class="code" href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">end</a>(); fieldIt != fieldEit; fieldIt++)</div>
566
+ <div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; {</div>
567
+ <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fieldId = *fieldIt;</div>
568
+ <div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keywordflow">if</span> (fieldId != baseId)</div>
569
+ <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; {</div>
570
+ <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="comment">// use the reverse pts of this field node to find all pointers point to it</span></div>
571
+ <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> revPts = getRevPts(fieldId);</div>
572
+ <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : revPts)</div>
573
+ <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; {</div>
574
+ <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="comment">// change the points-to target from field to base node</span></div>
575
+ <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; clearPts(o, fieldId);</div>
576
+ <div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; addPts(o, baseId);</div>
577
+ <div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; pushIntoWorklist(o);</div>
578
+ <div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; </div>
579
+ <div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; changed = <span class="keyword">true</span>;</div>
580
+ <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; }</div>
581
+ <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="comment">// merge field node into base node, including edges and pts.</span></div>
582
+ <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fieldRepNodeId = consCG-&gt;sccRepNode(fieldId);</div>
583
+ <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; mergeNodeToRep(fieldRepNodeId, baseRepNodeId);</div>
584
+ <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="keywordflow">if</span> (fieldId != baseRepNodeId)</div>
585
+ <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; {</div>
586
+ <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="comment">// gep node fieldId becomes redundant if it is merged to its base node who is set as field-insensitive</span></div>
587
+ <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="comment">// two node IDs should be different otherwise this field is actually the base and should not be removed.</span></div>
588
+ <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; redundantGepNodes.set(fieldId);</div>
589
+ <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; }</div>
590
+ <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; }</div>
591
+ <div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; }</div>
592
+ <div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; </div>
593
+ <div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keywordflow">if</span> (consCG-&gt;isPWCNode(baseRepNodeId))</div>
594
+ <div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keywordflow">if</span> (collapseNodePts(baseRepNodeId))</div>
595
+ <div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; changed = <span class="keyword">true</span>;</div>
596
+ <div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; </div>
597
+ <div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div>
598
+ <div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; timeOfCollapse += (end - start) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
602
599
  <div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; </div>
603
- <div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keywordtype">double</span> mergeEnd = stat-&gt;getClk();</div>
604
- <div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; </div>
605
- <div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; timeOfSCCMerges += (mergeEnd - mergeStart)/<a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
606
- <div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; </div>
607
- <div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keywordflow">return</span> getSCCDetector()-&gt;topoNodeStack();</div>
608
- <div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160;}</div>
609
- <div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; </div>
610
- <div class="line"><a name="l00634"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a6c60b761ddf3d6bf08c8a9c3f6fd9f0b"> 634</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#a6c60b761ddf3d6bf08c8a9c3f6fd9f0b">Andersen::updateCallGraph</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">CallSiteToFunPtrMap</a>&amp; callsites)</div>
611
- <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160;{</div>
612
- <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; </div>
613
- <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="keywordtype">double</span> cgUpdateStart = stat-&gt;getClk();</div>
614
- <div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; </div>
615
- <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a35bd5f0fb2c146199e9f1aa6a19b4062">CallEdgeMap</a> newEdges;</div>
616
- <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; onTheFlyCallGraphSolve(callsites,newEdges);</div>
617
- <div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <a class="code" href="namespaceSVF.html#ac82022f3f81965c3ce9b26c299f537a7">NodePairSet</a> cpySrcNodes; </div>
618
- <div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keywordflow">for</span>(CallEdgeMap::iterator it = newEdges.begin(), eit = newEdges.end(); it!=eit; ++it )</div>
619
- <div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; {</div>
620
- <div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(it-&gt;first-&gt;getCallSite());</div>
621
- <div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keywordflow">for</span>(FunctionSet::iterator cit = it-&gt;second.begin(), ecit = it-&gt;second.end(); cit!=ecit; ++cit)</div>
622
- <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; {</div>
623
- <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; connectCaller2CalleeParams(cs,*cit,cpySrcNodes);</div>
624
- <div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; }</div>
625
- <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; }</div>
626
- <div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordflow">for</span>(NodePairSet::iterator it = cpySrcNodes.begin(), eit = cpySrcNodes.end(); it!=eit; ++it)</div>
627
- <div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; {</div>
628
- <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; pushIntoWorklist(it-&gt;first);</div>
629
- <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; }</div>
630
- <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; </div>
631
- <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordtype">double</span> cgUpdateEnd = stat-&gt;getClk();</div>
632
- <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; timeOfUpdateCallGraph += (cgUpdateEnd - cgUpdateStart) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
633
- <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; </div>
634
- <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="keywordflow">return</span> (!newEdges.empty());</div>
635
- <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160;}</div>
636
- <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; </div>
637
- <div class="line"><a name="l00661"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a7b1b9e9b25b5643440aca77e23a8de07"> 661</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a7b1b9e9b25b5643440aca77e23a8de07">Andersen::heapAllocatorViaIndCall</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs, <a class="code" href="namespaceSVF.html#ac82022f3f81965c3ce9b26c299f537a7">NodePairSet</a> &amp;cpySrcNodes)</div>
638
- <div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160;{</div>
639
- <div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; assert(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(cs) == <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;not an indirect callsite?&quot;</span>);</div>
640
- <div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = pag-&gt;getICFG()-&gt;getRetICFGNode(cs.<a class="code" href="classSVF_1_1CallSite.html#ac2a0091dab3543a398da890b947e42ef">getInstruction</a>());</div>
641
- <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* cs_return = pag-&gt;getCallSiteRet(retBlockNode);</div>
642
- <div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret;</div>
643
- <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; CallSite2DummyValPN::const_iterator it = callsite2DummyValPN.find(cs);</div>
644
- <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="keywordflow">if</span>(it != callsite2DummyValPN.end())</div>
645
- <div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; {</div>
646
- <div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; srcret = sccRepNode(it-&gt;second);</div>
647
- <div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; }</div>
648
- <div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keywordflow">else</span></div>
649
- <div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; {</div>
650
- <div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> valNode = pag-&gt;addDummyValNode();</div>
651
- <div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> objNode = pag-&gt;addDummyObjNode(cs.<a class="code" href="classSVF_1_1CallSite.html#a93e70225ce9c55ca65ea9d5cf737206f">getType</a>());</div>
652
- <div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; addPts(valNode,objNode);</div>
653
- <div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; callsite2DummyValPN.insert(std::make_pair(cs,valNode));</div>
654
- <div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; consCG-&gt;addConstraintNode(<span class="keyword">new</span> <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>(valNode),valNode);</div>
655
- <div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; consCG-&gt;addConstraintNode(<span class="keyword">new</span> <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>(objNode),objNode);</div>
656
- <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; srcret = valNode;</div>
657
- <div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; }</div>
658
- <div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; </div>
659
- <div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = sccRepNode(cs_return-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div>
660
- <div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordflow">if</span>(addCopyEdge(srcret, dstrec))</div>
661
- <div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; cpySrcNodes.insert(std::make_pair(srcret,dstrec));</div>
662
- <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160;}</div>
663
- <div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; </div>
664
- <div class="line"><a name="l00691"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a5a90e681e46c52ffd3debf02910c7ecf"> 691</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a5a90e681e46c52ffd3debf02910c7ecf">Andersen::connectCaller2CalleeParams</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>, <a class="code" href="namespaceSVF.html#ac82022f3f81965c3ce9b26c299f537a7">NodePairSet</a> &amp;cpySrcNodes)</div>
665
- <div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;{</div>
666
- <div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; assert(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
667
- <div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; </div>
668
- <div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#adbfc4364261f019dc6cf33234a5177d2">DAndersen</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;connect parameters from indirect callsite &quot;</span> &lt;&lt; cs.<a class="code" href="classSVF_1_1CallSite.html#ac2a0091dab3543a398da890b947e42ef">getInstruction</a>()-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">toString</a>() &lt;&lt; <span class="stringliteral">&quot; to callee &quot;</span> &lt;&lt; *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
669
- <div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; </div>
670
- <div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode = pag-&gt;getICFG()-&gt;getCallICFGNode(cs.<a class="code" href="classSVF_1_1CallSite.html#ac2a0091dab3543a398da890b947e42ef">getInstruction</a>());</div>
671
- <div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = pag-&gt;getICFG()-&gt;getRetICFGNode(cs.<a class="code" href="classSVF_1_1CallSite.html#ac2a0091dab3543a398da890b947e42ef">getInstruction</a>());</div>
672
- <div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; </div>
673
- <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a19b96a872d9096037f20e25122e469ea">SVFUtil::isHeapAllocExtFunViaRet</a>(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>) &amp;&amp; pag-&gt;callsiteHasRet(retBlockNode))</div>
674
- <div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; {</div>
675
- <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; heapAllocatorViaIndCall(cs,cpySrcNodes);</div>
676
- <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; }</div>
677
- <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; </div>
678
- <div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keywordflow">if</span> (pag-&gt;funHasRet(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>) &amp;&amp; pag-&gt;callsiteHasRet(retBlockNode))</div>
679
- <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; {</div>
680
- <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* cs_return = pag-&gt;getCallSiteRet(retBlockNode);</div>
681
- <div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* fun_return = pag-&gt;getFunRet(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
682
- <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keywordflow">if</span> (cs_return-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>() &amp;&amp; fun_return-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div>
683
- <div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; {</div>
684
- <div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = sccRepNode(cs_return-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div>
685
- <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret = sccRepNode(fun_return-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div>
686
- <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="keywordflow">if</span>(addCopyEdge(srcret, dstrec))</div>
687
- <div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; {</div>
688
- <div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; cpySrcNodes.insert(std::make_pair(srcret,dstrec));</div>
689
- <div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; }</div>
690
- <div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; }</div>
691
- <div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="keywordflow">else</span></div>
692
- <div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; {</div>
693
- <div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#adbfc4364261f019dc6cf33234a5177d2">DAndersen</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;not a pointer ignored\n&quot;</span>);</div>
694
- <div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; }</div>
695
- <div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; }</div>
696
- <div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; </div>
697
- <div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="keywordflow">if</span> (pag-&gt;hasCallSiteArgsMap(callBlockNode) &amp;&amp; pag-&gt;hasFunArgsList(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>))</div>
698
- <div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; {</div>
699
- <div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; </div>
700
- <div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="comment">// connect actual and formal param</span></div>
701
- <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVFIR::SVFVarList</a>&amp; csArgList = pag-&gt;getCallSiteArgsList(callBlockNode);</div>
702
- <div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVFIR::SVFVarList</a>&amp; funArgList = pag-&gt;getFunArgsList(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
703
- <div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="comment">//Go through the fixed parameters.</span></div>
704
- <div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; args:&quot;</span>);</div>
705
- <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; SVFIR::SVFVarList::const_iterator funArgIt = funArgList.begin(), funArgEit = funArgList.end();</div>
706
- <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; SVFIR::SVFVarList::const_iterator csArgIt = csArgList.begin(), csArgEit = csArgList.end();</div>
707
- <div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keywordflow">for</span> (; funArgIt != funArgEit; ++csArgIt, ++funArgIt)</div>
708
- <div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; {</div>
709
- <div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="comment">//Some programs (e.g. Linux kernel) leave unneeded parameters empty.</span></div>
710
- <div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordflow">if</span> (csArgIt == csArgEit)</div>
711
- <div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; {</div>
712
- <div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#adbfc4364261f019dc6cf33234a5177d2">DAndersen</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; !! not enough args\n&quot;</span>);</div>
713
- <div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="keywordflow">break</span>;</div>
714
- <div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; }</div>
715
- <div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *cs_arg = *csArgIt ;</div>
716
- <div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *fun_arg = *funArgIt;</div>
717
- <div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; </div>
718
- <div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keywordflow">if</span> (cs_arg-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>() &amp;&amp; fun_arg-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div>
719
- <div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; {</div>
720
- <div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#adbfc4364261f019dc6cf33234a5177d2">DAndersen</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process actual parm &quot;</span> &lt;&lt; cs_arg-&gt;<a class="code" href="classSVF_1_1SVFVar.html#ada932ef2ae0a3e712174df479c35b0dd">toString</a>() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
721
- <div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcAA = sccRepNode(cs_arg-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div>
722
- <div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstFA = sccRepNode(fun_arg-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div>
723
- <div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; <span class="keywordflow">if</span>(addCopyEdge(srcAA, dstFA))</div>
724
- <div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; {</div>
725
- <div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; cpySrcNodes.insert(std::make_pair(srcAA,dstFA));</div>
726
- <div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; }</div>
727
- <div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; }</div>
728
- <div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; }</div>
729
- <div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; </div>
730
- <div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="comment">//Any remaining actual args must be varargs.</span></div>
731
- <div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;isVarArg())</div>
732
- <div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; {</div>
733
- <div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vaF = sccRepNode(pag-&gt;getVarargNode(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>));</div>
734
- <div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n varargs:&quot;</span>);</div>
735
- <div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <span class="keywordflow">for</span> (; csArgIt != csArgEit; ++csArgIt)</div>
736
- <div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; {</div>
737
- <div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *cs_arg = *csArgIt;</div>
738
- <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keywordflow">if</span> (cs_arg-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div>
739
- <div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; {</div>
740
- <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnAA = sccRepNode(cs_arg-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div>
741
- <div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="keywordflow">if</span> (addCopyEdge(vnAA,vaF))</div>
742
- <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; {</div>
743
- <div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; cpySrcNodes.insert(std::make_pair(vnAA,vaF));</div>
744
- <div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; }</div>
745
- <div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; }</div>
746
- <div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; }</div>
747
- <div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; }</div>
748
- <div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keywordflow">if</span>(csArgIt != csArgEit)</div>
749
- <div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; {</div>
750
- <div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;too many args to non-vararg func.&quot;</span>);</div>
751
- <div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;(&quot;</span> + cs.<a class="code" href="classSVF_1_1CallSite.html#ac2a0091dab3543a398da890b947e42ef">getInstruction</a>()-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a7effb0f37f486745e0cdc3ae5e9c732b">getSourceLoc</a>() + <span class="stringliteral">&quot;)&quot;</span>);</div>
752
- <div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; }</div>
753
- <div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; }</div>
754
- <div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160;}</div>
755
- <div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; </div>
756
- <div class="line"><a name="l00786"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ae6b1e54a389abc68994219e39539127e"> 786</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#ae6b1e54a389abc68994219e39539127e">Andersen::mergeSrcToTgt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId)</div>
757
- <div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160;{</div>
758
- <div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; </div>
759
- <div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="keywordflow">if</span>(nodeId==newRepId)</div>
760
- <div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
761
- <div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; </div>
762
- <div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; updatePropaPts(newRepId, nodeId);</div>
763
- <div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; unionPts(newRepId,nodeId);</div>
764
- <div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; </div>
765
- <div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = consCG-&gt;getConstraintNode(nodeId);</div>
766
- <div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordtype">bool</span> pwc = consCG-&gt;moveEdgesToRepNode(node, consCG-&gt;getConstraintNode(newRepId));</div>
767
- <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; </div>
768
- <div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">if</span>(node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a0ffe4f1ca1a6f70466cc1c6b3b12c90d">isPWCNode</a>())</div>
769
- <div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; pwc = <span class="keyword">true</span>;</div>
770
- <div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; </div>
771
- <div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; updateNodeRepAndSubs(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(),newRepId);</div>
772
- <div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; </div>
773
- <div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; consCG-&gt;removeConstraintNode(node);</div>
600
+ <div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keywordflow">return</span> changed;</div>
601
+ <div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;}</div>
602
+ <div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; </div>
603
+ <div class="line"><a name="l00630"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a31ea24432ff42ab86a4728f2bde571bc"> 630</a></span>&#160;<a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; <a class="code" href="classSVF_1_1Andersen.html#a31ea24432ff42ab86a4728f2bde571bc">Andersen::SCCDetect</a>()</div>
604
+ <div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160;{</div>
605
+ <div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; numOfSCCDetection++;</div>
606
+ <div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; </div>
607
+ <div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="keywordtype">double</span> sccStart = stat-&gt;getClk();</div>
608
+ <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#aaa932894d00b69cfa741f9987a9cc6b8">WPAConstraintSolver::SCCDetect</a>();</div>
609
+ <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="keywordtype">double</span> sccEnd = stat-&gt;getClk();</div>
610
+ <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; </div>
611
+ <div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; timeOfSCCDetection += (sccEnd - sccStart)/<a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
612
+ <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; </div>
613
+ <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="keywordtype">double</span> mergeStart = stat-&gt;getClk();</div>
614
+ <div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; </div>
615
+ <div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; mergeSccCycle();</div>
616
+ <div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; </div>
617
+ <div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keywordtype">double</span> mergeEnd = stat-&gt;getClk();</div>
618
+ <div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; </div>
619
+ <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; timeOfSCCMerges += (mergeEnd - mergeStart)/<a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
620
+ <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; </div>
621
+ <div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">return</span> getSCCDetector()-&gt;topoNodeStack();</div>
622
+ <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;}</div>
623
+ <div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; </div>
624
+ <div class="line"><a name="l00654"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a6c60b761ddf3d6bf08c8a9c3f6fd9f0b"> 654</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#a6c60b761ddf3d6bf08c8a9c3f6fd9f0b">Andersen::updateCallGraph</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">CallSiteToFunPtrMap</a>&amp; callsites)</div>
625
+ <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160;{</div>
626
+ <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; </div>
627
+ <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="keywordtype">double</span> cgUpdateStart = stat-&gt;getClk();</div>
628
+ <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; </div>
629
+ <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a35bd5f0fb2c146199e9f1aa6a19b4062">CallEdgeMap</a> newEdges;</div>
630
+ <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; onTheFlyCallGraphSolve(callsites,newEdges);</div>
631
+ <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <a class="code" href="namespaceSVF.html#ac82022f3f81965c3ce9b26c299f537a7">NodePairSet</a> cpySrcNodes; </div>
632
+ <div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keywordflow">for</span>(CallEdgeMap::iterator it = newEdges.begin(), eit = newEdges.end(); it!=eit; ++it )</div>
633
+ <div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; {</div>
634
+ <div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(it-&gt;first-&gt;getCallSite());</div>
635
+ <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="keywordflow">for</span>(FunctionSet::iterator cit = it-&gt;second.begin(), ecit = it-&gt;second.end(); cit!=ecit; ++cit)</div>
636
+ <div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; {</div>
637
+ <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; connectCaller2CalleeParams(cs,*cit,cpySrcNodes);</div>
638
+ <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; }</div>
639
+ <div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; }</div>
640
+ <div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <span class="keywordflow">for</span>(NodePairSet::iterator it = cpySrcNodes.begin(), eit = cpySrcNodes.end(); it!=eit; ++it)</div>
641
+ <div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; {</div>
642
+ <div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; pushIntoWorklist(it-&gt;first);</div>
643
+ <div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; }</div>
644
+ <div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; </div>
645
+ <div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keywordtype">double</span> cgUpdateEnd = stat-&gt;getClk();</div>
646
+ <div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; timeOfUpdateCallGraph += (cgUpdateEnd - cgUpdateStart) / <a class="code" href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div>
647
+ <div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; </div>
648
+ <div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="keywordflow">return</span> (!newEdges.empty());</div>
649
+ <div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;}</div>
650
+ <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; </div>
651
+ <div class="line"><a name="l00681"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a7b1b9e9b25b5643440aca77e23a8de07"> 681</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a7b1b9e9b25b5643440aca77e23a8de07">Andersen::heapAllocatorViaIndCall</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs, <a class="code" href="namespaceSVF.html#ac82022f3f81965c3ce9b26c299f537a7">NodePairSet</a> &amp;cpySrcNodes)</div>
652
+ <div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160;{</div>
653
+ <div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; assert(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(cs) == <span class="keyword">nullptr</span> &amp;&amp; <span class="stringliteral">&quot;not an indirect callsite?&quot;</span>);</div>
654
+ <div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = pag-&gt;getICFG()-&gt;getRetICFGNode(cs.<a class="code" href="classSVF_1_1CallSite.html#ac2a0091dab3543a398da890b947e42ef">getInstruction</a>());</div>
655
+ <div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* cs_return = pag-&gt;getCallSiteRet(retBlockNode);</div>
656
+ <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret;</div>
657
+ <div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; CallSite2DummyValPN::const_iterator it = callsite2DummyValPN.find(cs);</div>
658
+ <div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">if</span>(it != callsite2DummyValPN.end())</div>
659
+ <div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; {</div>
660
+ <div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; srcret = sccRepNode(it-&gt;second);</div>
661
+ <div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; }</div>
662
+ <div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keywordflow">else</span></div>
663
+ <div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; {</div>
664
+ <div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> valNode = pag-&gt;addDummyValNode();</div>
665
+ <div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> objNode = pag-&gt;addDummyObjNode(cs.<a class="code" href="classSVF_1_1CallSite.html#a93e70225ce9c55ca65ea9d5cf737206f">getType</a>());</div>
666
+ <div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; addPts(valNode,objNode);</div>
667
+ <div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; callsite2DummyValPN.insert(std::make_pair(cs,valNode));</div>
668
+ <div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; consCG-&gt;addConstraintNode(<span class="keyword">new</span> <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>(valNode),valNode);</div>
669
+ <div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; consCG-&gt;addConstraintNode(<span class="keyword">new</span> <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>(objNode),objNode);</div>
670
+ <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; srcret = valNode;</div>
671
+ <div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; }</div>
672
+ <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; </div>
673
+ <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = sccRepNode(cs_return-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div>
674
+ <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keywordflow">if</span>(addCopyEdge(srcret, dstrec))</div>
675
+ <div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; cpySrcNodes.insert(std::make_pair(srcret,dstrec));</div>
676
+ <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160;}</div>
677
+ <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; </div>
678
+ <div class="line"><a name="l00711"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a5a90e681e46c52ffd3debf02910c7ecf"> 711</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a5a90e681e46c52ffd3debf02910c7ecf">Andersen::connectCaller2CalleeParams</a>(<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>, <a class="code" href="namespaceSVF.html#ac82022f3f81965c3ce9b26c299f537a7">NodePairSet</a> &amp;cpySrcNodes)</div>
679
+ <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160;{</div>
680
+ <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; assert(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
681
+ <div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; </div>
682
+ <div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#adbfc4364261f019dc6cf33234a5177d2">DAndersen</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;connect parameters from indirect callsite &quot;</span> &lt;&lt; cs.<a class="code" href="classSVF_1_1CallSite.html#ac2a0091dab3543a398da890b947e42ef">getInstruction</a>()-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">toString</a>() &lt;&lt; <span class="stringliteral">&quot; to callee &quot;</span> &lt;&lt; *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
683
+ <div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; </div>
684
+ <div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode = pag-&gt;getICFG()-&gt;getCallICFGNode(cs.<a class="code" href="classSVF_1_1CallSite.html#ac2a0091dab3543a398da890b947e42ef">getInstruction</a>());</div>
685
+ <div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = pag-&gt;getICFG()-&gt;getRetICFGNode(cs.<a class="code" href="classSVF_1_1CallSite.html#ac2a0091dab3543a398da890b947e42ef">getInstruction</a>());</div>
686
+ <div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; </div>
687
+ <div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a19b96a872d9096037f20e25122e469ea">SVFUtil::isHeapAllocExtFunViaRet</a>(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>) &amp;&amp; pag-&gt;callsiteHasRet(retBlockNode))</div>
688
+ <div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; {</div>
689
+ <div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; heapAllocatorViaIndCall(cs,cpySrcNodes);</div>
690
+ <div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; }</div>
691
+ <div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; </div>
692
+ <div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordflow">if</span> (pag-&gt;funHasRet(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>) &amp;&amp; pag-&gt;callsiteHasRet(retBlockNode))</div>
693
+ <div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; {</div>
694
+ <div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* cs_return = pag-&gt;getCallSiteRet(retBlockNode);</div>
695
+ <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* fun_return = pag-&gt;getFunRet(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
696
+ <div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">if</span> (cs_return-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>() &amp;&amp; fun_return-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div>
697
+ <div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; {</div>
698
+ <div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = sccRepNode(cs_return-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div>
699
+ <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret = sccRepNode(fun_return-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div>
700
+ <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keywordflow">if</span>(addCopyEdge(srcret, dstrec))</div>
701
+ <div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; {</div>
702
+ <div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; cpySrcNodes.insert(std::make_pair(srcret,dstrec));</div>
703
+ <div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; }</div>
704
+ <div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; }</div>
705
+ <div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keywordflow">else</span></div>
706
+ <div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; {</div>
707
+ <div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#adbfc4364261f019dc6cf33234a5177d2">DAndersen</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;not a pointer ignored\n&quot;</span>);</div>
708
+ <div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; }</div>
709
+ <div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; }</div>
710
+ <div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; </div>
711
+ <div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="keywordflow">if</span> (pag-&gt;hasCallSiteArgsMap(callBlockNode) &amp;&amp; pag-&gt;hasFunArgsList(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>))</div>
712
+ <div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; {</div>
713
+ <div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; </div>
714
+ <div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="comment">// connect actual and formal param</span></div>
715
+ <div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVFIR::SVFVarList</a>&amp; csArgList = pag-&gt;getCallSiteArgsList(callBlockNode);</div>
716
+ <div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVFIR::SVFVarList</a>&amp; funArgList = pag-&gt;getFunArgsList(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
717
+ <div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; <span class="comment">//Go through the fixed parameters.</span></div>
718
+ <div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; args:&quot;</span>);</div>
719
+ <div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; SVFIR::SVFVarList::const_iterator funArgIt = funArgList.begin(), funArgEit = funArgList.end();</div>
720
+ <div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; SVFIR::SVFVarList::const_iterator csArgIt = csArgList.begin(), csArgEit = csArgList.end();</div>
721
+ <div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <span class="keywordflow">for</span> (; funArgIt != funArgEit; ++csArgIt, ++funArgIt)</div>
722
+ <div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; {</div>
723
+ <div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="comment">//Some programs (e.g. Linux kernel) leave unneeded parameters empty.</span></div>
724
+ <div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="keywordflow">if</span> (csArgIt == csArgEit)</div>
725
+ <div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; {</div>
726
+ <div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#adbfc4364261f019dc6cf33234a5177d2">DAndersen</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; !! not enough args\n&quot;</span>);</div>
727
+ <div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="keywordflow">break</span>;</div>
728
+ <div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; }</div>
729
+ <div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *cs_arg = *csArgIt ;</div>
730
+ <div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *fun_arg = *funArgIt;</div>
731
+ <div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; </div>
732
+ <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keywordflow">if</span> (cs_arg-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>() &amp;&amp; fun_arg-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div>
733
+ <div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; {</div>
734
+ <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#adbfc4364261f019dc6cf33234a5177d2">DAndersen</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process actual parm &quot;</span> &lt;&lt; cs_arg-&gt;<a class="code" href="classSVF_1_1SVFVar.html#ada932ef2ae0a3e712174df479c35b0dd">toString</a>() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
735
+ <div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcAA = sccRepNode(cs_arg-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div>
736
+ <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstFA = sccRepNode(fun_arg-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div>
737
+ <div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <span class="keywordflow">if</span>(addCopyEdge(srcAA, dstFA))</div>
738
+ <div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; {</div>
739
+ <div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; cpySrcNodes.insert(std::make_pair(srcAA,dstFA));</div>
740
+ <div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; }</div>
741
+ <div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; }</div>
742
+ <div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; }</div>
743
+ <div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; </div>
744
+ <div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <span class="comment">//Any remaining actual args must be varargs.</span></div>
745
+ <div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;isVarArg())</div>
746
+ <div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; {</div>
747
+ <div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vaF = sccRepNode(pag-&gt;getVarargNode(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>));</div>
748
+ <div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n varargs:&quot;</span>);</div>
749
+ <div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keywordflow">for</span> (; csArgIt != csArgEit; ++csArgIt)</div>
750
+ <div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; {</div>
751
+ <div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *cs_arg = *csArgIt;</div>
752
+ <div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <span class="keywordflow">if</span> (cs_arg-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div>
753
+ <div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; {</div>
754
+ <div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnAA = sccRepNode(cs_arg-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div>
755
+ <div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="keywordflow">if</span> (addCopyEdge(vnAA,vaF))</div>
756
+ <div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; {</div>
757
+ <div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; cpySrcNodes.insert(std::make_pair(vnAA,vaF));</div>
758
+ <div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; }</div>
759
+ <div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; }</div>
760
+ <div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; }</div>
761
+ <div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; }</div>
762
+ <div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordflow">if</span>(csArgIt != csArgEit)</div>
763
+ <div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; {</div>
764
+ <div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;too many args to non-vararg func.&quot;</span>);</div>
765
+ <div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;(&quot;</span> + cs.<a class="code" href="classSVF_1_1CallSite.html#ac2a0091dab3543a398da890b947e42ef">getInstruction</a>()-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a7effb0f37f486745e0cdc3ae5e9c732b">getSourceLoc</a>() + <span class="stringliteral">&quot;)&quot;</span>);</div>
766
+ <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; }</div>
767
+ <div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; }</div>
768
+ <div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160;}</div>
769
+ <div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; </div>
770
+ <div class="line"><a name="l00806"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ae6b1e54a389abc68994219e39539127e"> 806</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#ae6b1e54a389abc68994219e39539127e">Andersen::mergeSrcToTgt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId)</div>
771
+ <div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160;{</div>
772
+ <div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; </div>
773
+ <div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <span class="keywordflow">if</span>(nodeId==newRepId)</div>
774
+ <div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
774
775
  <div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; </div>
775
- <div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="keywordflow">return</span> pwc;</div>
776
- <div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160;}</div>
777
- <div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160;<span class="comment">/*</span></div>
778
- <div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160;<span class="comment"> * Merge a node to its rep node based on SCC detection</span></div>
779
- <div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160;<span class="comment"> */</span></div>
780
- <div class="line"><a name="l00817"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a36729160041bc3a3e2b0a92b29062848"> 817</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a36729160041bc3a3e2b0a92b29062848">Andersen::mergeNodeToRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId)</div>
781
- <div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160;{</div>
776
+ <div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; updatePropaPts(newRepId, nodeId);</div>
777
+ <div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; unionPts(newRepId,nodeId);</div>
778
+ <div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; </div>
779
+ <div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = consCG-&gt;getConstraintNode(nodeId);</div>
780
+ <div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <span class="keywordtype">bool</span> pwc = consCG-&gt;moveEdgesToRepNode(node, consCG-&gt;getConstraintNode(newRepId));</div>
782
781
  <div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; </div>
783
- <div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="keywordflow">if</span> (mergeSrcToTgt(nodeId,newRepId))</div>
784
- <div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; consCG-&gt;setPWCNode(newRepId);</div>
785
- <div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160;}</div>
786
- <div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; </div>
787
- <div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160;<span class="comment">/*</span></div>
788
- <div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160;<span class="comment"> * Updates subnodes of its rep, and rep node of its subs</span></div>
789
- <div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160;<span class="comment"> */</span></div>
790
- <div class="line"><a name="l00827"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#acd54e3edace1f41511c8f0a6a68dac18"> 827</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#acd54e3edace1f41511c8f0a6a68dac18">Andersen::updateNodeRepAndSubs</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId)</div>
791
- <div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160;{</div>
792
- <div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; consCG-&gt;setRep(nodeId,newRepId);</div>
793
- <div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> repSubs;</div>
794
- <div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; repSubs.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(nodeId);</div>
795
- <div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <span class="comment">// update nodeToSubsMap, union its subs with its rep Subs</span></div>
796
- <div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>&amp; nodeSubs = consCG-&gt;sccSubNodes(nodeId);</div>
797
- <div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">NodeBS::iterator</a> sit = nodeSubs.<a class="code" href="classSVF_1_1SparseBitVector.html#abf76d8157c49ddba24bdc9dab3655772">begin</a>(), esit = nodeSubs.<a class="code" href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">end</a>(); sit!=esit; ++sit)</div>
798
- <div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; {</div>
799
- <div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> subId = *sit;</div>
800
- <div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; consCG-&gt;setRep(subId,newRepId);</div>
801
- <div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; }</div>
802
- <div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; repSubs |= nodeSubs;</div>
803
- <div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; consCG-&gt;setSubs(newRepId,repSubs);</div>
804
- <div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; consCG-&gt;resetSubs(nodeId);</div>
805
- <div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160;}</div>
806
- <div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; </div>
807
- <div class="line"><a name="l00845"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ae1ff65a411f2c4dfee0973ad4af48daf"> 845</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#ae1ff65a411f2c4dfee0973ad4af48daf">Andersen::cluster</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div>
808
- <div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160;<span class="keyword"></span>{</div>
809
- <div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; assert(<a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>() == 0 &amp;&amp; <span class="stringliteral">&quot;Andersen::cluster: clustering for Andersen&#39;s is currently only supported in field-insesnsitive analysis&quot;</span>);</div>
810
- <div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <a class="code" href="classSVF_1_1Steensgaard.html">Steensgaard</a> *steens = <a class="code" href="classSVF_1_1Steensgaard.html#acd5f31c3b1f9b47def458637f8e9389e">Steensgaard::createSteensgaard</a>(pag);</div>
811
- <div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; std::vector&lt;std::pair&lt;unsigned, unsigned&gt;&gt; keys;</div>
812
- <div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> pit = pag-&gt;begin(); pit != pag-&gt;end(); ++pit)</div>
813
- <div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; {</div>
814
- <div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; keys.push_back(std::make_pair(pit-&gt;first, 1));</div>
815
- <div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; }</div>
816
- <div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; </div>
817
- <div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; std::vector&lt;std::pair&lt;hclust_fast_methods, std::vector&lt;NodeID&gt;&gt;&gt; candidates;</div>
818
- <div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> nodeMapping =</div>
819
- <div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; std::make_shared&lt;std::vector&lt;NodeID&gt;&gt;(<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a33d502a0bd49307cd824e34b73157b9b">NodeIDAllocator::Clusterer::cluster</a>(steens, keys, candidates, <span class="stringliteral">&quot;aux-steens&quot;</span>));</div>
820
- <div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> reverseNodeMapping =</div>
821
- <div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; std::make_shared&lt;std::vector&lt;NodeID&gt;&gt;(<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a36b25188130f4c21d145c950a70d616f">NodeIDAllocator::Clusterer::getReverseNodeMapping</a>(*nodeMapping));</div>
822
- <div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; </div>
823
- <div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a84eca4c7fc833f8ca4d119cd4da08ca8">PointsTo::setCurrentBestNodeMapping</a>(nodeMapping, reverseNodeMapping);</div>
824
- <div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160;}</div>
825
- <div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; </div>
826
- <div class="line"><a name="l00867"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a43858bd242c7f2c5f33c3c0f6445376a"> 867</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a43858bd242c7f2c5f33c3c0f6445376a">Andersen::dumpTopLevelPtsTo</a>()</div>
827
- <div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160;{</div>
828
- <div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; <span class="keywordflow">for</span> (OrderedNodeSet::iterator nIter = this-&gt;getAllValidPtrs().begin();</div>
829
- <div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; nIter != this-&gt;getAllValidPtrs().end(); ++nIter)</div>
782
+ <div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <span class="keywordflow">if</span>(node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a0ffe4f1ca1a6f70466cc1c6b3b12c90d">isPWCNode</a>())</div>
783
+ <div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; pwc = <span class="keyword">true</span>;</div>
784
+ <div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; </div>
785
+ <div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; updateNodeRepAndSubs(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(),newRepId);</div>
786
+ <div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; </div>
787
+ <div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; consCG-&gt;removeConstraintNode(node);</div>
788
+ <div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; </div>
789
+ <div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <span class="keywordflow">return</span> pwc;</div>
790
+ <div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160;}</div>
791
+ <div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160;<span class="comment">/*</span></div>
792
+ <div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160;<span class="comment"> * Merge a node to its rep node based on SCC detection</span></div>
793
+ <div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160;<span class="comment"> */</span></div>
794
+ <div class="line"><a name="l00837"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a36729160041bc3a3e2b0a92b29062848"> 837</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a36729160041bc3a3e2b0a92b29062848">Andersen::mergeNodeToRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId)</div>
795
+ <div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160;{</div>
796
+ <div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; </div>
797
+ <div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <span class="keywordflow">if</span> (mergeSrcToTgt(nodeId,newRepId))</div>
798
+ <div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; consCG-&gt;setPWCNode(newRepId);</div>
799
+ <div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160;}</div>
800
+ <div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; </div>
801
+ <div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160;<span class="comment">/*</span></div>
802
+ <div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160;<span class="comment"> * Updates subnodes of its rep, and rep node of its subs</span></div>
803
+ <div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160;<span class="comment"> */</span></div>
804
+ <div class="line"><a name="l00847"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#acd54e3edace1f41511c8f0a6a68dac18"> 847</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#acd54e3edace1f41511c8f0a6a68dac18">Andersen::updateNodeRepAndSubs</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId)</div>
805
+ <div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160;{</div>
806
+ <div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; consCG-&gt;setRep(nodeId,newRepId);</div>
807
+ <div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> repSubs;</div>
808
+ <div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; repSubs.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(nodeId);</div>
809
+ <div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <span class="comment">// update nodeToSubsMap, union its subs with its rep Subs</span></div>
810
+ <div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>&amp; nodeSubs = consCG-&gt;sccSubNodes(nodeId);</div>
811
+ <div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">NodeBS::iterator</a> sit = nodeSubs.<a class="code" href="classSVF_1_1SparseBitVector.html#abf76d8157c49ddba24bdc9dab3655772">begin</a>(), esit = nodeSubs.<a class="code" href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">end</a>(); sit!=esit; ++sit)</div>
812
+ <div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; {</div>
813
+ <div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> subId = *sit;</div>
814
+ <div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; consCG-&gt;setRep(subId,newRepId);</div>
815
+ <div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; }</div>
816
+ <div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; repSubs |= nodeSubs;</div>
817
+ <div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; consCG-&gt;setSubs(newRepId,repSubs);</div>
818
+ <div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; consCG-&gt;resetSubs(nodeId);</div>
819
+ <div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160;}</div>
820
+ <div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; </div>
821
+ <div class="line"><a name="l00865"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#ae1ff65a411f2c4dfee0973ad4af48daf"> 865</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#ae1ff65a411f2c4dfee0973ad4af48daf">Andersen::cluster</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div>
822
+ <div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;<span class="keyword"></span>{</div>
823
+ <div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; assert(<a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>() == 0 &amp;&amp; <span class="stringliteral">&quot;Andersen::cluster: clustering for Andersen&#39;s is currently only supported in field-insesnsitive analysis&quot;</span>);</div>
824
+ <div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; <a class="code" href="classSVF_1_1Steensgaard.html">Steensgaard</a> *steens = <a class="code" href="classSVF_1_1Steensgaard.html#acd5f31c3b1f9b47def458637f8e9389e">Steensgaard::createSteensgaard</a>(pag);</div>
825
+ <div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; std::vector&lt;std::pair&lt;unsigned, unsigned&gt;&gt; keys;</div>
826
+ <div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> pit = pag-&gt;begin(); pit != pag-&gt;end(); ++pit)</div>
830
827
  <div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; {</div>
831
- <div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = getPAG()-&gt;getGNode(*nIter);</div>
832
- <div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; <span class="keywordflow">if</span> (getPAG()-&gt;isValidTopLevelPtr(node))</div>
833
- <div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; {</div>
834
- <div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts = this-&gt;getPts(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div>
835
- <div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\nNodeID &quot;</span> &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
836
- <div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; </div>
837
- <div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <span class="keywordflow">if</span> (pts.<a class="code" href="classSVF_1_1PointsTo.html#a13746982a11d0cab57e5919d53bfbec8">empty</a>())</div>
838
- <div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; {</div>
839
- <div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\tPointsTo: {empty}\n\n&quot;</span>;</div>
840
- <div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; }</div>
841
- <div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <span class="keywordflow">else</span></div>
842
- <div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; {</div>
843
- <div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\tPointsTo: { &quot;</span>;</div>
844
- <div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; </div>
845
- <div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; multiset&lt;u32_t&gt; line;</div>
846
- <div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = pts.<a class="code" href="classSVF_1_1PointsTo.html#ad5b582d2672617806c61e6170d0b5a7e">begin</a>(), eit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a6e2ff63437d07a30cc6db35de032728a">end</a>();</div>
847
- <div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; it != eit; ++it)</div>
848
- <div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; {</div>
849
- <div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; line.insert(*it);</div>
850
- <div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; }</div>
851
- <div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <span class="keywordflow">for</span> (multiset&lt;u32_t&gt;::const_iterator it = line.begin(); it != line.end(); ++it)</div>
852
- <div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; *it &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
853
- <div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n\n&quot;</span>;</div>
854
- <div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; }</div>
855
- <div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; }</div>
856
- <div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; }</div>
857
- <div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; </div>
858
- <div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>().flush();</div>
859
- <div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160;}</div>
860
- <div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; </div>
828
+ <div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; keys.push_back(std::make_pair(pit-&gt;first, 1));</div>
829
+ <div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; }</div>
830
+ <div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; </div>
831
+ <div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; std::vector&lt;std::pair&lt;hclust_fast_methods, std::vector&lt;NodeID&gt;&gt;&gt; candidates;</div>
832
+ <div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> nodeMapping =</div>
833
+ <div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; std::make_shared&lt;std::vector&lt;NodeID&gt;&gt;(<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a33d502a0bd49307cd824e34b73157b9b">NodeIDAllocator::Clusterer::cluster</a>(steens, keys, candidates, <span class="stringliteral">&quot;aux-steens&quot;</span>));</div>
834
+ <div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> reverseNodeMapping =</div>
835
+ <div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; std::make_shared&lt;std::vector&lt;NodeID&gt;&gt;(<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a36b25188130f4c21d145c950a70d616f">NodeIDAllocator::Clusterer::getReverseNodeMapping</a>(*nodeMapping));</div>
836
+ <div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; </div>
837
+ <div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a84eca4c7fc833f8ca4d119cd4da08ca8">PointsTo::setCurrentBestNodeMapping</a>(nodeMapping, reverseNodeMapping);</div>
838
+ <div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160;}</div>
839
+ <div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; </div>
840
+ <div class="line"><a name="l00887"></a><span class="lineno"><a class="line" href="classSVF_1_1Andersen.html#a43858bd242c7f2c5f33c3c0f6445376a"> 887</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a43858bd242c7f2c5f33c3c0f6445376a">Andersen::dumpTopLevelPtsTo</a>()</div>
841
+ <div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160;{</div>
842
+ <div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; <span class="keywordflow">for</span> (OrderedNodeSet::iterator nIter = this-&gt;getAllValidPtrs().begin();</div>
843
+ <div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; nIter != this-&gt;getAllValidPtrs().end(); ++nIter)</div>
844
+ <div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; {</div>
845
+ <div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = getPAG()-&gt;getGNode(*nIter);</div>
846
+ <div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; <span class="keywordflow">if</span> (getPAG()-&gt;isValidTopLevelPtr(node))</div>
847
+ <div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; {</div>
848
+ <div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts = this-&gt;getPts(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div>
849
+ <div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\nNodeID &quot;</span> &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
850
+ <div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; </div>
851
+ <div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <span class="keywordflow">if</span> (pts.<a class="code" href="classSVF_1_1PointsTo.html#a13746982a11d0cab57e5919d53bfbec8">empty</a>())</div>
852
+ <div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; {</div>
853
+ <div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\tPointsTo: {empty}\n\n&quot;</span>;</div>
854
+ <div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; }</div>
855
+ <div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; <span class="keywordflow">else</span></div>
856
+ <div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; {</div>
857
+ <div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\tPointsTo: { &quot;</span>;</div>
858
+ <div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; </div>
859
+ <div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; multiset&lt;u32_t&gt; line;</div>
860
+ <div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = pts.<a class="code" href="classSVF_1_1PointsTo.html#ad5b582d2672617806c61e6170d0b5a7e">begin</a>(), eit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a6e2ff63437d07a30cc6db35de032728a">end</a>();</div>
861
+ <div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; it != eit; ++it)</div>
862
+ <div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; {</div>
863
+ <div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; line.insert(*it);</div>
864
+ <div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; }</div>
865
+ <div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <span class="keywordflow">for</span> (multiset&lt;u32_t&gt;::const_iterator it = line.begin(); it != line.end(); ++it)</div>
866
+ <div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; *it &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
867
+ <div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n\n&quot;</span>;</div>
868
+ <div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; }</div>
869
+ <div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; }</div>
870
+ <div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; }</div>
871
+ <div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; </div>
872
+ <div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>().flush();</div>
873
+ <div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160;}</div>
874
+ <div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; </div>
861
875
  </div><!-- fragment --></div><!-- contents -->
862
876
  <div class="ttc" id="anamespaceSVF_html_a5c4820681ef340339ddded756eb82ae1"><div class="ttname"><a href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">SVF::APOffset</a></div><div class="ttdeci">s64_t APOffset</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00061">SVFType.h:61</a></div></div>
863
- <div class="ttc" id="aclassSVF_1_1Andersen_html_ac6b1efcaadfed48c226701ecf6bac55e"><div class="ttname"><a href="classSVF_1_1Andersen.html#ac6b1efcaadfed48c226701ecf6bac55e">SVF::Andersen::processGepPts</a></div><div class="ttdeci">virtual bool processGepPts(const PointsTo &amp;pts, const GepCGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00398">Andersen.cpp:398</a></div></div>
864
- <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a25b00d9ca71cbdd27530fc5d0dc84ee5"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a25b00d9ca71cbdd27530fc5d0dc84ee5">SVF::AndersenBase::numOfSfrs</a></div><div class="ttdeci">static u32_t numOfSfrs</div><div class="ttdoc">Number of processed Store edge.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00128">Andersen.h:128</a></div></div>
877
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_ac6b1efcaadfed48c226701ecf6bac55e"><div class="ttname"><a href="classSVF_1_1Andersen.html#ac6b1efcaadfed48c226701ecf6bac55e">SVF::Andersen::processGepPts</a></div><div class="ttdeci">virtual bool processGepPts(const PointsTo &amp;pts, const GepCGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00418">Andersen.cpp:418</a></div></div>
878
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a25b00d9ca71cbdd27530fc5d0dc84ee5"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a25b00d9ca71cbdd27530fc5d0dc84ee5">SVF::AndersenBase::numOfSfrs</a></div><div class="ttdeci">static u32_t numOfSfrs</div><div class="ttdoc">Number of processed Store edge.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00134">Andersen.h:134</a></div></div>
865
879
  <div class="ttc" id="aclassSVF_1_1Options_html_aabeb232a46547fd35ddc96244fdaf1b9"><div class="ttname"><a href="classSVF_1_1Options.html#aabeb232a46547fd35ddc96244fdaf1b9">SVF::Options::WriteAnder</a></div><div class="ttdeci">static const Option&lt; std::string &gt; WriteAnder</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00243">Options.h:243</a></div></div>
866
- <div class="ttc" id="aclassSVF_1_1AndersenBase_html_aa1246b392aeae1fd10c8a9ebedcc2dd9"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#aa1246b392aeae1fd10c8a9ebedcc2dd9">SVF::AndersenBase::numOfProcessedGep</a></div><div class="ttdeci">static u32_t numOfProcessedGep</div><div class="ttdoc">Number of processed Copy edge.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00125">Andersen.h:125</a></div></div>
867
- <div class="ttc" id="aclassSVF_1_1Andersen_html_ad90c8cf193bd81870ce8dd88c9580e2c"><div class="ttname"><a href="classSVF_1_1Andersen.html#ad90c8cf193bd81870ce8dd88c9580e2c">SVF::Andersen::finalize</a></div><div class="ttdeci">virtual void finalize()</div><div class="ttdoc">Finalize analysis.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00208">Andersen.cpp:208</a></div></div>
868
- <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a2b763519509ce21cf40893c01f8357b6"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a2b763519509ce21cf40893c01f8357b6">SVF::AndersenBase::numOfProcessedStore</a></div><div class="ttdeci">static u32_t numOfProcessedStore</div><div class="ttdoc">Number of processed Load edge.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00127">Andersen.h:127</a></div></div>
869
- <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a6b7d0e57f741c446d0bf178939960143"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a6b7d0e57f741c446d0bf178939960143">SVF::AndersenBase::timeOfSCCDetection</a></div><div class="ttdeci">static double timeOfSCCDetection</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00132">Andersen.h:132</a></div></div>
870
- <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a69aae96fc1c99bf108075e5061f50f9e"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a69aae96fc1c99bf108075e5061f50f9e">SVF::AndersenBase::numOfProcessedLoad</a></div><div class="ttdeci">static u32_t numOfProcessedLoad</div><div class="ttdoc">Number of processed Gep edge.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00126">Andersen.h:126</a></div></div>
880
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_aa1246b392aeae1fd10c8a9ebedcc2dd9"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#aa1246b392aeae1fd10c8a9ebedcc2dd9">SVF::AndersenBase::numOfProcessedGep</a></div><div class="ttdeci">static u32_t numOfProcessedGep</div><div class="ttdoc">Number of processed Copy edge.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00131">Andersen.h:131</a></div></div>
881
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_ad90c8cf193bd81870ce8dd88c9580e2c"><div class="ttname"><a href="classSVF_1_1Andersen.html#ad90c8cf193bd81870ce8dd88c9580e2c">SVF::Andersen::finalize</a></div><div class="ttdeci">virtual void finalize()</div><div class="ttdoc">Finalize analysis.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00228">Andersen.cpp:228</a></div></div>
882
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a2b763519509ce21cf40893c01f8357b6"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a2b763519509ce21cf40893c01f8357b6">SVF::AndersenBase::numOfProcessedStore</a></div><div class="ttdeci">static u32_t numOfProcessedStore</div><div class="ttdoc">Number of processed Load edge.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00133">Andersen.h:133</a></div></div>
883
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a6b7d0e57f741c446d0bf178939960143"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a6b7d0e57f741c446d0bf178939960143">SVF::AndersenBase::timeOfSCCDetection</a></div><div class="ttdeci">static double timeOfSCCDetection</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00138">Andersen.h:138</a></div></div>
884
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a69aae96fc1c99bf108075e5061f50f9e"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a69aae96fc1c99bf108075e5061f50f9e">SVF::AndersenBase::numOfProcessedLoad</a></div><div class="ttdeci">static u32_t numOfProcessedLoad</div><div class="ttdoc">Number of processed Gep edge.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00132">Andersen.h:132</a></div></div>
871
885
  <div class="ttc" id="aclassSVF_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#l00181">PointsTo.h:181</a></div></div>
872
- <div class="ttc" id="aclassSVF_1_1Andersen_html_a1ba1e1e36af289982146de06cf06ab0a"><div class="ttname"><a href="classSVF_1_1Andersen.html#a1ba1e1e36af289982146de06cf06ab0a">SVF::Andersen::mergeSccNodes</a></div><div class="ttdeci">void mergeSccNodes(NodeID repNodeId, const NodeBS &amp;subNodes)</div><div class="ttdoc">Merge sub node in a SCC cycle to their rep node.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00514">Andersen.cpp:514</a></div></div>
873
- <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a9fe738f1e11c80006d540f246a80bfdf"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a9fe738f1e11c80006d540f246a80bfdf">SVF::AndersenBase::timeOfProcessLoadStore</a></div><div class="ttdeci">static double timeOfProcessLoadStore</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00138">Andersen.h:138</a></div></div>
886
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_a1ba1e1e36af289982146de06cf06ab0a"><div class="ttname"><a href="classSVF_1_1Andersen.html#a1ba1e1e36af289982146de06cf06ab0a">SVF::Andersen::mergeSccNodes</a></div><div class="ttdeci">void mergeSccNodes(NodeID repNodeId, const NodeBS &amp;subNodes)</div><div class="ttdoc">Merge sub node in a SCC cycle to their rep node.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00534">Andersen.cpp:534</a></div></div>
887
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a9fe738f1e11c80006d540f246a80bfdf"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a9fe738f1e11c80006d540f246a80bfdf">SVF::AndersenBase::timeOfProcessLoadStore</a></div><div class="ttdeci">static double timeOfProcessLoadStore</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00144">Andersen.h:144</a></div></div>
874
888
  <div class="ttc" id="aclassSVF_1_1ConstraintEdge_html"><div class="ttname"><a href="classSVF_1_1ConstraintEdge.html">SVF::ConstraintEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00048">ConsGEdge.h:48</a></div></div>
875
889
  <div class="ttc" id="aclassSVF_1_1PointerAnalysis_html_a431ec4f85eb0f029e5740b92fd9ceb32"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a431ec4f85eb0f029e5740b92fd9ceb32">SVF::PointerAnalysis::initialize</a></div><div class="ttdeci">virtual void initialize()</div><div class="ttdoc">Initialization of a pointer analysis, including building symbol table and SVFIR etc.</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00106">PointerAnalysis.cpp:106</a></div></div>
876
- <div class="ttc" id="aclassSVF_1_1Andersen_html_ac262d42d45dc6130cb031d5b0ed1f024"><div class="ttname"><a href="classSVF_1_1Andersen.html#ac262d42d45dc6130cb031d5b0ed1f024">SVF::Andersen::processStore</a></div><div class="ttdeci">virtual bool processStore(NodeID node, const ConstraintEdge *load)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00349">Andersen.cpp:349</a></div></div>
890
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_ac262d42d45dc6130cb031d5b0ed1f024"><div class="ttname"><a href="classSVF_1_1Andersen.html#ac262d42d45dc6130cb031d5b0ed1f024">SVF::Andersen::processStore</a></div><div class="ttdeci">virtual bool processStore(NodeID node, const ConstraintEdge *load)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00369">Andersen.cpp:369</a></div></div>
877
891
  <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a28a1c3571cdee5e05004b29ace364e67"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a28a1c3571cdee5e05004b29ace364e67">SVF::AndersenBase::finalize</a></div><div class="ttdeci">virtual void finalize() override</div><div class="ttdoc">Finalize analysis.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00089">Andersen.cpp:89</a></div></div>
878
892
  <div class="ttc" id="aclassSVF_1_1RetICFGNode_html"><div class="ttname"><a href="classSVF_1_1RetICFGNode.html">SVF::RetICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00487">ICFGNode.h:487</a></div></div>
879
893
  <div class="ttc" id="aclassSVF_1_1BVDataPTAImpl_html_a638f58c3bf6efdb3787fafaa4e6f19ca"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a638f58c3bf6efdb3787fafaa4e6f19ca">SVF::BVDataPTAImpl::finalize</a></div><div class="ttdeci">void finalize() override</div><div class="ttdoc">Finalization of pointer analysis, and normalize points-to information to Bit Vector representation.</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00093">PointerAnalysisImpl.cpp:93</a></div></div>
880
- <div class="ttc" id="aclassSVF_1_1Andersen_html_ac4afe532655c3f311143ebbe15175ca2"><div class="ttname"><a href="classSVF_1_1Andersen.html#ac4afe532655c3f311143ebbe15175ca2">SVF::Andersen::processCopy</a></div><div class="ttdeci">virtual bool processCopy(NodeID node, const ConstraintEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00369">Andersen.cpp:369</a></div></div>
894
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_ac4afe532655c3f311143ebbe15175ca2"><div class="ttname"><a href="classSVF_1_1Andersen.html#ac4afe532655c3f311143ebbe15175ca2">SVF::Andersen::processCopy</a></div><div class="ttdeci">virtual bool processCopy(NodeID node, const ConstraintEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00389">Andersen.cpp:389</a></div></div>
881
895
  <div class="ttc" id="anamespaceSVF_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="BasicTypes_8h_source.html#l00065">BasicTypes.h:65</a></div></div>
882
896
  <div class="ttc" id="aclassSVF_1_1NodeIDAllocator_1_1Clusterer_html_a36b25188130f4c21d145c950a70d616f"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a36b25188130f4c21d145c950a70d616f">SVF::NodeIDAllocator::Clusterer::getReverseNodeMapping</a></div><div class="ttdeci">static std::vector&lt; NodeID &gt; getReverseNodeMapping(const std::vector&lt; NodeID &gt; &amp;nodeMapping)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00399">NodeIDAllocator.cpp:399</a></div></div>
883
- <div class="ttc" id="aclassSVF_1_1Andersen_html_a20617a69c112ad423b1b5021e48a8548"><div class="ttname"><a href="classSVF_1_1Andersen.html#a20617a69c112ad423b1b5021e48a8548">SVF::Andersen::initialize</a></div><div class="ttdeci">virtual void initialize()</div><div class="ttdoc">Initialize analysis.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00194">Andersen.cpp:194</a></div></div>
897
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_a20617a69c112ad423b1b5021e48a8548"><div class="ttname"><a href="classSVF_1_1Andersen.html#a20617a69c112ad423b1b5021e48a8548">SVF::Andersen::initialize</a></div><div class="ttdeci">virtual void initialize()</div><div class="ttdoc">Initialize analysis.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00214">Andersen.cpp:214</a></div></div>
884
898
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a9815a5b31ac7dc21239d08e5b9f61106"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVF::SVFUtil::getSVFCallSite</a></div><div class="ttdeci">CallSite getSVFCallSite(const SVFInstruction *inst)</div><div class="ttdoc">Return LLVM callsite given an instruction.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00196">SVFUtil.h:196</a></div></div>
885
- <div class="ttc" id="aclassSVF_1_1AndersenBase_html_ad40b196c2c699bd115529b806d20de25"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#ad40b196c2c699bd115529b806d20de25">SVF::AndersenBase::timeOfCollapse</a></div><div class="ttdeci">static double timeOfCollapse</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00134">Andersen.h:134</a></div></div>
899
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_ad40b196c2c699bd115529b806d20de25"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#ad40b196c2c699bd115529b806d20de25">SVF::AndersenBase::timeOfCollapse</a></div><div class="ttdeci">static double timeOfCollapse</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00140">Andersen.h:140</a></div></div>
886
900
  <div class="ttc" id="aclassSVF_1_1AndersenStat_html"><div class="ttname"><a href="classSVF_1_1AndersenStat.html">SVF::AndersenStat</a></div><div class="ttdef"><b>Definition:</b> <a href="WPAStat_8h_source.html#l00048">WPAStat.h:48</a></div></div>
887
901
  <div class="ttc" id="aSVFType_8h_html_a7a295e02c56a93cf9206dd9d3b18dd17"><div class="ttname"><a href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a></div><div class="ttdeci">#define DPAGBuild</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00551">SVFType.h:551</a></div></div>
888
902
  <div class="ttc" id="aclassSVF_1_1ConstraintNode_html_a134e8ed040d7749c2b9a02662115f746"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a134e8ed040d7749c2b9a02662115f746">SVF::ConstraintNode::outgoingLoadsEnd</a></div><div class="ttdeci">const_iterator outgoingLoadsEnd() const</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00194">ConsGNode.h:194</a></div></div>
889
903
  <div class="ttc" id="aclassSVF_1_1SparseBitVector_html_a61bd86909a141f9de873d92c0f904832"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">SVF::SparseBitVector::set</a></div><div class="ttdeci">void set(unsigned Idx)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00747">SparseBitVector.h:747</a></div></div>
890
904
  <div class="ttc" id="aclassSVF_1_1GepObjVar_html_a10790e82dbb00532d4aa171f592c54bc"><div class="ttname"><a href="classSVF_1_1GepObjVar.html#a10790e82dbb00532d4aa171f592c54bc">SVF::GepObjVar::getConstantFieldIdx</a></div><div class="ttdeci">APOffset getConstantFieldIdx() const</div><div class="ttdoc">offset of the mem object</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00491">SVFVariables.h:491</a></div></div>
891
905
  <div class="ttc" id="aSVFType_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00571">SVFType.h:571</a></div></div>
892
- <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a4acad18a6eb585ba9e3d2276dd591067"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a4acad18a6eb585ba9e3d2276dd591067">SVF::AndersenBase::numOfProcessedAddr</a></div><div class="ttdeci">static u32_t numOfProcessedAddr</div><div class="ttdoc">Statistics.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00123">Andersen.h:123</a></div></div>
906
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a4acad18a6eb585ba9e3d2276dd591067"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a4acad18a6eb585ba9e3d2276dd591067">SVF::AndersenBase::numOfProcessedAddr</a></div><div class="ttdeci">static u32_t numOfProcessedAddr</div><div class="ttdoc">Statistics.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00129">Andersen.h:129</a></div></div>
893
907
  <div class="ttc" id="aclassSVF_1_1NodeIDAllocator_1_1Clusterer_html_acbbc5c04c79846fe1cc46a3bd5a65aba"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#acbbc5c04c79846fe1cc46a3bd5a65aba">SVF::NodeIDAllocator::Clusterer::evaluate</a></div><div class="ttdeci">static void evaluate(const std::vector&lt; NodeID &gt; &amp;nodeMap, const Map&lt; PointsTo, unsigned &gt; pointsToSets, Map&lt; std::string, std::string &gt; &amp;stats, bool accountForOcc)</div><div class="ttdoc">Fills in *NumWords statistics in stats..</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00574">NodeIDAllocator.cpp:574</a></div></div>
894
- <div class="ttc" id="aclassSVF_1_1Andersen_html_a43858bd242c7f2c5f33c3c0f6445376a"><div class="ttname"><a href="classSVF_1_1Andersen.html#a43858bd242c7f2c5f33c3c0f6445376a">SVF::Andersen::dumpTopLevelPtsTo</a></div><div class="ttdeci">void dumpTopLevelPtsTo()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00867">Andersen.cpp:867</a></div></div>
895
- <div class="ttc" id="aclassSVF_1_1Andersen_html_af4a0d960ef198047517bb32ee1e24a61"><div class="ttname"><a href="classSVF_1_1Andersen.html#af4a0d960ef198047517bb32ee1e24a61">SVF::Andersen::collapseField</a></div><div class="ttdeci">bool collapseField(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00549">Andersen.cpp:549</a></div></div>
896
- <div class="ttc" id="aclassSVF_1_1Andersen_html_ac22a6946de30bc5887b9e4ec9259764f"><div class="ttname"><a href="classSVF_1_1Andersen.html#ac22a6946de30bc5887b9e4ec9259764f">SVF::Andersen::collapseFields</a></div><div class="ttdeci">void collapseFields()</div><div class="ttdoc">collapse positive weight cycles of a graph</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00471">Andersen.cpp:471</a></div></div>
908
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_a43858bd242c7f2c5f33c3c0f6445376a"><div class="ttname"><a href="classSVF_1_1Andersen.html#a43858bd242c7f2c5f33c3c0f6445376a">SVF::Andersen::dumpTopLevelPtsTo</a></div><div class="ttdeci">void dumpTopLevelPtsTo()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00887">Andersen.cpp:887</a></div></div>
909
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_af4a0d960ef198047517bb32ee1e24a61"><div class="ttname"><a href="classSVF_1_1Andersen.html#af4a0d960ef198047517bb32ee1e24a61">SVF::Andersen::collapseField</a></div><div class="ttdeci">bool collapseField(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00569">Andersen.cpp:569</a></div></div>
910
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_ac22a6946de30bc5887b9e4ec9259764f"><div class="ttname"><a href="classSVF_1_1Andersen.html#ac22a6946de30bc5887b9e4ec9259764f">SVF::Andersen::collapseFields</a></div><div class="ttdeci">void collapseFields()</div><div class="ttdoc">collapse positive weight cycles of a graph</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00491">Andersen.cpp:491</a></div></div>
897
911
  <div class="ttc" id="aclassSVF_1_1SparseBitVector_html_a1b5abe09fd0fcd337385653cb47343c1"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">SVF::SparseBitVector::end</a></div><div class="ttdeci">iterator end() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l01120">SparseBitVector.h:1120</a></div></div>
898
912
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a19b96a872d9096037f20e25122e469ea"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a19b96a872d9096037f20e25122e469ea">SVF::SVFUtil::isHeapAllocExtFunViaRet</a></div><div class="ttdeci">bool isHeapAllocExtFunViaRet(const SVFFunction *fun)</div><div class="ttdoc">Return true if the call is a heap allocator/reallocator.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00323">SVFUtil.h:323</a></div></div>
899
913
  <div class="ttc" id="aclassSVF_1_1ConstraintNode_html_a19c1ed324f65f4cc58dd2fd21ed4a971"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a19c1ed324f65f4cc58dd2fd21ed4a971">SVF::ConstraintNode::incomingAddrsBegin</a></div><div class="ttdeci">const_iterator incomingAddrsBegin() const</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00181">ConsGNode.h:181</a></div></div>
@@ -905,28 +919,29 @@ $(function() {
905
919
  <div class="ttc" id="aclassSVF_1_1PointerAnalysis_html_a118dabc50024b5cd91095814ade47166"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a118dabc50024b5cd91095814ade47166">SVF::PointerAnalysis::finalize</a></div><div class="ttdeci">virtual void finalize()</div><div class="ttdoc">Finalization of a pointer analysis, including checking alias correctness.</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00180">PointerAnalysis.cpp:180</a></div></div>
906
920
  <div class="ttc" id="aclassSVF_1_1PointsTo_html_a849f670b38cb6f65fc23707a212591c7"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">SVF::PointsTo::MappingPtr</a></div><div class="ttdeci">std::shared_ptr&lt; std::vector&lt; NodeID &gt; &gt; MappingPtr</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00042">PointsTo.h:42</a></div></div>
907
921
  <div class="ttc" id="aclassSVF_1_1CallSite_html_a93e70225ce9c55ca65ea9d5cf737206f"><div class="ttname"><a href="classSVF_1_1CallSite.html#a93e70225ce9c55ca65ea9d5cf737206f">SVF::CallSite::getType</a></div><div class="ttdeci">const SVFType * getType() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l01092">SVFValue.h:1092</a></div></div>
908
- <div class="ttc" id="aclassSVF_1_1Andersen_html_a36729160041bc3a3e2b0a92b29062848"><div class="ttname"><a href="classSVF_1_1Andersen.html#a36729160041bc3a3e2b0a92b29062848">SVF::Andersen::mergeNodeToRep</a></div><div class="ttdeci">virtual void mergeNodeToRep(NodeID nodeId, NodeID newRepId)</div><div class="ttdoc">Merge sub node to its rep.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00817">Andersen.cpp:817</a></div></div>
909
- <div class="ttc" id="aclassSVF_1_1AndersenBase_html_adaf738bee77a4b1fbb8d42911fabdb49"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#adaf738bee77a4b1fbb8d42911fabdb49">SVF::AndersenBase::AveragePointsToSetSize</a></div><div class="ttdeci">static u32_t AveragePointsToSetSize</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00135">Andersen.h:135</a></div></div>
922
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_a36729160041bc3a3e2b0a92b29062848"><div class="ttname"><a href="classSVF_1_1Andersen.html#a36729160041bc3a3e2b0a92b29062848">SVF::Andersen::mergeNodeToRep</a></div><div class="ttdeci">virtual void mergeNodeToRep(NodeID nodeId, NodeID newRepId)</div><div class="ttdoc">Merge sub node to its rep.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00837">Andersen.cpp:837</a></div></div>
923
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_adaf738bee77a4b1fbb8d42911fabdb49"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#adaf738bee77a4b1fbb8d42911fabdb49">SVF::AndersenBase::AveragePointsToSetSize</a></div><div class="ttdeci">static u32_t AveragePointsToSetSize</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00141">Andersen.h:141</a></div></div>
910
924
  <div class="ttc" id="aclassSVF_1_1SVFVar_html_a3b61042079a6c9dc395f38925c6a1271"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">SVF::SVFVar::isPointer</a></div><div class="ttdeci">virtual bool isPointer() const</div><div class="ttdoc">Whether it is a pointer.</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00117">SVFVariables.h:117</a></div></div>
911
925
  <div class="ttc" id="aclassSVF_1_1NodeIDAllocator_1_1Clusterer_html_ac10cbda6a84ce890c9946a5ff35800b7"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#ac10cbda6a84ce890c9946a5ff35800b7">SVF::NodeIDAllocator::Clusterer::printStats</a></div><div class="ttdeci">static void printStats(std::string title, Map&lt; std::string, std::string &gt; &amp;stats)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00692">NodeIDAllocator.cpp:692</a></div></div>
912
926
  <div class="ttc" id="aclassSVF_1_1ConstraintNode_html_ae8ac9ad8e766b961c7ce06d7219f37af"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#ae8ac9ad8e766b961c7ce06d7219f37af">SVF::ConstraintNode::incomingAddrsEnd</a></div><div class="ttdeci">const_iterator incomingAddrsEnd() const</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00185">ConsGNode.h:185</a></div></div>
913
927
  <div class="ttc" id="acJSON_8cpp_html_ab6e2ea6dc7bd57d1483413449998230a"><div class="ttname"><a href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a></div><div class="ttdeci">cJSON * n</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02558">cJSON.cpp:2558</a></div></div>
914
928
  <div class="ttc" id="aclassSVF_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#l00180">GenericGraph.h:180</a></div></div>
915
- <div class="ttc" id="aclassSVF_1_1Andersen_html_ae79bff0e9c49f15e7db00ed605824d98"><div class="ttname"><a href="classSVF_1_1Andersen.html#ae79bff0e9c49f15e7db00ed605824d98">SVF::Andersen::collapsePWCNode</a></div><div class="ttdeci">virtual void collapsePWCNode(NodeID nodeId)</div><div class="ttdoc">Collapse a field object into its base for field insensitive anlaysis.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00462">Andersen.cpp:462</a></div></div>
916
- <div class="ttc" id="aclassSVF_1_1Andersen_html_a31ea24432ff42ab86a4728f2bde571bc"><div class="ttname"><a href="classSVF_1_1Andersen.html#a31ea24432ff42ab86a4728f2bde571bc">SVF::Andersen::SCCDetect</a></div><div class="ttdeci">virtual NodeStack &amp; SCCDetect()</div><div class="ttdoc">SCC detection.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00610">Andersen.cpp:610</a></div></div>
929
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_ae79bff0e9c49f15e7db00ed605824d98"><div class="ttname"><a href="classSVF_1_1Andersen.html#ae79bff0e9c49f15e7db00ed605824d98">SVF::Andersen::collapsePWCNode</a></div><div class="ttdeci">virtual void collapsePWCNode(NodeID nodeId)</div><div class="ttdoc">Collapse a field object into its base for field insensitive anlaysis.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00482">Andersen.cpp:482</a></div></div>
930
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_a31ea24432ff42ab86a4728f2bde571bc"><div class="ttname"><a href="classSVF_1_1Andersen.html#a31ea24432ff42ab86a4728f2bde571bc">SVF::Andersen::SCCDetect</a></div><div class="ttdeci">virtual NodeStack &amp; SCCDetect()</div><div class="ttdoc">SCC detection.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00630">Andersen.cpp:630</a></div></div>
917
931
  <div class="ttc" id="aclassSVF_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#l00085">GenericGraph.h:85</a></div></div>
918
932
  <div class="ttc" id="anamespaceSVF_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="SVFType_8h_source.html#l00119">SVFType.h:119</a></div></div>
919
933
  <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a8da8746b38c55561d3f6904e8fd0a9aa"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a8da8746b38c55561d3f6904e8fd0a9aa">SVF::AndersenBase::~AndersenBase</a></div><div class="ttdeci">~AndersenBase() override</div><div class="ttdoc">Destructor.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00064">Andersen.cpp:64</a></div></div>
920
- <div class="ttc" id="aclassSVF_1_1Andersen_html_ac86ffd334568e4df5c08b3c827018bef"><div class="ttname"><a href="classSVF_1_1Andersen.html#ac86ffd334568e4df5c08b3c827018bef">SVF::Andersen::mergeSccCycle</a></div><div class="ttdeci">void mergeSccCycle()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00486">Andersen.cpp:486</a></div></div>
934
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_ac86ffd334568e4df5c08b3c827018bef"><div class="ttname"><a href="classSVF_1_1Andersen.html#ac86ffd334568e4df5c08b3c827018bef">SVF::Andersen::mergeSccCycle</a></div><div class="ttdeci">void mergeSccCycle()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00506">Andersen.cpp:506</a></div></div>
921
935
  <div class="ttc" id="aSVFUtil_8h_html"><div class="ttname"><a href="SVFUtil_8h.html">SVFUtil.h</a></div></div>
922
936
  <div class="ttc" id="aOptions_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
923
937
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a145abbd2958629718fbca41d25c3124d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVF::SVFUtil::getCallee</a></div><div class="ttdeci">const SVFFunction * getCallee(const CallSite cs)</div><div class="ttdoc">Return callee of a callsite. Return null if this is an indirect call.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00241">SVFUtil.h:241</a></div></div>
924
- <div class="ttc" id="aclassSVF_1_1Andersen_html_a1caa6fa0740f4fa789d960a5a6fcb9c1"><div class="ttname"><a href="classSVF_1_1Andersen.html#a1caa6fa0740f4fa789d960a5a6fcb9c1">SVF::Andersen::processNode</a></div><div class="ttdeci">virtual void processNode(NodeID nodeId)</div><div class="ttdoc">Override WPASolver function in order to use the default solver.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00231">Andersen.cpp:231</a></div></div>
938
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_a1caa6fa0740f4fa789d960a5a6fcb9c1"><div class="ttname"><a href="classSVF_1_1Andersen.html#a1caa6fa0740f4fa789d960a5a6fcb9c1">SVF::Andersen::processNode</a></div><div class="ttdeci">virtual void processNode(NodeID nodeId)</div><div class="ttdoc">Override WPASolver function in order to use the default solver.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00251">Andersen.cpp:251</a></div></div>
925
939
  <div class="ttc" id="aclassSVF_1_1GenericEdge_html_ae6792506a0150a9400d635eceab7f9e7"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">SVF::GenericEdge::getSrcID</a></div><div class="ttdeci">NodeID getSrcID() const</div><div class="ttdoc">get methods of the components</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00081">GenericGraph.h:81</a></div></div>
926
940
  <div class="ttc" id="aclassSVF_1_1NodeIDAllocator_1_1Clusterer_html_a33d502a0bd49307cd824e34b73157b9b"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a33d502a0bd49307cd824e34b73157b9b">SVF::NodeIDAllocator::Clusterer::cluster</a></div><div class="ttdeci">static std::vector&lt; NodeID &gt; cluster(BVDataPTAImpl *pta, const std::vector&lt; std::pair&lt; NodeID, unsigned &gt;&gt; keys, std::vector&lt; std::pair&lt; hclust_fast_methods, std::vector&lt; NodeID &gt;&gt;&gt; &amp;candidates, std::string evalSubtitle=&quot;&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00189">NodeIDAllocator.cpp:189</a></div></div>
927
941
  <div class="ttc" id="aclassSVF_1_1PointsTo_html_ae349a9ce6a8739925baffd83d1878b0e"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ae349a9ce6a8739925baffd83d1878b0e">SVF::PointsTo::getCurrentBestNodeMapping</a></div><div class="ttdeci">static MappingPtr getCurrentBestNodeMapping()</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00361">PointsTo.cpp:361</a></div></div>
928
- <div class="ttc" id="aclassSVF_1_1Andersen_html_a7b1b9e9b25b5643440aca77e23a8de07"><div class="ttname"><a href="classSVF_1_1Andersen.html#a7b1b9e9b25b5643440aca77e23a8de07">SVF::Andersen::heapAllocatorViaIndCall</a></div><div class="ttdeci">void heapAllocatorViaIndCall(CallSite cs, NodePairSet &amp;cpySrcNodes)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00661">Andersen.cpp:661</a></div></div>
942
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_a7b1b9e9b25b5643440aca77e23a8de07"><div class="ttname"><a href="classSVF_1_1Andersen.html#a7b1b9e9b25b5643440aca77e23a8de07">SVF::Andersen::heapAllocatorViaIndCall</a></div><div class="ttdeci">void heapAllocatorViaIndCall(CallSite cs, NodePairSet &amp;cpySrcNodes)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00681">Andersen.cpp:681</a></div></div>
929
943
  <div class="ttc" id="aclassSVF_1_1ConstraintNode_html_af69c7e623ab5a36644b6aeabaa1a1e28"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#af69c7e623ab5a36644b6aeabaa1a1e28">SVF::ConstraintNode::outgoingLoadsBegin</a></div><div class="ttdeci">const_iterator outgoingLoadsBegin() const</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00190">ConsGNode.h:190</a></div></div>
944
+ <div class="ttc" id="acJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
930
945
  <div class="ttc" id="aclassSVF_1_1Steensgaard_html"><div class="ttname"><a href="classSVF_1_1Steensgaard.html">SVF::Steensgaard</a></div><div class="ttdef"><b>Definition:</b> <a href="Steensgaard_8h_source.html#l00020">Steensgaard.h:20</a></div></div>
931
946
  <div class="ttc" id="aclassSVF_1_1ConstraintNode_html_a19d3d2c996ba821227a836717e5443c8"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a19d3d2c996ba821227a836717e5443c8">SVF::ConstraintNode::getGepOutEdges</a></div><div class="ttdeci">const ConstraintEdge::ConstraintEdgeSetTy &amp; getGepOutEdges() const</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00123">ConsGNode.h:123</a></div></div>
932
947
  <div class="ttc" id="aclassSVF_1_1CallICFGNode_html"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00385">ICFGNode.h:385</a></div></div>
@@ -934,8 +949,9 @@ $(function() {
934
949
  <div class="ttc" id="aclassSVF_1_1SVFIR_html_ae683914bce36e2d387bc0bc97dfcb14d"><div class="ttname"><a href="classSVF_1_1SVFIR.html#ae683914bce36e2d387bc0bc97dfcb14d">SVF::SVFIR::NodeOffsetMap</a></div><div class="ttdeci">Map&lt; NodeOffset, NodeID &gt; NodeOffsetMap</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00069">SVFIR.h:69</a></div></div>
935
950
  <div class="ttc" id="aclassSVF_1_1PTData_html"><div class="ttname"><a href="classSVF_1_1PTData.html">SVF::PTData</a></div><div class="ttdef"><b>Definition:</b> <a href="AbstractPointsToDS_8h_source.html#l00074">AbstractPointsToDS.h:74</a></div></div>
936
951
  <div class="ttc" id="aclassSVF_1_1PointerAnalysis_html_a35bd5f0fb2c146199e9f1aa6a19b4062"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a35bd5f0fb2c146199e9f1aa6a19b4062">SVF::PointerAnalysis::CallEdgeMap</a></div><div class="ttdeci">OrderedMap&lt; const CallICFGNode *, FunctionSet &gt; CallEdgeMap</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00106">PointerAnalysis.h:106</a></div></div>
937
- <div class="ttc" id="aclassSVF_1_1Andersen_html_a6c60b761ddf3d6bf08c8a9c3f6fd9f0b"><div class="ttname"><a href="classSVF_1_1Andersen.html#a6c60b761ddf3d6bf08c8a9c3f6fd9f0b">SVF::Andersen::updateCallGraph</a></div><div class="ttdeci">virtual bool updateCallGraph(const CallSiteToFunPtrMap &amp;callsites)</div><div class="ttdoc">Update call graph for the input indirect callsites.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00634">Andersen.cpp:634</a></div></div>
952
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_a6c60b761ddf3d6bf08c8a9c3f6fd9f0b"><div class="ttname"><a href="classSVF_1_1Andersen.html#a6c60b761ddf3d6bf08c8a9c3f6fd9f0b">SVF::Andersen::updateCallGraph</a></div><div class="ttdeci">virtual bool updateCallGraph(const CallSiteToFunPtrMap &amp;callsites)</div><div class="ttdoc">Update call graph for the input indirect callsites.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00654">Andersen.cpp:654</a></div></div>
938
953
  <div class="ttc" id="aclassSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00270">SVFValue.h:270</a></div></div>
954
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_add7a5c53783fb2277dfc0c304cdfecd7"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#add7a5c53783fb2277dfc0c304cdfecd7">SVF::AndersenBase::solveAndwritePtsToFile</a></div><div class="ttdeci">virtual void solveAndwritePtsToFile(const std::string &amp;filename)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00168">Andersen.cpp:168</a></div></div>
939
955
  <div class="ttc" id="aclassSVF_1_1PointsTo_html_ab196d86cfb48d1c5d27a0c03c7497afa"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">SVF::PointsTo::set</a></div><div class="ttdeci">void set(u32_t n)</div><div class="ttdoc">Inserts n in the set.</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00157">PointsTo.cpp:157</a></div></div>
940
956
  <div class="ttc" id="aPointsTo_8h_html"><div class="ttname"><a href="PointsTo_8h.html">PointsTo.h</a></div></div>
941
957
  <div class="ttc" id="aclassSVF_1_1SVFVar_html"><div class="ttname"><a href="classSVF_1_1SVFVar.html">SVF::SVFVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00045">SVFVariables.h:45</a></div></div>
@@ -943,51 +959,53 @@ $(function() {
943
959
  <div class="ttc" id="aclassSVF_1_1Options_html_a9e5f361015b558d3d4e7e033868f9c83"><div class="ttname"><a href="classSVF_1_1Options.html#a9e5f361015b558d3d4e7e033868f9c83">SVF::Options::PrintCGGraph</a></div><div class="ttdeci">static const Option&lt; bool &gt; PrintCGGraph</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00241">Options.h:241</a></div></div>
944
960
  <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a891816407a4c6346f56bc01a67b78aac"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a891816407a4c6346f56bc01a67b78aac">SVF::AndersenBase::initialize</a></div><div class="ttdeci">virtual void initialize() override</div><div class="ttdoc">Initialize analysis.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00073">Andersen.cpp:73</a></div></div>
945
961
  <div class="ttc" id="aclassSVF_1_1PTData_html_adbe2b955f119871b54dc502de84b94c4"><div class="ttname"><a href="classSVF_1_1PTData.html#adbe2b955f119871b54dc502de84b94c4">SVF::PTData::getAllPts</a></div><div class="ttdeci">virtual Map&lt; DataSet, unsigned &gt; getAllPts(bool liveOnly) const =0</div></div>
946
- <div class="ttc" id="aclassSVF_1_1Andersen_html_a5a90e681e46c52ffd3debf02910c7ecf"><div class="ttname"><a href="classSVF_1_1Andersen.html#a5a90e681e46c52ffd3debf02910c7ecf">SVF::Andersen::connectCaller2CalleeParams</a></div><div class="ttdeci">void connectCaller2CalleeParams(CallSite cs, const SVFFunction *F, NodePairSet &amp;cpySrcNodes)</div><div class="ttdoc">Connect formal and actual parameters for indirect callsites.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00691">Andersen.cpp:691</a></div></div>
947
- <div class="ttc" id="aclassSVF_1_1AndersenBase_html_af37392229dab0a1f2f807a12186c3b39"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#af37392229dab0a1f2f807a12186c3b39">SVF::AndersenBase::normalizePointsTo</a></div><div class="ttdeci">virtual void normalizePointsTo() override</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00170">Andersen.cpp:170</a></div></div>
962
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_a5a90e681e46c52ffd3debf02910c7ecf"><div class="ttname"><a href="classSVF_1_1Andersen.html#a5a90e681e46c52ffd3debf02910c7ecf">SVF::Andersen::connectCaller2CalleeParams</a></div><div class="ttdeci">void connectCaller2CalleeParams(CallSite cs, const SVFFunction *F, NodePairSet &amp;cpySrcNodes)</div><div class="ttdoc">Connect formal and actual parameters for indirect callsites.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00711">Andersen.cpp:711</a></div></div>
963
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_af37392229dab0a1f2f807a12186c3b39"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#af37392229dab0a1f2f807a12186c3b39">SVF::AndersenBase::normalizePointsTo</a></div><div class="ttdeci">virtual void normalizePointsTo() override</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00190">Andersen.cpp:190</a></div></div>
948
964
  <div class="ttc" id="aSteensgaard_8h_html"><div class="ttname"><a href="Steensgaard_8h.html">Steensgaard.h</a></div></div>
949
965
  <div class="ttc" id="aclassSVF_1_1SVFIR_html_ab6abb822445c9b3f5cb2b7206042e940"><div class="ttname"><a href="classSVF_1_1SVFIR.html#ab6abb822445c9b3f5cb2b7206042e940">SVF::SVFIR::MemObjToFieldsMap</a></div><div class="ttdeci">Map&lt; NodeID, NodeBS &gt; MemObjToFieldsMap</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00056">SVFIR.h:56</a></div></div>
950
966
  <div class="ttc" id="anamespaceSVF_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="SVFType_8h_source.html#l00115">SVFType.h:115</a></div></div>
951
- <div class="ttc" id="aclassSVF_1_1AndersenBase_html_abd73e930450b7c605f478672bdf9bdae"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#abd73e930450b7c605f478672bdf9bdae">SVF::AndersenBase::MaxPointsToSetSize</a></div><div class="ttdeci">static u32_t MaxPointsToSetSize</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00136">Andersen.h:136</a></div></div>
952
- <div class="ttc" id="aclassSVF_1_1Andersen_html_aa697d4a6fe09dd6e50abb09228b3567f"><div class="ttname"><a href="classSVF_1_1Andersen.html#aa697d4a6fe09dd6e50abb09228b3567f">SVF::Andersen::processGep</a></div><div class="ttdeci">virtual bool processGep(NodeID node, const GepCGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00389">Andersen.cpp:389</a></div></div>
953
- <div class="ttc" id="aclassSVF_1_1Andersen_html_adccf6acf63abc9cafc92b2148396fd10"><div class="ttname"><a href="classSVF_1_1Andersen.html#adccf6acf63abc9cafc92b2148396fd10">SVF::Andersen::processAllAddr</a></div><div class="ttdeci">void processAllAddr()</div><div class="ttdoc">handling various constraints</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00300">Andersen.cpp:300</a></div></div>
967
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_abd73e930450b7c605f478672bdf9bdae"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#abd73e930450b7c605f478672bdf9bdae">SVF::AndersenBase::MaxPointsToSetSize</a></div><div class="ttdeci">static u32_t MaxPointsToSetSize</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00142">Andersen.h:142</a></div></div>
968
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a69685be598d8aa2576af09912b94a8ef"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a69685be598d8aa2576af09912b94a8ef">SVF::AndersenBase::readPtsFromFile</a></div><div class="ttdeci">virtual void readPtsFromFile(const std::string &amp;filename)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00157">Andersen.cpp:157</a></div></div>
969
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_aa697d4a6fe09dd6e50abb09228b3567f"><div class="ttname"><a href="classSVF_1_1Andersen.html#aa697d4a6fe09dd6e50abb09228b3567f">SVF::Andersen::processGep</a></div><div class="ttdeci">virtual bool processGep(NodeID node, const GepCGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00409">Andersen.cpp:409</a></div></div>
970
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_adccf6acf63abc9cafc92b2148396fd10"><div class="ttname"><a href="classSVF_1_1Andersen.html#adccf6acf63abc9cafc92b2148396fd10">SVF::Andersen::processAllAddr</a></div><div class="ttdeci">void processAllAddr()</div><div class="ttdoc">handling various constraints</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00320">Andersen.cpp:320</a></div></div>
954
971
  <div class="ttc" id="aclassSVF_1_1ConstraintNode_html"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html">SVF::ConstraintNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00040">ConsGNode.h:40</a></div></div>
955
972
  <div class="ttc" id="aclassSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SVF::SparseBitVector::SparseBitVectorIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00536">SparseBitVector.h:536</a></div></div>
956
973
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs()</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00050">SVFUtil.h:50</a></div></div>
957
- <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a2afb49f513c9534fd051117b59dc056b"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a2afb49f513c9534fd051117b59dc056b">SVF::AndersenBase::timeOfUpdateCallGraph</a></div><div class="ttdeci">static double timeOfUpdateCallGraph</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00139">Andersen.h:139</a></div></div>
958
- <div class="ttc" id="aclassSVF_1_1AndersenBase_html_aae14de6fbca9280d8d0290326aa493f0"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#aae14de6fbca9280d8d0290326aa493f0">SVF::AndersenBase::timeOfProcessCopyGep</a></div><div class="ttdeci">static double timeOfProcessCopyGep</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00137">Andersen.h:137</a></div></div>
974
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a2afb49f513c9534fd051117b59dc056b"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a2afb49f513c9534fd051117b59dc056b">SVF::AndersenBase::timeOfUpdateCallGraph</a></div><div class="ttdeci">static double timeOfUpdateCallGraph</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00145">Andersen.h:145</a></div></div>
975
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_aae14de6fbca9280d8d0290326aa493f0"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#aae14de6fbca9280d8d0290326aa493f0">SVF::AndersenBase::timeOfProcessCopyGep</a></div><div class="ttdeci">static double timeOfProcessCopyGep</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00143">Andersen.h:143</a></div></div>
959
976
  <div class="ttc" id="aclassSVF_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>
960
977
  <div class="ttc" id="aclassSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l01069">SVFValue.h:1069</a></div></div>
961
978
  <div class="ttc" id="aclassSVF_1_1SVFValue_html_a4a0cfe3a8f37d33ffcdca3d66026dcc3"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">SVF::SVFValue::toString</a></div><div class="ttdeci">std::string toString() const</div><div class="ttdoc">Needs to be implemented by a SVF front end.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01038">LLVMUtil.cpp:1038</a></div></div>
979
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_ac02d1fedb0beb39e5a4c22ee4bb3501a"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#ac02d1fedb0beb39e5a4c22ee4bb3501a">SVF::AndersenBase::solveConstraints</a></div><div class="ttdeci">virtual void solveConstraints()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00100">Andersen.cpp:100</a></div></div>
962
980
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a4550f2fb815882edfb666ac818792064"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">SVF::SVFUtil::pasMsg</a></div><div class="ttdeci">std::string pasMsg(const std::string &amp;msg)</div><div class="ttdoc">Print each pass/phase message by converting a string into blue string output.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00099">SVFUtil.cpp:99</a></div></div>
963
981
  <div class="ttc" id="aclassSVF_1_1PointsTo_html_a13746982a11d0cab57e5919d53bfbec8"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a13746982a11d0cab57e5919d53bfbec8">SVF::PointsTo::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdoc">Returns true if set is empty.</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00098">PointsTo.cpp:98</a></div></div>
964
- <div class="ttc" id="aclassSVF_1_1Andersen_html_abc20264231658b99998bc4af1f03a4de"><div class="ttname"><a href="classSVF_1_1Andersen.html#abc20264231658b99998bc4af1f03a4de">SVF::Andersen::processLoad</a></div><div class="ttdeci">virtual bool processLoad(NodeID node, const ConstraintEdge *load)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00329">Andersen.cpp:329</a></div></div>
982
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_abc20264231658b99998bc4af1f03a4de"><div class="ttname"><a href="classSVF_1_1Andersen.html#abc20264231658b99998bc4af1f03a4de">SVF::Andersen::processLoad</a></div><div class="ttdeci">virtual bool processLoad(NodeID node, const ConstraintEdge *load)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00349">Andersen.cpp:349</a></div></div>
965
983
  <div class="ttc" id="aclassSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph&lt; SVFVar, SVFStmt &gt;::iterator</a></div><div class="ttdeci">IDToNodeMapTy::iterator iterator</div><div class="ttdoc">Node Iterators.</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00359">GenericGraph.h:359</a></div></div>
966
984
  <div class="ttc" id="aclassSVF_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>
967
985
  <div class="ttc" id="aclassSVF_1_1ConstraintNode_html_ab77173aa8af6155b569f20ff0cdcec72"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#ab77173aa8af6155b569f20ff0cdcec72">SVF::ConstraintNode::getCopyOutEdges</a></div><div class="ttdeci">const ConstraintEdge::ConstraintEdgeSetTy &amp; getCopyOutEdges() const</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00115">ConsGNode.h:115</a></div></div>
968
986
  <div class="ttc" id="aclassSVF_1_1Options_html_ad80f77349205dac9e74aa41ea1ecbf95"><div class="ttname"><a href="classSVF_1_1Options.html#ad80f77349205dac9e74aa41ea1ecbf95">SVF::Options::ConsCGDotGraph</a></div><div class="ttdeci">static const Option&lt; bool &gt; ConsCGDotGraph</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00239">Options.h:239</a></div></div>
969
- <div class="ttc" id="aclassSVF_1_1Andersen_html_ae6b1e54a389abc68994219e39539127e"><div class="ttname"><a href="classSVF_1_1Andersen.html#ae6b1e54a389abc68994219e39539127e">SVF::Andersen::mergeSrcToTgt</a></div><div class="ttdeci">virtual bool mergeSrcToTgt(NodeID srcId, NodeID tgtId)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00786">Andersen.cpp:786</a></div></div>
987
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_ae6b1e54a389abc68994219e39539127e"><div class="ttname"><a href="classSVF_1_1Andersen.html#ae6b1e54a389abc68994219e39539127e">SVF::Andersen::mergeSrcToTgt</a></div><div class="ttdeci">virtual bool mergeSrcToTgt(NodeID srcId, NodeID tgtId)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00806">Andersen.cpp:806</a></div></div>
970
988
  <div class="ttc" id="aclassSVF_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>
971
- <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a04acd871bd1b98cd9e83e395334ac130"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a04acd871bd1b98cd9e83e395334ac130">SVF::AndersenBase::numOfProcessedCopy</a></div><div class="ttdeci">static u32_t numOfProcessedCopy</div><div class="ttdoc">Number of processed Addr edge.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00124">Andersen.h:124</a></div></div>
972
- <div class="ttc" id="aclassSVF_1_1AndersenBase_html_aebfe0c7238eb24f74f105b950b86cb5e"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#aebfe0c7238eb24f74f105b950b86cb5e">SVF::AndersenBase::cleanConsCG</a></div><div class="ttdeci">void cleanConsCG(NodeID id)</div><div class="ttdoc">remove redundant gepnodes in constraint graph</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00160">Andersen.cpp:160</a></div></div>
989
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a04acd871bd1b98cd9e83e395334ac130"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a04acd871bd1b98cd9e83e395334ac130">SVF::AndersenBase::numOfProcessedCopy</a></div><div class="ttdeci">static u32_t numOfProcessedCopy</div><div class="ttdoc">Number of processed Addr edge.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00130">Andersen.h:130</a></div></div>
990
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_aebfe0c7238eb24f74f105b950b86cb5e"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#aebfe0c7238eb24f74f105b950b86cb5e">SVF::AndersenBase::cleanConsCG</a></div><div class="ttdeci">void cleanConsCG(NodeID id)</div><div class="ttdoc">remove redundant gepnodes in constraint graph</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00180">Andersen.cpp:180</a></div></div>
973
991
  <div class="ttc" id="aclassSVF_1_1GenericGraph_html_a5dfa3f178d4abf37177d0d74ff4c6a97"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">SVF::GenericGraph&lt; ConstraintNode, ConstraintEdge &gt;::const_iterator</a></div><div class="ttdeci">IDToNodeMapTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00360">GenericGraph.h:360</a></div></div>
974
992
  <div class="ttc" id="aclassSVF_1_1GepObjVar_html"><div class="ttname"><a href="classSVF_1_1GepObjVar.html">SVF::GepObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00448">SVFVariables.h:448</a></div></div>
975
993
  <div class="ttc" id="aclassSVF_1_1PointsTo_html_ad5b582d2672617806c61e6170d0b5a7e"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ad5b582d2672617806c61e6170d0b5a7e">SVF::PointsTo::begin</a></div><div class="ttdeci">const_iterator begin() const</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00128">PointsTo.h:128</a></div></div>
976
- <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a02c5a50b214d36921e1404784e76704d"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a02c5a50b214d36921e1404784e76704d">SVF::AndersenBase::timeOfSCCMerges</a></div><div class="ttdeci">static double timeOfSCCMerges</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00133">Andersen.h:133</a></div></div>
994
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a02c5a50b214d36921e1404784e76704d"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a02c5a50b214d36921e1404784e76704d">SVF::AndersenBase::timeOfSCCMerges</a></div><div class="ttdeci">static double timeOfSCCMerges</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00139">Andersen.h:139</a></div></div>
977
995
  <div class="ttc" id="aclassSVF_1_1WPASolver_html_aaa932894d00b69cfa741f9987a9cc6b8"><div class="ttname"><a href="classSVF_1_1WPASolver.html#aaa932894d00b69cfa741f9987a9cc6b8">SVF::WPASolver::SCCDetect</a></div><div class="ttdeci">virtual NodeStack &amp; SCCDetect()</div><div class="ttdoc">SCC detection.</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00086">WPASolver.h:86</a></div></div>
978
996
  <div class="ttc" id="aclassSVF_1_1PointsTo_html_a6e2ff63437d07a30cc6db35de032728a"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a6e2ff63437d07a30cc6db35de032728a">SVF::PointsTo::end</a></div><div class="ttdeci">const_iterator end() const</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00132">PointsTo.h:132</a></div></div>
979
997
  <div class="ttc" id="aclassSVF_1_1PointsTo_html_a84eca4c7fc833f8ca4d119cd4da08ca8"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a84eca4c7fc833f8ca4d119cd4da08ca8">SVF::PointsTo::setCurrentBestNodeMapping</a></div><div class="ttdeci">static void setCurrentBestNodeMapping(MappingPtr newCurrentBestNodeMapping, MappingPtr newCurrentBestReverseNodeMapping)</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00371">PointsTo.cpp:371</a></div></div>
980
998
  <div class="ttc" id="aclassSVF_1_1CallSite_html_ac2a0091dab3543a398da890b947e42ef"><div class="ttname"><a href="classSVF_1_1CallSite.html#ac2a0091dab3543a398da890b947e42ef">SVF::CallSite::getInstruction</a></div><div class="ttdeci">const SVFInstruction * getInstruction() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l01084">SVFValue.h:1084</a></div></div>
981
- <div class="ttc" id="aclassSVF_1_1Andersen_html_aca095e135edb5d27efe76bb7ee71184c"><div class="ttname"><a href="classSVF_1_1Andersen.html#aca095e135edb5d27efe76bb7ee71184c">SVF::Andersen::processAddr</a></div><div class="ttdeci">virtual void processAddr(const AddrCGEdge *addr)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00314">Andersen.cpp:314</a></div></div>
982
- <div class="ttc" id="aclassSVF_1_1Andersen_html_a0f32ba8cb1109c257552fa775a007ffd"><div class="ttname"><a href="classSVF_1_1Andersen.html#a0f32ba8cb1109c257552fa775a007ffd">SVF::Andersen::handleLoadStore</a></div><div class="ttdeci">virtual void handleLoadStore(ConstraintNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00272">Andersen.cpp:272</a></div></div>
983
- <div class="ttc" id="aclassSVF_1_1Andersen_html_acd54e3edace1f41511c8f0a6a68dac18"><div class="ttname"><a href="classSVF_1_1Andersen.html#acd54e3edace1f41511c8f0a6a68dac18">SVF::Andersen::updateNodeRepAndSubs</a></div><div class="ttdeci">void updateNodeRepAndSubs(NodeID nodeId, NodeID newRepId)</div><div class="ttdoc">Updates subnodes of its rep, and rep node of its subs.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00827">Andersen.cpp:827</a></div></div>
999
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_aca095e135edb5d27efe76bb7ee71184c"><div class="ttname"><a href="classSVF_1_1Andersen.html#aca095e135edb5d27efe76bb7ee71184c">SVF::Andersen::processAddr</a></div><div class="ttdeci">virtual void processAddr(const AddrCGEdge *addr)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00334">Andersen.cpp:334</a></div></div>
1000
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_a0f32ba8cb1109c257552fa775a007ffd"><div class="ttname"><a href="classSVF_1_1Andersen.html#a0f32ba8cb1109c257552fa775a007ffd">SVF::Andersen::handleLoadStore</a></div><div class="ttdeci">virtual void handleLoadStore(ConstraintNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00292">Andersen.cpp:292</a></div></div>
1001
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_acd54e3edace1f41511c8f0a6a68dac18"><div class="ttname"><a href="classSVF_1_1Andersen.html#acd54e3edace1f41511c8f0a6a68dac18">SVF::Andersen::updateNodeRepAndSubs</a></div><div class="ttdeci">void updateNodeRepAndSubs(NodeID nodeId, NodeID newRepId)</div><div class="ttdoc">Updates subnodes of its rep, and rep node of its subs.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00847">Andersen.cpp:847</a></div></div>
984
1002
  <div class="ttc" id="aclassSVF_1_1SVFIR_html_a64939d7ecfd8e2cf862782954a56596b"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVF::SVFIR::SVFVarList</a></div><div class="ttdeci">std::vector&lt; const SVFVar * &gt; SVFVarList</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00058">SVFIR.h:58</a></div></div>
985
- <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a0d7298cbf83568f24fd2bd1926a32968"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a0d7298cbf83568f24fd2bd1926a32968">SVF::AndersenBase::numOfSCCDetection</a></div><div class="ttdeci">static u32_t numOfSCCDetection</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00131">Andersen.h:131</a></div></div>
1003
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a0d7298cbf83568f24fd2bd1926a32968"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a0d7298cbf83568f24fd2bd1926a32968">SVF::AndersenBase::numOfSCCDetection</a></div><div class="ttdeci">static u32_t numOfSCCDetection</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00137">Andersen.h:137</a></div></div>
986
1004
  <div class="ttc" id="aSVFFileSystem_8cpp_html_ab25baccb41e3b67ef0bfdaa1336c9649"><div class="ttname"><a href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a></div><div class="ttdeci">#define F(f)</div></div>
987
1005
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a168f7f7a3a8c70dbf2b5b4269cd4c7c5"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a168f7f7a3a8c70dbf2b5b4269cd4c7c5">SVF::SVFUtil::stopAnalysisLimitTimer</a></div><div class="ttdeci">void stopAnalysisLimitTimer(bool limitTimerSet)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00310">SVFUtil.cpp:310</a></div></div>
988
1006
  <div class="ttc" id="anamespaceSVF_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="SVFType_8h_source.html#l00114">SVFType.h:114</a></div></div>
989
- <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a9f453ec1b4236b8194ae590981217259"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a9f453ec1b4236b8194ae590981217259">SVF::AndersenBase::numOfFieldExpand</a></div><div class="ttdeci">static u32_t numOfFieldExpand</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00129">Andersen.h:129</a></div></div>
990
- <div class="ttc" id="aclassSVF_1_1Andersen_html_ae1ff65a411f2c4dfee0973ad4af48daf"><div class="ttname"><a href="classSVF_1_1Andersen.html#ae1ff65a411f2c4dfee0973ad4af48daf">SVF::Andersen::cluster</a></div><div class="ttdeci">virtual void cluster(void) const</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00845">Andersen.cpp:845</a></div></div>
1007
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a9f453ec1b4236b8194ae590981217259"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a9f453ec1b4236b8194ae590981217259">SVF::AndersenBase::numOfFieldExpand</a></div><div class="ttdeci">static u32_t numOfFieldExpand</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00135">Andersen.h:135</a></div></div>
1008
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_ae1ff65a411f2c4dfee0973ad4af48daf"><div class="ttname"><a href="classSVF_1_1Andersen.html#ae1ff65a411f2c4dfee0973ad4af48daf">SVF::Andersen::cluster</a></div><div class="ttdeci">virtual void cluster(void) const</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00865">Andersen.cpp:865</a></div></div>
991
1009
  <div class="ttc" id="aclassSVF_1_1Options_html_aaab923c093730b1670a54f09340b1bd5"><div class="ttname"><a href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">SVF::Options::MaxFieldLimit</a></div><div class="ttdeci">static const Option&lt; u32_t &gt; MaxFieldLimit</div><div class="ttdoc">Maximum number of field derivations for an object.</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00038">Options.h:38</a></div></div>
992
1010
  <div class="ttc" id="anamespaceSVF_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="svf-llvm_2tools_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
993
1011
  <div class="ttc" id="aclassSVF_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#l00104">PointerAnalysis.h:104</a></div></div>
@@ -997,15 +1015,15 @@ $(function() {
997
1015
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a757815a2c758695176120509ceb0ce70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a757815a2c758695176120509ceb0ce70">SVF::SVFUtil::startAnalysisLimitTimer</a></div><div class="ttdeci">bool startAnalysisLimitTimer(unsigned timeLimit)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00289">SVFUtil.cpp:289</a></div></div>
998
1016
  <div class="ttc" id="aclassSVF_1_1ConstraintNode_html_a0ffe4f1ca1a6f70466cc1c6b3b12c90d"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a0ffe4f1ca1a6f70466cc1c6b3b12c90d">SVF::ConstraintNode::isPWCNode</a></div><div class="ttdeci">bool isPWCNode() const</div><div class="ttdoc">Whether a node involves in PWC, if so, all its points-to elements should become field-insensitive.</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00081">ConsGNode.h:81</a></div></div>
999
1017
  <div class="ttc" id="aSVFType_8h_html_a173ce1b9b505fdadf5613b663749d3b0"><div class="ttname"><a href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a></div><div class="ttdeci">#define DBOUT(TYPE, X)</div><div class="ttdoc">LLVM debug macros, define type of your DBUG model of each pass.</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00543">SVFType.h:543</a></div></div>
1000
- <div class="ttc" id="aclassSVF_1_1Andersen_html_ab069683dd6ca563113efbde2813ab35e"><div class="ttname"><a href="classSVF_1_1Andersen.html#ab069683dd6ca563113efbde2813ab35e">SVF::Andersen::handleCopyGep</a></div><div class="ttdeci">virtual void handleCopyGep(ConstraintNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00252">Andersen.cpp:252</a></div></div>
1018
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_ab069683dd6ca563113efbde2813ab35e"><div class="ttname"><a href="classSVF_1_1Andersen.html#ab069683dd6ca563113efbde2813ab35e">SVF::Andersen::handleCopyGep</a></div><div class="ttdeci">virtual void handleCopyGep(ConstraintNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00272">Andersen.cpp:272</a></div></div>
1001
1019
  <div class="ttc" id="anamespaceSVF_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="SVFType_8h_source.html#l00102">SVFType.h:102</a></div></div>
1002
- <div class="ttc" id="aclassSVF_1_1Andersen_html_a3f0048155f0b3a6899dac6f30553aa9e"><div class="ttname"><a href="classSVF_1_1Andersen.html#a3f0048155f0b3a6899dac6f30553aa9e">SVF::Andersen::collapseNodePts</a></div><div class="ttdeci">bool collapseNodePts(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00529">Andersen.cpp:529</a></div></div>
1020
+ <div class="ttc" id="aclassSVF_1_1Andersen_html_a3f0048155f0b3a6899dac6f30553aa9e"><div class="ttname"><a href="classSVF_1_1Andersen.html#a3f0048155f0b3a6899dac6f30553aa9e">SVF::Andersen::collapseNodePts</a></div><div class="ttdeci">bool collapseNodePts(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00549">Andersen.cpp:549</a></div></div>
1003
1021
  <div class="ttc" id="aclassSVF_1_1SVFValue_html_a7effb0f37f486745e0cdc3ae5e9c732b"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a7effb0f37f486745e0cdc3ae5e9c732b">SVF::SVFValue::getSourceLoc</a></div><div class="ttdeci">virtual const std::string getSourceLoc() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00253">SVFValue.h:253</a></div></div>
1004
1022
  <div class="ttc" id="aclassSVF_1_1Options_html_a453571cd0205f14ead205b3a54477475"><div class="ttname"><a href="classSVF_1_1Options.html#a453571cd0205f14ead205b3a54477475">SVF::Options::ReadAnder</a></div><div class="ttdeci">static const Option&lt; std::string &gt; ReadAnder</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00245">Options.h:245</a></div></div>
1005
1023
  <div class="ttc" id="aclassSVF_1_1PointsTo_html"><div class="ttname"><a href="classSVF_1_1PointsTo.html">SVF::PointsTo</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00028">PointsTo.h:28</a></div></div>
1006
1024
  <div class="ttc" id="aclassSVF_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#l00215">ConsGNode.h:215</a></div></div>
1007
1025
  <div class="ttc" id="anamespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00051">SVFType.h:51</a></div></div>
1008
- <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a944966086ecb716184c8cdcc43db5751"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">SVF::AndersenBase::analyze</a></div><div class="ttdeci">virtual void analyze() override</div><div class="ttdoc">Andersen analysis.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00103">Andersen.cpp:103</a></div></div>
1026
+ <div class="ttc" id="aclassSVF_1_1AndersenBase_html_a944966086ecb716184c8cdcc43db5751"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">SVF::AndersenBase::analyze</a></div><div class="ttdeci">virtual void analyze() override</div><div class="ttdoc">Andersen analysis.</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00133">Andersen.cpp:133</a></div></div>
1009
1027
  <div class="ttc" id="aCHG_8h_html"><div class="ttname"><a href="CHG_8h.html">CHG.h</a></div></div>
1010
1028
  <div class="ttc" id="aAndersen_8h_html"><div class="ttname"><a href="Andersen_8h.html">Andersen.h</a></div></div>
1011
1029
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_ab2e0196e0ce547ab4a483cc6d2646b24"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">SVF::SVFUtil::writeWrnMsg</a></div><div class="ttdeci">void writeWrnMsg(const std::string &amp;msg)</div><div class="ttdoc">Writes a message run through wrnMsg.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00066">SVFUtil.cpp:66</a></div></div>