svf-tools 1.0.289 → 1.0.293

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 (275) hide show
  1. package/README.md +1 -0
  2. package/SVF-doxygen/html/html/AndersenHCD_8cpp_source.html +2 -2
  3. package/SVF-doxygen/html/html/AndersenHLCD_8cpp_source.html +2 -2
  4. package/SVF-doxygen/html/html/AndersenLCD_8cpp_source.html +2 -2
  5. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +3 -3
  7. package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +2 -2
  8. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +1 -1
  9. package/SVF-doxygen/html/html/AndersenWaveDiffWithType_8cpp_source.html +5 -5
  10. package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +3 -3
  11. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +45 -29
  12. package/SVF-doxygen/html/html/Andersen_8h_source.html +50 -50
  13. package/SVF-doxygen/html/html/BasicTypes_8h_source.html +2 -2
  14. package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +9 -9
  15. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
  16. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +1 -1
  17. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +1 -1
  18. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +3 -3
  19. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +1 -1
  20. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +2 -2
  21. package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +2 -2
  22. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +5 -5
  23. package/SVF-doxygen/html/html/FileChecker_8cpp_source.html +2 -2
  24. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +1 -1
  25. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
  26. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +1 -1
  27. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +22 -22
  28. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +52 -32
  29. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +58 -55
  30. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +1 -1
  31. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +2 -2
  32. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
  33. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +4 -4
  34. package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
  35. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +1 -1
  36. package/SVF-doxygen/html/html/MutablePointsToDS_8h_source.html +2 -2
  37. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +64 -11
  38. package/SVF-doxygen/html/html/NodeIDAllocator_8h.html +5 -1
  39. package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +52 -15
  40. package/SVF-doxygen/html/html/PAG_8cpp_source.html +1 -1
  41. package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +2 -2
  42. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +2 -2
  43. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +1 -1
  44. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +1 -1
  45. package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +34 -33
  46. package/SVF-doxygen/html/html/PointsTo_8h_source.html +32 -32
  47. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +4 -12
  48. package/SVF-doxygen/html/html/ProgSlice_8h_source.html +33 -35
  49. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +1 -1
  50. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +31 -36
  51. package/SVF-doxygen/html/html/SVFG_8h_source.html +19 -19
  52. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +15 -7
  53. package/SVF-doxygen/html/html/SVFUtil_8h.html +3 -0
  54. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +10 -8
  55. package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +2 -2
  56. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +3 -3
  57. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +2 -2
  58. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +1 -1
  59. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +3 -3
  60. package/SVF-doxygen/html/html/VFG_8cpp_source.html +17 -11
  61. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +1 -1
  62. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +51 -43
  63. package/SVF-doxygen/html/html/VersionedFlowSensitive_8h_source.html +34 -33
  64. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +5 -5
  65. package/SVF-doxygen/html/html/annotated.html +2 -1
  66. package/SVF-doxygen/html/html/classSVF_1_1AddrPE.html +1 -1
  67. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode-members.html +1 -1
  68. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +3 -3
  69. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +213 -212
  70. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +124 -72
  71. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +2 -2
  72. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +223 -222
  73. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +36 -34
  74. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +232 -231
  75. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +21 -19
  76. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +220 -219
  77. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +38 -36
  78. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +221 -220
  79. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +11 -9
  80. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +232 -231
  81. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +6 -4
  82. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +1 -1
  83. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +220 -219
  84. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +21 -19
  85. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType-members.html +227 -226
  86. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType.html +26 -24
  87. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +2 -3
  88. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +2 -2
  89. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.html +1 -1
  90. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +3 -4
  91. package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode.html +1 -1
  92. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  93. package/SVF-doxygen/html/html/classSVF_1_1CmpPE.html +1 -1
  94. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +3 -4
  95. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +2 -2
  96. package/SVF-doxygen/html/html/classSVF_1_1CopyPE.html +1 -1
  97. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode-members.html +1 -1
  98. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +3 -3
  99. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +1 -1
  100. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +1 -1
  101. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +2 -2
  102. package/SVF-doxygen/html/html/classSVF_1_1FIObjPN.html +1 -1
  103. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +110 -107
  104. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +12 -4
  105. package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +2 -2
  106. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +2 -2
  107. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +109 -106
  108. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +286 -157
  109. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +30 -30
  110. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +121 -118
  111. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +36 -28
  112. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +2 -2
  113. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +3 -3
  114. package/SVF-doxygen/html/html/classSVF_1_1GepObjPN.html +1 -1
  115. package/SVF-doxygen/html/html/classSVF_1_1GepPE.html +1 -1
  116. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode-members.html +1 -1
  117. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +3 -3
  118. package/SVF-doxygen/html/html/classSVF_1_1GepValPN.html +1 -1
  119. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  120. package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode.html +1 -1
  121. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  122. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +2 -2
  123. package/SVF-doxygen/html/html/classSVF_1_1LoadPE.html +1 -1
  124. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode-members.html +1 -1
  125. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +3 -3
  126. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +1 -1
  127. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +2 -2
  128. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +1 -1
  129. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +4 -4
  130. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +5 -5
  131. package/SVF-doxygen/html/html/classSVF_1_1MutablePTData.html +2 -2
  132. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator-members.html +11 -10
  133. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator.html +74 -34
  134. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer-members.html +109 -0
  135. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +1188 -0
  136. package/SVF-doxygen/html/html/classSVF_1_1NormalGepPE.html +1 -1
  137. package/SVF-doxygen/html/html/classSVF_1_1ObjPN.html +1 -1
  138. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +3 -4
  139. package/SVF-doxygen/html/html/classSVF_1_1PersistentIncDFPTData.html +2 -2
  140. package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +2 -2
  141. package/SVF-doxygen/html/html/classSVF_1_1PointsTo.html +77 -66
  142. package/SVF-doxygen/html/html/classSVF_1_1PointsTo_1_1PointsToIterator.html +32 -26
  143. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice-members.html +36 -37
  144. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +121 -153
  145. package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode.html +1 -1
  146. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  147. package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +4 -4
  148. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +49 -49
  149. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +3 -3
  150. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +9 -9
  151. package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +2 -2
  152. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +6 -6
  153. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +2 -2
  154. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode-members.html +1 -1
  155. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +8 -9
  156. package/SVF-doxygen/html/html/classSVF_1_1StorePE.html +1 -1
  157. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode-members.html +1 -1
  158. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +3 -3
  159. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +1 -1
  160. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
  161. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
  162. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +4 -4
  163. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE.html +1 -1
  164. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  165. package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +1 -1
  166. package/SVF-doxygen/html/html/classSVF_1_1ValPN.html +1 -1
  167. package/SVF-doxygen/html/html/classSVF_1_1VariantGepPE.html +1 -1
  168. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +132 -129
  169. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +171 -116
  170. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +37 -37
  171. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +5 -5
  172. package/SVF-doxygen/html/html/classes.html +62 -62
  173. package/SVF-doxygen/html/html/functions_b.html +10 -5
  174. package/SVF-doxygen/html/html/functions_c.html +36 -22
  175. package/SVF-doxygen/html/html/functions_d.html +12 -0
  176. package/SVF-doxygen/html/html/functions_e.html +9 -3
  177. package/SVF-doxygen/html/html/functions_f.html +21 -18
  178. package/SVF-doxygen/html/html/functions_func_c.html +19 -10
  179. package/SVF-doxygen/html/html/functions_func_d.html +3 -0
  180. package/SVF-doxygen/html/html/functions_func_e.html +3 -0
  181. package/SVF-doxygen/html/html/functions_func_g.html +16 -10
  182. package/SVF-doxygen/html/html/functions_func_p.html +6 -2
  183. package/SVF-doxygen/html/html/functions_func_r.html +7 -1
  184. package/SVF-doxygen/html/html/functions_func_t.html +3 -0
  185. package/SVF-doxygen/html/html/functions_g.html +15 -9
  186. package/SVF-doxygen/html/html/functions_l.html +10 -7
  187. package/SVF-doxygen/html/html/functions_n.html +21 -3
  188. package/SVF-doxygen/html/html/functions_o.html +16 -8
  189. package/SVF-doxygen/html/html/functions_p.html +23 -17
  190. package/SVF-doxygen/html/html/functions_r.html +13 -6
  191. package/SVF-doxygen/html/html/functions_s.html +9 -9
  192. package/SVF-doxygen/html/html/functions_t.html +18 -9
  193. package/SVF-doxygen/html/html/functions_type_d.html +3 -0
  194. package/SVF-doxygen/html/html/functions_v.html +3 -3
  195. package/SVF-doxygen/html/html/functions_vars_b.html +3 -0
  196. package/SVF-doxygen/html/html/functions_vars_c.html +3 -0
  197. package/SVF-doxygen/html/html/functions_vars_d.html +6 -0
  198. package/SVF-doxygen/html/html/functions_vars_e.html +3 -0
  199. package/SVF-doxygen/html/html/functions_vars_f.html +3 -0
  200. package/SVF-doxygen/html/html/functions_vars_l.html +3 -0
  201. package/SVF-doxygen/html/html/functions_vars_n.html +18 -0
  202. package/SVF-doxygen/html/html/functions_vars_o.html +6 -0
  203. package/SVF-doxygen/html/html/functions_vars_r.html +3 -0
  204. package/SVF-doxygen/html/html/functions_vars_t.html +6 -0
  205. package/SVF-doxygen/html/html/functions_w.html +8 -6
  206. package/SVF-doxygen/html/html/globals_f.html +3 -3
  207. package/SVF-doxygen/html/html/hierarchy.html +413 -412
  208. package/SVF-doxygen/html/html/menudata.js +2 -0
  209. package/SVF-doxygen/html/html/namespaceSVF.html +8 -8
  210. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +47 -16
  211. package/SVF-doxygen/html/html/namespacemembers_func.html +17 -10
  212. package/SVF-doxygen/html/html/namespacemembers_h.html +76 -0
  213. package/SVF-doxygen/html/html/search/all_10.js +9 -8
  214. package/SVF-doxygen/html/html/search/all_12.js +5 -2
  215. package/SVF-doxygen/html/html/search/all_13.js +7 -7
  216. package/SVF-doxygen/html/html/search/all_14.js +8 -5
  217. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  218. package/SVF-doxygen/html/html/search/all_16.js +1 -1
  219. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  220. package/SVF-doxygen/html/html/search/all_2.js +1 -0
  221. package/SVF-doxygen/html/html/search/all_3.js +4 -0
  222. package/SVF-doxygen/html/html/search/all_4.js +4 -0
  223. package/SVF-doxygen/html/html/search/all_5.js +2 -0
  224. package/SVF-doxygen/html/html/search/all_6.js +4 -3
  225. package/SVF-doxygen/html/html/search/all_7.js +4 -2
  226. package/SVF-doxygen/html/html/search/all_8.js +1 -0
  227. package/SVF-doxygen/html/html/search/all_c.js +4 -3
  228. package/SVF-doxygen/html/html/search/all_d.js +1 -1
  229. package/SVF-doxygen/html/html/search/all_e.js +9 -4
  230. package/SVF-doxygen/html/html/search/all_f.js +4 -2
  231. package/SVF-doxygen/html/html/search/classes_2.js +1 -0
  232. package/SVF-doxygen/html/html/search/functions_10.js +1 -1
  233. package/SVF-doxygen/html/html/search/functions_11.js +1 -0
  234. package/SVF-doxygen/html/html/search/functions_2.js +2 -0
  235. package/SVF-doxygen/html/html/search/functions_3.js +1 -0
  236. package/SVF-doxygen/html/html/search/functions_4.js +1 -0
  237. package/SVF-doxygen/html/html/search/functions_6.js +4 -2
  238. package/SVF-doxygen/html/html/search/functions_7.js +1 -0
  239. package/SVF-doxygen/html/html/search/functions_e.js +3 -2
  240. package/SVF-doxygen/html/html/search/functions_f.js +2 -0
  241. package/SVF-doxygen/html/html/search/typedefs_3.js +1 -0
  242. package/SVF-doxygen/html/html/search/variables_12.js +1 -0
  243. package/SVF-doxygen/html/html/search/variables_14.js +3 -1
  244. package/SVF-doxygen/html/html/search/variables_15.js +1 -1
  245. package/SVF-doxygen/html/html/search/variables_2.js +1 -0
  246. package/SVF-doxygen/html/html/search/variables_3.js +1 -0
  247. package/SVF-doxygen/html/html/search/variables_4.js +2 -0
  248. package/SVF-doxygen/html/html/search/variables_5.js +1 -0
  249. package/SVF-doxygen/html/html/search/variables_6.js +1 -0
  250. package/SVF-doxygen/html/html/search/variables_c.js +1 -0
  251. package/SVF-doxygen/html/html/search/variables_d.js +1 -1
  252. package/SVF-doxygen/html/html/search/variables_e.js +7 -2
  253. package/SVF-doxygen/html/html/search/variables_f.js +2 -0
  254. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  255. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +1 -1
  256. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +20 -20
  257. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +18 -18
  258. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1PointsTo_01_4.html +1 -1
  259. package/include/SABER/ProgSlice.h +0 -3
  260. package/include/Util/NodeIDAllocator.h +94 -0
  261. package/include/Util/SVFUtil.h +3 -0
  262. package/include/WPA/Andersen.h +4 -0
  263. package/include/WPA/FlowSensitive.h +9 -0
  264. package/include/WPA/VersionedFlowSensitive.h +3 -0
  265. package/lib/Graphs/SVFG.cpp +0 -20
  266. package/lib/Graphs/VFG.cpp +18 -0
  267. package/lib/MemoryModel/PointsTo.cpp +76 -19
  268. package/lib/SABER/ProgSlice.cpp +0 -37
  269. package/lib/SABER/SaberAnnotator.cpp +1 -1
  270. package/lib/Util/NodeIDAllocator.cpp +548 -1
  271. package/lib/Util/SVFUtil.cpp +19 -0
  272. package/lib/WPA/Andersen.cpp +34 -0
  273. package/lib/WPA/FlowSensitive.cpp +70 -0
  274. package/lib/WPA/VersionedFlowSensitive.cpp +20 -0
  275. package/package.json +1 -1
@@ -534,6 +534,8 @@ Protected Member Functions</h2></td></tr>
534
534
  <tr class="memitem:a85cc81a4f9399e9a23372fa2658325a6"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1Andersen.html#a85cc81a4f9399e9a23372fa2658325a6">addTypeForGepObjNode</a> (<a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, const <a class="el" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a> *)</td></tr>
535
535
  <tr class="memdesc:a85cc81a4f9399e9a23372fa2658325a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">add type for newly created GepObjNode <a href="#a85cc81a4f9399e9a23372fa2658325a6">More...</a><br /></td></tr>
536
536
  <tr class="separator:a85cc81a4f9399e9a23372fa2658325a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
537
+ <tr class="memitem:ae1ff65a411f2c4dfee0973ad4af48daf"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1Andersen.html#ae1ff65a411f2c4dfee0973ad4af48daf">cluster</a> (void) const</td></tr>
538
+ <tr class="separator:ae1ff65a411f2c4dfee0973ad4af48daf"><td class="memSeparator" colspan="2">&#160;</td></tr>
537
539
  <tr><td colspan="2"><div class="groupHeader"></div></td></tr>
538
540
  <tr class="memitem:adccf6acf63abc9cafc92b2148396fd10"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1Andersen.html#adccf6acf63abc9cafc92b2148396fd10">processAllAddr</a> ()</td></tr>
539
541
  <tr class="memdesc:adccf6acf63abc9cafc92b2148396fd10"><td class="mdescLeft">&#160;</td><td class="mdescRight">handling various constraints <a href="#adccf6acf63abc9cafc92b2148396fd10">More...</a><br /></td></tr>
@@ -1093,6 +1095,47 @@ Additional Inherited Members</h2></td></tr>
1093
1095
  </div><!-- fragment -->
1094
1096
  </div>
1095
1097
  </div>
1098
+ <a id="ae1ff65a411f2c4dfee0973ad4af48daf"></a>
1099
+ <h2 class="memtitle"><span class="permalink"><a href="#ae1ff65a411f2c4dfee0973ad4af48daf">&#9670;&nbsp;</a></span>cluster()</h2>
1100
+
1101
+ <div class="memitem">
1102
+ <div class="memproto">
1103
+ <table class="mlabels">
1104
+ <tr>
1105
+ <td class="mlabels-left">
1106
+ <table class="memname">
1107
+ <tr>
1108
+ <td class="memname">void Andersen::cluster </td>
1109
+ <td>(</td>
1110
+ <td class="paramtype">void&#160;</td>
1111
+ <td class="paramname"></td><td>)</td>
1112
+ <td> const</td>
1113
+ </tr>
1114
+ </table>
1115
+ </td>
1116
+ <td class="mlabels-right">
1117
+ <span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span> </td>
1118
+ </tr>
1119
+ </table>
1120
+ </div><div class="memdoc">
1121
+ <p>Runs a <a class="el" href="classSVF_1_1Steensgaard.html">Steensgaard</a> analysis and performs clustering based on those results set the global best mapping. </p>
1122
+
1123
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00829">829</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1124
+ <div class="fragment"><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160;{</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1Options.html#adfc1a5c6098d3867e29fc65ca9ffa1cc">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><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <a class="code" href="classSVF_1_1Steensgaard.html">Steensgaard</a> *steens = <a class="code" href="classSVF_1_1Steensgaard.html#a33714348b5ed79d579039014f3092b87">Steensgaard::createSteensgaard</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>);</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; std::vector&lt;std::pair&lt;unsigned, unsigned&gt;&gt; keys;</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">PAG::iterator</a> pit = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); pit != <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++pit)</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; {</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; keys.push_back(std::make_pair(pit-&gt;first, 1));</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; }</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160;</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; std::vector&lt;std::pair&lt;hclust_fast_methods, std::vector&lt;NodeID&gt;&gt;&gt; candidates;</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> nodeMapping =</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</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><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> reverseNodeMapping =</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</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><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160;</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html#a84eca4c7fc833f8ca4d119cd4da08ca8">PointsTo::setCurrentBestNodeMapping</a>(nodeMapping, reverseNodeMapping);</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160;}</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
1125
+ <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
1126
+ <div class="ttc" id="classSVF_1_1Options_html_adfc1a5c6098d3867e29fc65ca9ffa1cc"><div class="ttname"><a href="classSVF_1_1Options.html#adfc1a5c6098d3867e29fc65ca9ffa1cc">SVF::Options::MaxFieldLimit</a></div><div class="ttdeci">static const llvm::cl::opt&lt; unsigned &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#l00034">Options.h:34</a></div></div>
1127
+ <div class="ttc" id="classSVF_1_1GenericGraph_html_a4bef15157423cef48dc7333a803cd27d"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">SVF::GenericGraph::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00369">GenericGraph.h:369</a></div></div>
1128
+ <div class="ttc" id="classSVF_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#l00041">PointsTo.h:41</a></div></div>
1129
+ <div class="ttc" id="classSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph&lt; PAGNode, PAGEdge &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#l00337">GenericGraph.h:337</a></div></div>
1130
+ <div class="ttc" id="classSVF_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#l00174">NodeIDAllocator.cpp:174</a></div></div>
1131
+ <div class="ttc" id="classSVF_1_1Steensgaard_html_a33714348b5ed79d579039014f3092b87"><div class="ttname"><a href="classSVF_1_1Steensgaard.html#a33714348b5ed79d579039014f3092b87">SVF::Steensgaard::createSteensgaard</a></div><div class="ttdeci">static Steensgaard * createSteensgaard(PAG *_pag)</div><div class="ttdoc">Create an singleton instance. </div><div class="ttdef"><b>Definition:</b> <a href="Steensgaard_8h_source.html#l00035">Steensgaard.h:35</a></div></div>
1132
+ <div class="ttc" id="classSVF_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>
1133
+ <div class="ttc" id="classSVF_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#l00355">PointsTo.cpp:355</a></div></div>
1134
+ <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a8771956f7595b66d825b3dc459d1ae49"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">SVF::PointerAnalysis::pag</a></div><div class="ttdeci">static PAG * pag</div><div class="ttdoc">PAG. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00147">PointerAnalysis.h:147</a></div></div>
1135
+ <div class="ttc" id="classSVF_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#l00385">NodeIDAllocator.cpp:385</a></div></div>
1136
+ </div><!-- fragment -->
1137
+ </div>
1138
+ </div>
1096
1139
  <a id="af4a0d960ef198047517bb32ee1e24a61"></a>
1097
1140
  <h2 class="memtitle"><span class="permalink"><a href="#af4a0d960ef198047517bb32ee1e24a61">&#9670;&nbsp;</a></span>collapseField()</h2>
1098
1141
 
@@ -1119,8 +1162,8 @@ Additional Inherited Members</h2></td></tr>
1119
1162
  <p>Collapse field. make struct with the same base as nodeId become field-insensitive. </p>
1120
1163
  <p>Black hole doesn't have structures, no collapse is needed. In later versions, instead of using base node to represent the struct, we'll create new field-insensitive node. To avoid creating a new "black hole" node, do not collapse field for black hole node. </p>
1121
1164
 
1122
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00520">520</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1123
- <div class="fragment"><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;{</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a8ba74f82c1e796f2888ba34bc8355ce9">isBlkObjOrConstantObj</a>(nodeId))</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="comment">// set base node field-insensitive.</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#ac5683fe2e24b393ccc5cb6d8bc92cf2b">setObjFieldInsensitive</a>(nodeId);</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="comment">// replace all occurrences of each field with the field-insensitive node</span></div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseId = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a5fbbfb7b935e0b8867f7beab32ab7763">getFIObjNode</a>(nodeId);</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseRepNodeId = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">sccRepNode</a>(baseId);</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp; allFields = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a8200b7cbd600958c662f24169ccbc8d6">getAllFieldsObjNode</a>(baseId);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator fieldIt = allFields.begin(), fieldEit = allFields.end(); fieldIt != fieldEit; fieldIt++)</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; {</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fieldId = *fieldIt;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="keywordflow">if</span> (fieldId != baseId)</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; {</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="comment">// use the reverse pts of this field node to find all pointers point to it</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> revPts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a58113943e4e7144d94d26991dcc8bcc7">getRevPts</a>(fieldId);</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : revPts)</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; {</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="comment">// change the points-to target from field to base node</span></div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a3f78f60e1947a6d6fbcd3a0ee11e262a">clearPts</a>(o, fieldId);</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(o, baseId);</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(o);</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="comment">// merge field node into base node, including edges and pts.</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fieldRepNodeId = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">sccRepNode</a>(fieldId);</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="keywordflow">if</span> (fieldRepNodeId != baseRepNodeId){</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a36729160041bc3a3e2b0a92b29062848">mergeNodeToRep</a>(fieldRepNodeId, baseRepNodeId);</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</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><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a6c3d6b4c004d9e43690c3807502eed74">redundantGepNodes</a>.set(fieldId);</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; }</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; }</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; }</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160;</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c">isPWCNode</a>(baseRepNodeId))</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#a3f0048155f0b3a6899dac6f30553aa9e">collapseNodePts</a>(baseRepNodeId))</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ad40b196c2c699bd115529b806d20de25">timeOfCollapse</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;}</div><div class="ttc" id="classSVF_1_1ConstraintGraph_html_a8ba74f82c1e796f2888ba34bc8355ce9"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a8ba74f82c1e796f2888ba34bc8355ce9">SVF::ConstraintGraph::isBlkObjOrConstantObj</a></div><div class="ttdeci">bool isBlkObjOrConstantObj(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00309">ConsG.h:309</a></div></div>
1165
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00535">535</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1166
+ <div class="fragment"><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;{</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a8ba74f82c1e796f2888ba34bc8355ce9">isBlkObjOrConstantObj</a>(nodeId))</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="comment">// set base node field-insensitive.</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#ac5683fe2e24b393ccc5cb6d8bc92cf2b">setObjFieldInsensitive</a>(nodeId);</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="comment">// replace all occurrences of each field with the field-insensitive node</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseId = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a5fbbfb7b935e0b8867f7beab32ab7763">getFIObjNode</a>(nodeId);</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseRepNodeId = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">sccRepNode</a>(baseId);</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp; allFields = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a8200b7cbd600958c662f24169ccbc8d6">getAllFieldsObjNode</a>(baseId);</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator fieldIt = allFields.begin(), fieldEit = allFields.end(); fieldIt != fieldEit; fieldIt++)</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; {</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fieldId = *fieldIt;</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="keywordflow">if</span> (fieldId != baseId)</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; {</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="comment">// use the reverse pts of this field node to find all pointers point to it</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> revPts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a58113943e4e7144d94d26991dcc8bcc7">getRevPts</a>(fieldId);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : revPts)</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; {</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="comment">// change the points-to target from field to base node</span></div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a3f78f60e1947a6d6fbcd3a0ee11e262a">clearPts</a>(o, fieldId);</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(o, baseId);</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(o);</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; }</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="comment">// merge field node into base node, including edges and pts.</span></div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fieldRepNodeId = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">sccRepNode</a>(fieldId);</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordflow">if</span> (fieldRepNodeId != baseRepNodeId){</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a36729160041bc3a3e2b0a92b29062848">mergeNodeToRep</a>(fieldRepNodeId, baseRepNodeId);</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="comment">// gep node fieldId becomes redundant if it is merged to its base node who is set as field-insensitive</span></div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a6c3d6b4c004d9e43690c3807502eed74">redundantGepNodes</a>.set(fieldId);</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; }</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; }</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; }</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c">isPWCNode</a>(baseRepNodeId))</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#a3f0048155f0b3a6899dac6f30553aa9e">collapseNodePts</a>(baseRepNodeId))</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160;</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ad40b196c2c699bd115529b806d20de25">timeOfCollapse</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160;}</div><div class="ttc" id="classSVF_1_1ConstraintGraph_html_a8ba74f82c1e796f2888ba34bc8355ce9"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a8ba74f82c1e796f2888ba34bc8355ce9">SVF::ConstraintGraph::isBlkObjOrConstantObj</a></div><div class="ttdeci">bool isBlkObjOrConstantObj(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00309">ConsG.h:309</a></div></div>
1124
1167
  <div class="ttc" id="classSVF_1_1WPASolver_html_a4af1c3e72f5af96c4facff672108da58"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">SVF::WPASolver::pushIntoWorklist</a></div><div class="ttdeci">virtual void pushIntoWorklist(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00163">WPASolver.h:163</a></div></div>
1125
1168
  <div class="ttc" id="namespaceSVF_html_a212231734fa43d5c7414137deaac7df3"><div class="ttname"><a href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">SVF::NodeSet</a></div><div class="ttdeci">Set&lt; NodeID &gt; NodeSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00116">SVFBasicTypes.h:116</a></div></div>
1126
1169
  <div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
@@ -1131,8 +1174,8 @@ Additional Inherited Members</h2></td></tr>
1131
1174
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5ec3d9bf1fc81346c9df29638daedc0f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">SVF::PointerAnalysis::stat</a></div><div class="ttdeci">PTAStat * stat</div><div class="ttdoc">Statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00155">PointerAnalysis.h:155</a></div></div>
1132
1175
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_a39b973543acdcdc5493832cc9d0f586f"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f">SVF::ConstraintGraph::sccRepNode</a></div><div class="ttdeci">NodeID sccRepNode(NodeID id) const</div><div class="ttdoc">SCC rep/sub nodes methods. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00232">ConsG.h:232</a></div></div>
1133
1176
  <div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00171">SVFBasicTypes.h:171</a></div></div>
1134
- <div class="ttc" id="classSVF_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#l00500">Andersen.cpp:500</a></div></div>
1135
- <div class="ttc" id="classSVF_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#l00780">Andersen.cpp:780</a></div></div>
1177
+ <div class="ttc" id="classSVF_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#l00515">Andersen.cpp:515</a></div></div>
1178
+ <div class="ttc" id="classSVF_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#l00795">Andersen.cpp:795</a></div></div>
1136
1179
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a3f78f60e1947a6d6fbcd3a0ee11e262a"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a3f78f60e1947a6d6fbcd3a0ee11e262a">SVF::PointerAnalysis::clearPts</a></div><div class="ttdeci">virtual void clearPts()</div><div class="ttdoc">Clear points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00261">PointerAnalysis.h:261</a></div></div>
1137
1180
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_a8200b7cbd600958c662f24169ccbc8d6"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a8200b7cbd600958c662f24169ccbc8d6">SVF::ConstraintGraph::getAllFieldsObjNode</a></div><div class="ttdeci">NodeBS &amp; getAllFieldsObjNode(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00313">ConsG.h:313</a></div></div>
1138
1181
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a58113943e4e7144d94d26991dcc8bcc7"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a58113943e4e7144d94d26991dcc8bcc7">SVF::BVDataPTAImpl::getRevPts</a></div><div class="ttdeci">virtual const NodeSet &amp; getRevPts(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00102">PointerAnalysisImpl.h:102</a></div></div>
@@ -1169,9 +1212,9 @@ Additional Inherited Members</h2></td></tr>
1169
1212
 
1170
1213
  <p>Reimplemented from <a class="el" href="classSVF_1_1WPASolver.html#a79c2b3f10f3f813396d8caaa1f7bc62a">SVF::WPASolver&lt; GraphType &gt;</a>.</p>
1171
1214
 
1172
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00442">442</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1173
- <div class="fragment"><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;{</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">while</span> (<a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#aa867ffe0f3639a0ef5b5c36696e733be">hasNodesToBeCollapsed</a>())</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; {</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a006667ed55132ca0909c0e9118fea704">getNextCollapseNode</a>();</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="comment">// collapseField() may change the points-to set of the nodes which have been processed</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="comment">// before, in this case, we may need to re-do the analysis.</span></div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#af4a0d960ef198047517bb32ee1e24a61">collapseField</a>(node))</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#ac460772d9236a2fefe17b2557023b883">reanalyze</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; }</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;}</div><div class="ttc" id="classSVF_1_1WPASolver_html_ac460772d9236a2fefe17b2557023b883"><div class="ttname"><a href="classSVF_1_1WPASolver.html#ac460772d9236a2fefe17b2557023b883">SVF::WPASolver::reanalyze</a></div><div class="ttdeci">bool reanalyze</div><div class="ttdoc">Reanalyze if any constraint value changed. </div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00178">WPASolver.h:178</a></div></div>
1174
- <div class="ttc" id="classSVF_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#l00520">Andersen.cpp:520</a></div></div>
1215
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00457">457</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1216
+ <div class="fragment"><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;{</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordflow">while</span> (<a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#aa867ffe0f3639a0ef5b5c36696e733be">hasNodesToBeCollapsed</a>())</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; {</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a006667ed55132ca0909c0e9118fea704">getNextCollapseNode</a>();</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="comment">// collapseField() may change the points-to set of the nodes which have been processed</span></div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="comment">// before, in this case, we may need to re-do the analysis.</span></div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#af4a0d960ef198047517bb32ee1e24a61">collapseField</a>(node))</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#ac460772d9236a2fefe17b2557023b883">reanalyze</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; }</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;}</div><div class="ttc" id="classSVF_1_1WPASolver_html_ac460772d9236a2fefe17b2557023b883"><div class="ttname"><a href="classSVF_1_1WPASolver.html#ac460772d9236a2fefe17b2557023b883">SVF::WPASolver::reanalyze</a></div><div class="ttdeci">bool reanalyze</div><div class="ttdoc">Reanalyze if any constraint value changed. </div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00178">WPASolver.h:178</a></div></div>
1217
+ <div class="ttc" id="classSVF_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#l00535">Andersen.cpp:535</a></div></div>
1175
1218
  <div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
1176
1219
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_aa867ffe0f3639a0ef5b5c36696e733be"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#aa867ffe0f3639a0ef5b5c36696e733be">SVF::ConstraintGraph::hasNodesToBeCollapsed</a></div><div class="ttdeci">bool hasNodesToBeCollapsed() const</div><div class="ttdoc">Add/get nodes to be collapsed. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00360">ConsG.h:360</a></div></div>
1177
1220
  <div class="ttc" id="classSVF_1_1AndersenBase_html_ae21e38a06a4397d11cdd17b0f8f282fd"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">SVF::AndersenBase::consCG</a></div><div class="ttdeci">ConstraintGraph * consCG</div><div class="ttdoc">Constraint Graph. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00149">Andersen.h:149</a></div></div>
@@ -1205,8 +1248,8 @@ Additional Inherited Members</h2></td></tr>
1205
1248
  <p>Collapse node's points-to set. Change all points-to elements into field-insensitive. </p>
1206
1249
  <p>Points to set may be changed during collapse, so use a clone instead. </p>
1207
1250
 
1208
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00500">500</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1209
- <div class="fragment"><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;{</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; nodePts = <a class="code" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">getPts</a>(nodeId);</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> ptsClone = nodePts;</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</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#aa53962e561399bf493d1f2b9137356f6">begin</a>(), ptsEit = ptsClone.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>(); ptsIt != ptsEit; ptsIt++)</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(*ptsIt))</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#af4a0d960ef198047517bb32ee1e24a61">collapseField</a>(*ptsIt))</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; }</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;}</div><div class="ttc" id="classSVF_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#l00520">Andersen.cpp:520</a></div></div>
1251
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00515">515</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1252
+ <div class="fragment"><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160;{</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; nodePts = <a class="code" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">getPts</a>(nodeId);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> ptsClone = nodePts;</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</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#aa53962e561399bf493d1f2b9137356f6">begin</a>(), ptsEit = ptsClone.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>(); ptsIt != ptsEit; ptsIt++)</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; {</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(*ptsIt))</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#af4a0d960ef198047517bb32ee1e24a61">collapseField</a>(*ptsIt))</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; }</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;}</div><div class="ttc" id="classSVF_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#l00535">Andersen.cpp:535</a></div></div>
1210
1253
  <div class="ttc" id="classSVF_1_1Andersen_html_a187285a5bdf9422d9188b2b11b667639"><div class="ttname"><a href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">SVF::Andersen::getPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getPts(NodeID id)</div><div class="ttdoc">Operation of points-to set. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00222">Andersen.h:222</a></div></div>
1211
1254
  <div class="ttc" id="classSVF_1_1PointsTo_1_1PointsToIterator_html"><div class="ttname"><a href="classSVF_1_1PointsTo_1_1PointsToIterator.html">SVF::PointsTo::PointsToIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00174">PointsTo.h:174</a></div></div>
1212
1255
  <div class="ttc" id="classSVF_1_1PointsTo_html_aa53962e561399bf493d1f2b9137356f6"><div class="ttname"><a href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">SVF::PointsTo::begin</a></div><div class="ttdeci">const_iterator begin(void) const</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00127">PointsTo.h:127</a></div></div>
@@ -1245,10 +1288,10 @@ Additional Inherited Members</h2></td></tr>
1245
1288
 
1246
1289
  <p>Reimplemented from <a class="el" href="classSVF_1_1WPASolver.html#a138b403af0370ad6fdf8cc6af0530392">SVF::WPASolver&lt; GraphType &gt;</a>.</p>
1247
1290
 
1248
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00433">433</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1249
- <div class="fragment"><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;{</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="comment">// If a node is a PWC node, collapse all its points-to tarsget.</span></div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="comment">// collapseNodePts() may change the points-to set of the nodes which have been processed</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="comment">// before, in this case, we may need to re-do the analysis.</span></div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#a44d62658bbd2efcef5ff479930b5dce9">mergePWC</a>() &amp;&amp; <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c">isPWCNode</a>(nodeId) &amp;&amp; <a class="code" href="classSVF_1_1Andersen.html#a3f0048155f0b3a6899dac6f30553aa9e">collapseNodePts</a>(nodeId))</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#ac460772d9236a2fefe17b2557023b883">reanalyze</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;}</div><div class="ttc" id="classSVF_1_1WPASolver_html_ac460772d9236a2fefe17b2557023b883"><div class="ttname"><a href="classSVF_1_1WPASolver.html#ac460772d9236a2fefe17b2557023b883">SVF::WPASolver::reanalyze</a></div><div class="ttdeci">bool reanalyze</div><div class="ttdoc">Reanalyze if any constraint value changed. </div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00178">WPASolver.h:178</a></div></div>
1291
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00448">448</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1292
+ <div class="fragment"><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;{</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="comment">// If a node is a PWC node, collapse all its points-to tarsget.</span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="comment">// collapseNodePts() may change the points-to set of the nodes which have been processed</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="comment">// before, in this case, we may need to re-do the analysis.</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#a44d62658bbd2efcef5ff479930b5dce9">mergePWC</a>() &amp;&amp; <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c">isPWCNode</a>(nodeId) &amp;&amp; <a class="code" href="classSVF_1_1Andersen.html#a3f0048155f0b3a6899dac6f30553aa9e">collapseNodePts</a>(nodeId))</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#ac460772d9236a2fefe17b2557023b883">reanalyze</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;}</div><div class="ttc" id="classSVF_1_1WPASolver_html_ac460772d9236a2fefe17b2557023b883"><div class="ttname"><a href="classSVF_1_1WPASolver.html#ac460772d9236a2fefe17b2557023b883">SVF::WPASolver::reanalyze</a></div><div class="ttdeci">bool reanalyze</div><div class="ttdoc">Reanalyze if any constraint value changed. </div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00178">WPASolver.h:178</a></div></div>
1250
1293
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_a84468bc9355d31e8c3e18369036ddf5c"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c">SVF::ConstraintGraph::isPWCNode</a></div><div class="ttdeci">bool isPWCNode(NodeID nodeId)</div><div class="ttdoc">Check/Set PWC (positive weight cycle) flag. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00348">ConsG.h:348</a></div></div>
1251
- <div class="ttc" id="classSVF_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#l00500">Andersen.cpp:500</a></div></div>
1294
+ <div class="ttc" id="classSVF_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#l00515">Andersen.cpp:515</a></div></div>
1252
1295
  <div class="ttc" id="classSVF_1_1Andersen_html_a44d62658bbd2efcef5ff479930b5dce9"><div class="ttname"><a href="classSVF_1_1Andersen.html#a44d62658bbd2efcef5ff479930b5dce9">SVF::Andersen::mergePWC</a></div><div class="ttdeci">bool mergePWC() const</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00250">Andersen.h:250</a></div></div>
1253
1296
  <div class="ttc" id="classSVF_1_1AndersenBase_html_ae21e38a06a4397d11cdd17b0f8f282fd"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">SVF::AndersenBase::consCG</a></div><div class="ttdeci">ConstraintGraph * consCG</div><div class="ttdoc">Constraint Graph. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00149">Andersen.h:149</a></div></div>
1254
1297
  </div><!-- fragment -->
@@ -1335,8 +1378,8 @@ Additional Inherited Members</h2></td></tr>
1335
1378
  <p>Connect formal and actual parameters for indirect callsites. </p>
1336
1379
  <p>Connect formal and actual parameters for indirect callsites </p>
1337
1380
 
1338
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00661">661</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1339
- <div class="fragment"><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160;{</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(F);</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#adbfc4364261f019dc6cf33234a5177d2">DAndersen</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">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#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>() &lt;&lt; <span class="stringliteral">&quot; to callee &quot;</span> &lt;&lt; *F &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160;</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* callBlockNode = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#ad274c5c15ac51cea5d09ad08febe8c14">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <a class="code" href="classSVF_1_1RetBlockNode.html">RetBlockNode</a>* retBlockNode = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#ad274c5c15ac51cea5d09ad08febe8c14">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a6d66c83cb1656d0f8ec8b8b65a9e9c41">getRetBlockNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160;</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a19b96a872d9096037f20e25122e469ea">SVFUtil::isHeapAllocExtFunViaRet</a>(F) &amp;&amp; <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a0ed3da89d9cba90888e04969dc43f5a3">callsiteHasRet</a>(retBlockNode))</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; {</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a7b1b9e9b25b5643440aca77e23a8de07">heapAllocatorViaIndCall</a>(cs,cpySrcNodes);</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; }</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160;</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a08f1b7f68a267b6cc5ad9cb3f1efede0">funHasRet</a>(F) &amp;&amp; <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a0ed3da89d9cba90888e04969dc43f5a3">callsiteHasRet</a>(retBlockNode))</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; {</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* cs_return = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#ae455de4db007a5bebffd3a9c16e0b107">getCallSiteRet</a>(retBlockNode);</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* fun_return = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a838a9fa42e68b5f32853f73fa05a7c09">getFunRet</a>(F);</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="keywordflow">if</span> (cs_return-&gt;<a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>() &amp;&amp; fun_return-&gt;<a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>())</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; {</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = <a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(cs_return-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret = <a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(fun_return-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57">addCopyEdge</a>(srcret, dstrec))</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; {</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; cpySrcNodes.insert(std::make_pair(srcret,dstrec));</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; }</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; }</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; {</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#adbfc4364261f019dc6cf33234a5177d2">DAndersen</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;not a pointer ignored\n&quot;</span>);</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; }</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; }</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a157df68295822a17ad07a850a230bae1">hasCallSiteArgsMap</a>(callBlockNode) &amp;&amp; <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#abfb24b0a57ffe59f345a7490ce64e63d">hasFunArgsList</a>(F))</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; {</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="comment">// connect actual and formal param</span></div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAG.html#a1aedb70211aa31a4741615e611d64397">PAG::PAGNodeList</a>&amp; csArgList = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a4dac2dc4756bf3f84e6fa034a8b906da">getCallSiteArgsList</a>(callBlockNode);</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAG.html#a1aedb70211aa31a4741615e611d64397">PAG::PAGNodeList</a>&amp; funArgList = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#ad2ff2e50f8e5234979ba9cacc6a6268c">getFunArgsList</a>(F);</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="comment">//Go through the fixed parameters.</span></div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; args:&quot;</span>);</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; PAG::PAGNodeList::const_iterator funArgIt = funArgList.begin(), funArgEit = funArgList.end();</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; PAG::PAGNodeList::const_iterator csArgIt = csArgList.begin(), csArgEit = csArgList.end();</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keywordflow">for</span> (; funArgIt != funArgEit; ++csArgIt, ++funArgIt)</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; {</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="comment">//Some programs (e.g. Linux kernel) leave unneeded parameters empty.</span></div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keywordflow">if</span> (csArgIt == csArgEit)</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; {</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#adbfc4364261f019dc6cf33234a5177d2">DAndersen</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; !! not enough args\n&quot;</span>);</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; }</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *cs_arg = *csArgIt ;</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *fun_arg = *funArgIt;</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160;</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="keywordflow">if</span> (cs_arg-&gt;<a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>() &amp;&amp; fun_arg-&gt;<a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>())</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; {</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#adbfc4364261f019dc6cf33234a5177d2">DAndersen</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process actual parm &quot;</span> &lt;&lt; cs_arg-&gt;<a class="code" href="classSVF_1_1PAGNode.html#a2a9a5feb62138307b0b6f901cb5e0e0f">toString</a>() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcAA = <a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(cs_arg-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstFA = <a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(fun_arg-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57">addCopyEdge</a>(srcAA, dstFA))</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; {</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; cpySrcNodes.insert(std::make_pair(srcAA,dstFA));</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; }</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; }</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; }</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160;</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="comment">//Any remaining actual args must be varargs.</span></div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordflow">if</span> (F-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a3c1fa59deae39c75c72c97e47326d982">isVarArg</a>())</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; {</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vaF = <a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#aa7b2e9e0b3386e27af8413be4c36f519">getVarargNode</a>(F));</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n varargs:&quot;</span>);</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keywordflow">for</span> (; csArgIt != csArgEit; ++csArgIt)</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; {</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *cs_arg = *csArgIt;</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keywordflow">if</span> (cs_arg-&gt;<a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>())</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; {</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnAA = <a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(cs_arg-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57">addCopyEdge</a>(vnAA,vaF))</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; {</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; cpySrcNodes.insert(std::make_pair(vnAA,vaF));</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; }</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; }</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; }</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; }</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keywordflow">if</span>(csArgIt != csArgEit)</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; {</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">&quot;too many args to non-vararg func.&quot;</span>);</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">&quot;(&quot;</span> + <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>()) + <span class="stringliteral">&quot;)&quot;</span>);</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; }</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; }</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160;}</div><div class="ttc" id="classSVF_1_1PAG_html_a838a9fa42e68b5f32853f73fa05a7c09"><div class="ttname"><a href="classSVF_1_1PAG.html#a838a9fa42e68b5f32853f73fa05a7c09">SVF::PAG::getFunRet</a></div><div class="ttdeci">const PAGNode * getFunRet(const SVFFunction *func) const</div><div class="ttdoc">Get function return list. </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00426">PAG.h:426</a></div></div>
1381
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00676">676</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1382
+ <div class="fragment"><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160;{</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(F);</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#adbfc4364261f019dc6cf33234a5177d2">DAndersen</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">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#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>() &lt;&lt; <span class="stringliteral">&quot; to callee &quot;</span> &lt;&lt; *F &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160;</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* callBlockNode = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#ad274c5c15ac51cea5d09ad08febe8c14">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <a class="code" href="classSVF_1_1RetBlockNode.html">RetBlockNode</a>* retBlockNode = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#ad274c5c15ac51cea5d09ad08febe8c14">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a6d66c83cb1656d0f8ec8b8b65a9e9c41">getRetBlockNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160;</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a19b96a872d9096037f20e25122e469ea">SVFUtil::isHeapAllocExtFunViaRet</a>(F) &amp;&amp; <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a0ed3da89d9cba90888e04969dc43f5a3">callsiteHasRet</a>(retBlockNode))</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; {</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a7b1b9e9b25b5643440aca77e23a8de07">heapAllocatorViaIndCall</a>(cs,cpySrcNodes);</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; }</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160;</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a08f1b7f68a267b6cc5ad9cb3f1efede0">funHasRet</a>(F) &amp;&amp; <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a0ed3da89d9cba90888e04969dc43f5a3">callsiteHasRet</a>(retBlockNode))</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; {</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* cs_return = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#ae455de4db007a5bebffd3a9c16e0b107">getCallSiteRet</a>(retBlockNode);</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* fun_return = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a838a9fa42e68b5f32853f73fa05a7c09">getFunRet</a>(F);</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">if</span> (cs_return-&gt;<a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>() &amp;&amp; fun_return-&gt;<a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>())</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; {</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = <a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(cs_return-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret = <a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(fun_return-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57">addCopyEdge</a>(srcret, dstrec))</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; {</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; cpySrcNodes.insert(std::make_pair(srcret,dstrec));</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; }</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; }</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; {</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#adbfc4364261f019dc6cf33234a5177d2">DAndersen</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;not a pointer ignored\n&quot;</span>);</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; }</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; }</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a157df68295822a17ad07a850a230bae1">hasCallSiteArgsMap</a>(callBlockNode) &amp;&amp; <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#abfb24b0a57ffe59f345a7490ce64e63d">hasFunArgsList</a>(F))</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; {</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="comment">// connect actual and formal param</span></div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAG.html#a1aedb70211aa31a4741615e611d64397">PAG::PAGNodeList</a>&amp; csArgList = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a4dac2dc4756bf3f84e6fa034a8b906da">getCallSiteArgsList</a>(callBlockNode);</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAG.html#a1aedb70211aa31a4741615e611d64397">PAG::PAGNodeList</a>&amp; funArgList = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#ad2ff2e50f8e5234979ba9cacc6a6268c">getFunArgsList</a>(F);</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="comment">//Go through the fixed parameters.</span></div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; args:&quot;</span>);</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; PAG::PAGNodeList::const_iterator funArgIt = funArgList.begin(), funArgEit = funArgList.end();</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; PAG::PAGNodeList::const_iterator csArgIt = csArgList.begin(), csArgEit = csArgList.end();</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="keywordflow">for</span> (; funArgIt != funArgEit; ++csArgIt, ++funArgIt)</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; {</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="comment">//Some programs (e.g. Linux kernel) leave unneeded parameters empty.</span></div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keywordflow">if</span> (csArgIt == csArgEit)</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; {</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#adbfc4364261f019dc6cf33234a5177d2">DAndersen</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; !! not enough args\n&quot;</span>);</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; }</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *cs_arg = *csArgIt ;</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *fun_arg = *funArgIt;</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keywordflow">if</span> (cs_arg-&gt;<a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>() &amp;&amp; fun_arg-&gt;<a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>())</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; {</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#adbfc4364261f019dc6cf33234a5177d2">DAndersen</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process actual parm &quot;</span> &lt;&lt; cs_arg-&gt;<a class="code" href="classSVF_1_1PAGNode.html#a2a9a5feb62138307b0b6f901cb5e0e0f">toString</a>() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcAA = <a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(cs_arg-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstFA = <a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(fun_arg-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57">addCopyEdge</a>(srcAA, dstFA))</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; {</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; cpySrcNodes.insert(std::make_pair(srcAA,dstFA));</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; }</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; }</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; }</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160;</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="comment">//Any remaining actual args must be varargs.</span></div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="keywordflow">if</span> (F-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#a3c1fa59deae39c75c72c97e47326d982">isVarArg</a>())</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; {</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vaF = <a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#aa7b2e9e0b3386e27af8413be4c36f519">getVarargNode</a>(F));</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n varargs:&quot;</span>);</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keywordflow">for</span> (; csArgIt != csArgEit; ++csArgIt)</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; {</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a> *cs_arg = *csArgIt;</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; <span class="keywordflow">if</span> (cs_arg-&gt;<a class="code" href="classSVF_1_1PAGNode.html#afa5f1f6b3b7ffff2c417d58db7ef6bc2">isPointer</a>())</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; {</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnAA = <a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(cs_arg-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57">addCopyEdge</a>(vnAA,vaF))</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; {</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; cpySrcNodes.insert(std::make_pair(vnAA,vaF));</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; }</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; }</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; }</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; }</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="keywordflow">if</span>(csArgIt != csArgEit)</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; {</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">&quot;too many args to non-vararg func.&quot;</span>);</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">&quot;(&quot;</span> + <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>()) + <span class="stringliteral">&quot;)&quot;</span>);</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; }</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; }</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160;}</div><div class="ttc" id="classSVF_1_1PAG_html_a838a9fa42e68b5f32853f73fa05a7c09"><div class="ttname"><a href="classSVF_1_1PAG.html#a838a9fa42e68b5f32853f73fa05a7c09">SVF::PAG::getFunRet</a></div><div class="ttdeci">const PAGNode * getFunRet(const SVFFunction *func) const</div><div class="ttdoc">Get function return list. </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00426">PAG.h:426</a></div></div>
1340
1383
  <div class="ttc" id="classSVF_1_1PAG_html_a157df68295822a17ad07a850a230bae1"><div class="ttname"><a href="classSVF_1_1PAG.html#a157df68295822a17ad07a850a230bae1">SVF::PAG::hasCallSiteArgsMap</a></div><div class="ttdeci">bool hasCallSiteArgsMap(const CallBlockNode *cs) const</div><div class="ttdoc">Callsite has argument list. </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00388">PAG.h:388</a></div></div>
1341
1384
  <div class="ttc" id="classSVF_1_1PAGNode_html_a2a9a5feb62138307b0b6f901cb5e0e0f"><div class="ttname"><a href="classSVF_1_1PAGNode.html#a2a9a5feb62138307b0b6f901cb5e0e0f">SVF::PAGNode::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdef"><b>Definition:</b> <a href="PAG_8cpp_source.html#l00046">PAG.cpp:46</a></div></div>
1342
1385
  <div class="ttc" id="classSVF_1_1PAG_html_ad274c5c15ac51cea5d09ad08febe8c14"><div class="ttname"><a href="classSVF_1_1PAG.html#ad274c5c15ac51cea5d09ad08febe8c14">SVF::PAG::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00135">PAG.h:135</a></div></div>
@@ -1349,7 +1392,7 @@ Additional Inherited Members</h2></td></tr>
1349
1392
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a077caa1b10ab84d101d79fc7ea50db2d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">SVF::SVFUtil::writeWrnMsg</a></div><div class="ttdeci">void writeWrnMsg(std::string msg)</div><div class="ttdoc">Writes a message run through wrnMsg. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00069">SVFUtil.cpp:69</a></div></div>
1350
1393
  <div class="ttc" id="classSVF_1_1PAG_html_a4dac2dc4756bf3f84e6fa034a8b906da"><div class="ttname"><a href="classSVF_1_1PAG.html#a4dac2dc4756bf3f84e6fa034a8b906da">SVF::PAG::getCallSiteArgsList</a></div><div class="ttdeci">const PAGNodeList &amp; getCallSiteArgsList(const CallBlockNode *cs) const</div><div class="ttdoc">Get callsite argument list. </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00398">PAG.h:398</a></div></div>
1351
1394
  <div class="ttc" id="classSVF_1_1PAG_html_aa7b2e9e0b3386e27af8413be4c36f519"><div class="ttname"><a href="classSVF_1_1PAG.html#aa7b2e9e0b3386e27af8413be4c36f519">SVF::PAG::getVarargNode</a></div><div class="ttdeci">NodeID getVarargNode(const SVFFunction *func) const</div><div class="ttdoc">getVarargNode - Return the unique node representing the variadic argument of a variadic function...</div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00609">PAG.h:609</a></div></div>
1352
- <div class="ttc" id="classSVF_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#l00631">Andersen.cpp:631</a></div></div>
1395
+ <div class="ttc" id="classSVF_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#l00646">Andersen.cpp:646</a></div></div>
1353
1396
  <div class="ttc" id="classSVF_1_1PAG_html_a0ed3da89d9cba90888e04969dc43f5a3"><div class="ttname"><a href="classSVF_1_1PAG.html#a0ed3da89d9cba90888e04969dc43f5a3">SVF::PAG::callsiteHasRet</a></div><div class="ttdeci">bool callsiteHasRet(const RetBlockNode *cs) const</div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00416">PAG.h:416</a></div></div>
1354
1397
  <div class="ttc" id="classSVF_1_1RetBlockNode_html"><div class="ttname"><a href="classSVF_1_1RetBlockNode.html">SVF::RetBlockNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00459">ICFGNode.h:459</a></div></div>
1355
1398
  <div class="ttc" id="classSVF_1_1PAG_html_a1aedb70211aa31a4741615e611d64397"><div class="ttname"><a href="classSVF_1_1PAG.html#a1aedb70211aa31a4741615e611d64397">SVF::PAG::PAGNodeList</a></div><div class="ttdeci">std::vector&lt; const PAGNode * &gt; PAGNodeList</div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00057">PAG.h:57</a></div></div>
@@ -1399,8 +1442,8 @@ Additional Inherited Members</h2></td></tr>
1399
1442
 
1400
1443
  <p>Reimplemented from <a class="el" href="classSVF_1_1BVDataPTAImpl.html#a8d6cea841b6ded0f80ef2b5784e9b752">SVF::BVDataPTAImpl</a>.</p>
1401
1444
 
1402
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00817">817</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1403
- <div class="fragment"><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160;{</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="keywordflow">for</span> (OrderedNodeSet::iterator nIter = this-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().begin();</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; nIter != this-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().end(); ++nIter)</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; {</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1PointerAnalysis.html#aaf6b41f44da3a4caea1fa395e41edf71">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(*nIter);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#aaf6b41f44da3a4caea1fa395e41edf71">getPAG</a>()-&gt;isValidTopLevelPtr(node))</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; {</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts = this-&gt;<a class="code" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">getPts</a>(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">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><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160;</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <span class="keywordflow">if</span> (pts.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; {</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\tPointsTo: {empty}\n\n&quot;</span>;</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; }</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; {</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\tPointsTo: { &quot;</span>;</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160;</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; multiset&lt;Size_t&gt; line;</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</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#aa53962e561399bf493d1f2b9137356f6">begin</a>(), eit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>();</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; {</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; line.insert(*it);</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; }</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; <span class="keywordflow">for</span> (multiset&lt;Size_t&gt;::const_iterator it = line.begin(); it != line.end(); ++it)</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; *it &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n\n&quot;</span>;</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; }</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; }</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; }</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160;</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>().flush();</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160;}</div><div class="ttc" id="classSVF_1_1PointerAnalysis_html_a60b111647e000cc983aa52513f90afbc"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">SVF::PointerAnalysis::getAllValidPtrs</a></div><div class="ttdeci">OrderedNodeSet &amp; getAllValidPtrs()</div><div class="ttdoc">Get all Valid Pointers for resolution. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00222">PointerAnalysis.h:222</a></div></div>
1445
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00851">851</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1446
+ <div class="fragment"><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160;{</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <span class="keywordflow">for</span> (OrderedNodeSet::iterator nIter = this-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().begin();</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; nIter != this-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().end(); ++nIter)</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; {</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1PointerAnalysis.html#aaf6b41f44da3a4caea1fa395e41edf71">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(*nIter);</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#aaf6b41f44da3a4caea1fa395e41edf71">getPAG</a>()-&gt;isValidTopLevelPtr(node))</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; {</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts = this-&gt;<a class="code" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">getPts</a>(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">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><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160;</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="keywordflow">if</span> (pts.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; {</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\tPointsTo: {empty}\n\n&quot;</span>;</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; }</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; {</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\tPointsTo: { &quot;</span>;</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160;</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; multiset&lt;Size_t&gt; line;</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</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#aa53962e561399bf493d1f2b9137356f6">begin</a>(), eit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>();</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; {</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; line.insert(*it);</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; }</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <span class="keywordflow">for</span> (multiset&lt;Size_t&gt;::const_iterator it = line.begin(); it != line.end(); ++it)</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; *it &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n\n&quot;</span>;</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; }</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; }</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; }</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160;</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>().flush();</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160;}</div><div class="ttc" id="classSVF_1_1PointerAnalysis_html_a60b111647e000cc983aa52513f90afbc"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">SVF::PointerAnalysis::getAllValidPtrs</a></div><div class="ttdeci">OrderedNodeSet &amp; getAllValidPtrs()</div><div class="ttdoc">Get all Valid Pointers for resolution. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00222">PointerAnalysis.h:222</a></div></div>
1404
1447
  <div class="ttc" id="classSVF_1_1Andersen_html_a187285a5bdf9422d9188b2b11b667639"><div class="ttname"><a href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">SVF::Andersen::getPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getPts(NodeID id)</div><div class="ttdoc">Operation of points-to set. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00222">Andersen.h:222</a></div></div>
1405
1448
  <div class="ttc" id="classSVF_1_1PointsTo_1_1PointsToIterator_html"><div class="ttname"><a href="classSVF_1_1PointsTo_1_1PointsToIterator.html">SVF::PointsTo::PointsToIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00174">PointsTo.h:174</a></div></div>
1406
1449
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_aaf6b41f44da3a4caea1fa395e41edf71"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#aaf6b41f44da3a4caea1fa395e41edf71">SVF::PointerAnalysis::getPAG</a></div><div class="ttdeci">PAG * getPAG() const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00205">PointerAnalysis.h:205</a></div></div>
@@ -1473,8 +1516,15 @@ Additional Inherited Members</h2></td></tr>
1473
1516
 
1474
1517
  <p>Reimplemented from <a class="el" href="classSVF_1_1AndersenBase.html#a28a1c3571cdee5e05004b29ace364e67">SVF::AndersenBase</a>.</p>
1475
1518
 
1476
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00188">188</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1477
- <div class="fragment"><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;{</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="comment">// sanitizePts();</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a28a1c3571cdee5e05004b29ace364e67">AndersenBase::finalize</a>();</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;}</div><div class="ttc" id="classSVF_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#l00080">Andersen.cpp:80</a></div></div>
1519
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00191">191</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1520
+ <div class="fragment"><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;{</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="comment">// TODO: check -stat too.</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="comment">// TODO: broken</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a8459d43a21bcf8a50fc55d14fcf5a81e">Options::ClusterAnder</a>)</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; {</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;std::string, std::string&gt;</a> stats;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#acfdb43f20bbcababc928cc4df93a8483">PTDataTy</a> *ptd = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>();</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="comment">// TODO: should we use liveOnly?</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="comment">// TODO: parameterise final arg.</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</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#a6c1885ddfcc72604463f7c4ea94d2f74">PointsTo::getCurrentBestNodeMapping</a>(), ptd-&gt;getAllPts(<span class="keyword">true</span>), stats, <span class="keyword">true</span>);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</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><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; }</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="comment">// sanitizePts();</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a28a1c3571cdee5e05004b29ace364e67">AndersenBase::finalize</a>();</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;}</div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ae94cea78b71fb75837ee2a17b5ed0e81"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">SVF::BVDataPTAImpl::getPTDataTy</a></div><div class="ttdeci">PTDataTy * getPTDataTy() const</div><div class="ttdoc">Get points-to data structure. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00161">PointerAnalysisImpl.h:161</a></div></div>
1521
+ <div class="ttc" id="classSVF_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#l00560">NodeIDAllocator.cpp:560</a></div></div>
1522
+ <div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map&lt; Key, Value, Hash, KeyEqual, Allocator &gt; Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00101">SVFBasicTypes.h:101</a></div></div>
1523
+ <div class="ttc" id="classSVF_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#l00678">NodeIDAllocator.cpp:678</a></div></div>
1524
+ <div class="ttc" id="classSVF_1_1PointsTo_html_a6c1885ddfcc72604463f7c4ea94d2f74"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a6c1885ddfcc72604463f7c4ea94d2f74">SVF::PointsTo::getCurrentBestNodeMapping</a></div><div class="ttdeci">static MappingPtr getCurrentBestNodeMapping(void)</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00345">PointsTo.cpp:345</a></div></div>
1525
+ <div class="ttc" id="classSVF_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#l00080">Andersen.cpp:80</a></div></div>
1526
+ <div class="ttc" id="classSVF_1_1Options_html_a8459d43a21bcf8a50fc55d14fcf5a81e"><div class="ttname"><a href="classSVF_1_1Options.html#a8459d43a21bcf8a50fc55d14fcf5a81e">SVF::Options::ClusterAnder</a></div><div class="ttdeci">static const llvm::cl::opt&lt; bool &gt; ClusterAnder</div><div class="ttdoc">Whether to stage Andersen&amp;#39;s with Steensgaard and cluster based on that data. </div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00037">Options.h:37</a></div></div>
1527
+ <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_acfdb43f20bbcababc928cc4df93a8483"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#acfdb43f20bbcababc928cc4df93a8483">SVF::BVDataPTAImpl::PTDataTy</a></div><div class="ttdeci">PTData&lt; NodeID, NodeSet, NodeID, PointsTo &gt; PTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00046">PointerAnalysisImpl.h:46</a></div></div>
1478
1528
  </div><!-- fragment -->
1479
1529
  </div>
1480
1530
  </div>
@@ -1577,18 +1627,18 @@ Additional Inherited Members</h2></td></tr>
1577
1627
 
1578
1628
  <p>Reimplemented in <a class="el" href="classSVF_1_1AndersenHLCD.html#a9582cde6cbb510f3fb624109f8ea8f63">SVF::AndersenHLCD</a>, <a class="el" href="classSVF_1_1AndersenLCD.html#a139d80e25fe713194f719581915d36d5">SVF::AndersenLCD</a>, <a class="el" href="classSVF_1_1AndersenWaveDiff.html#ad5c85a28967cc3f62e663dc00a8aa8c9">SVF::AndersenWaveDiff</a>, and <a class="el" href="classSVF_1_1AndersenSCD.html#aa0a496376f7bea2c417ef83c51d19a61">SVF::AndersenSCD</a>.</p>
1579
1629
 
1580
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00220">220</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1581
- <div class="fragment"><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;{</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a7e26ac6fb40684694f7ff2aadfde8bc7">computeDiffPts</a>(nodeId);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1Andersen.html#a106691684d8e7a69157d423393d83d66">getDiffPts</a>(nodeId).<a class="code" href="cuddInt_8c.html#a5beb39637a978181c7c17714ac96672e">empty</a>())</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge : node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#ab77173aa8af6155b569f20ff0cdcec72">getCopyOutEdges</a>())</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#ac4afe532655c3f311143ebbe15175ca2">processCopy</a>(nodeId, edge);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge : node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a19d3d2c996ba821227a836717e5443c8">getGepOutEdges</a>())</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepCGEdge.html">GepCGEdge</a>* gepEdge = SVFUtil::dyn_cast&lt;GepCGEdge&gt;(edge))</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#aa697d4a6fe09dd6e50abb09228b3567f">processGep</a>(nodeId, gepEdge);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;}</div><div class="ttc" id="classSVF_1_1Andersen_html_a106691684d8e7a69157d423393d83d66"><div class="ttname"><a href="classSVF_1_1Andersen.html#a106691684d8e7a69157d423393d83d66">SVF::Andersen::getDiffPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getDiffPts(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00282">Andersen.h:282</a></div></div>
1630
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00235">235</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1631
+ <div class="fragment"><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;{</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a7e26ac6fb40684694f7ff2aadfde8bc7">computeDiffPts</a>(nodeId);</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1Andersen.html#a106691684d8e7a69157d423393d83d66">getDiffPts</a>(nodeId).<a class="code" href="cuddInt_8c.html#a5beb39637a978181c7c17714ac96672e">empty</a>())</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; {</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge : node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#ab77173aa8af6155b569f20ff0cdcec72">getCopyOutEdges</a>())</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#ac4afe532655c3f311143ebbe15175ca2">processCopy</a>(nodeId, edge);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge : node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a19d3d2c996ba821227a836717e5443c8">getGepOutEdges</a>())</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepCGEdge.html">GepCGEdge</a>* gepEdge = SVFUtil::dyn_cast&lt;GepCGEdge&gt;(edge))</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#aa697d4a6fe09dd6e50abb09228b3567f">processGep</a>(nodeId, gepEdge);</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; }</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;}</div><div class="ttc" id="classSVF_1_1Andersen_html_a106691684d8e7a69157d423393d83d66"><div class="ttname"><a href="classSVF_1_1Andersen.html#a106691684d8e7a69157d423393d83d66">SVF::Andersen::getDiffPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getDiffPts(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00282">Andersen.h:282</a></div></div>
1582
1632
  <div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
1583
1633
  <div class="ttc" id="classSVF_1_1GepCGEdge_html"><div class="ttname"><a href="classSVF_1_1GepCGEdge.html">SVF::GepCGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00225">ConsGEdge.h:225</a></div></div>
1584
1634
  <div class="ttc" id="cuddInt_8c_html_a5beb39637a978181c7c17714ac96672e"><div class="ttname"><a href="cuddInt_8c.html#a5beb39637a978181c7c17714ac96672e">empty</a></div><div class="ttdeci">static DdNode * empty</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8c_source.html#l28567">cuddInt.c:28567</a></div></div>
1585
- <div class="ttc" id="classSVF_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#l00337">Andersen.cpp:337</a></div></div>
1635
+ <div class="ttc" id="classSVF_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#l00352">Andersen.cpp:352</a></div></div>
1586
1636
  <div class="ttc" id="classSVF_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#l00128">ConsGNode.h:128</a></div></div>
1587
1637
  <div class="ttc" id="classSVF_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#l00136">ConsGNode.h:136</a></div></div>
1588
1638
  <div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00164">GenericGraph.h:164</a></div></div>
1589
1639
  <div class="ttc" id="classSVF_1_1Andersen_html_a7e26ac6fb40684694f7ff2aadfde8bc7"><div class="ttname"><a href="classSVF_1_1Andersen.html#a7e26ac6fb40684694f7ff2aadfde8bc7">SVF::Andersen::computeDiffPts</a></div><div class="ttdeci">virtual void computeDiffPts(NodeID id)</div><div class="ttdoc">Handle diff points-to set. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00274">Andersen.h:274</a></div></div>
1590
1640
  <div class="ttc" id="classSVF_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>
1591
- <div class="ttc" id="classSVF_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#l00357">Andersen.cpp:357</a></div></div>
1641
+ <div class="ttc" id="classSVF_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#l00372">Andersen.cpp:372</a></div></div>
1592
1642
  </div><!-- fragment -->
1593
1643
  </div>
1594
1644
  </div>
@@ -1619,17 +1669,17 @@ Additional Inherited Members</h2></td></tr>
1619
1669
 
1620
1670
  <p>Reimplemented in <a class="el" href="classSVF_1_1AndersenSCD.html#a7ae683eb8c607a0e742b44e3019b8cbc">SVF::AndersenSCD</a>.</p>
1621
1671
 
1622
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00240">240</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1623
- <div class="fragment"><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;{</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> piter = <a class="code" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">getPts</a>(nodeId).begin(), epiter =</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">getPts</a>(nodeId).end(); piter != epiter; ++piter)</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = *piter;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="comment">// handle load</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">ConstraintNode::const_iterator</a> it = node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#af69c7e623ab5a36644b6aeabaa1a1e28">outgoingLoadsBegin</a>(),</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; eit = node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a134e8ed040d7749c2b9a02662115f746">outgoingLoadsEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#abc20264231658b99998bc4af1f03a4de">processLoad</a>(ptd, *it))</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(ptd);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; }</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="comment">// handle store</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">ConstraintNode::const_iterator</a> it = node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a5a90b39f9e5769bde44a673806270714">incomingStoresBegin</a>(),</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; eit = node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a8d58f5224728bb6811f12c94826167f6">incomingStoresEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; {</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#ac262d42d45dc6130cb031d5b0ed1f024">processStore</a>(ptd, *it))</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>((*it)-&gt;getSrcID());</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; }</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; }</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;}</div><div class="ttc" id="classSVF_1_1WPASolver_html_a4af1c3e72f5af96c4facff672108da58"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">SVF::WPASolver::pushIntoWorklist</a></div><div class="ttdeci">virtual void pushIntoWorklist(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00163">WPASolver.h:163</a></div></div>
1672
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00255">255</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1673
+ <div class="fragment"><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;{</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> piter = <a class="code" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">getPts</a>(nodeId).begin(), epiter =</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">getPts</a>(nodeId).end(); piter != epiter; ++piter)</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; {</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = *piter;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="comment">// handle load</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">ConstraintNode::const_iterator</a> it = node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#af69c7e623ab5a36644b6aeabaa1a1e28">outgoingLoadsBegin</a>(),</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; eit = node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a134e8ed040d7749c2b9a02662115f746">outgoingLoadsEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#abc20264231658b99998bc4af1f03a4de">processLoad</a>(ptd, *it))</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(ptd);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; }</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="comment">// handle store</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">ConstraintNode::const_iterator</a> it = node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a5a90b39f9e5769bde44a673806270714">incomingStoresBegin</a>(),</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; eit = node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a8d58f5224728bb6811f12c94826167f6">incomingStoresEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; {</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#ac262d42d45dc6130cb031d5b0ed1f024">processStore</a>(ptd, *it))</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>((*it)-&gt;getSrcID());</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;}</div><div class="ttc" id="classSVF_1_1WPASolver_html_a4af1c3e72f5af96c4facff672108da58"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">SVF::WPASolver::pushIntoWorklist</a></div><div class="ttdeci">virtual void pushIntoWorklist(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00163">WPASolver.h:163</a></div></div>
1624
1674
  <div class="ttc" id="classSVF_1_1Andersen_html_a187285a5bdf9422d9188b2b11b667639"><div class="ttname"><a href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">SVF::Andersen::getPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getPts(NodeID id)</div><div class="ttdoc">Operation of points-to set. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00222">Andersen.h:222</a></div></div>
1625
1675
  <div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
1626
1676
  <div class="ttc" id="classSVF_1_1PointsTo_1_1PointsToIterator_html"><div class="ttname"><a href="classSVF_1_1PointsTo_1_1PointsToIterator.html">SVF::PointsTo::PointsToIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00174">PointsTo.h:174</a></div></div>
1627
1677
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_ab1868f04de44f6fe1e9ac14f3d4ee56b"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">SVF::ConstraintNode::const_iterator</a></div><div class="ttdeci">ConstraintEdge::ConstraintEdgeSetTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00045">ConsGNode.h:45</a></div></div>
1628
1678
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_a5a90b39f9e5769bde44a673806270714"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a5a90b39f9e5769bde44a673806270714">SVF::ConstraintNode::incomingStoresBegin</a></div><div class="ttdeci">const_iterator incomingStoresBegin() const</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00283">ConsGNode.h:283</a></div></div>
1629
- <div class="ttc" id="classSVF_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#l00317">Andersen.cpp:317</a></div></div>
1679
+ <div class="ttc" id="classSVF_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#l00332">Andersen.cpp:332</a></div></div>
1630
1680
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_a8d58f5224728bb6811f12c94826167f6"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a8d58f5224728bb6811f12c94826167f6">SVF::ConstraintNode::incomingStoresEnd</a></div><div class="ttdeci">const_iterator incomingStoresEnd() const</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00287">ConsGNode.h:287</a></div></div>
1631
1681
  <div class="ttc" id="classSVF_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#l00262">ConsGNode.h:262</a></div></div>
1632
- <div class="ttc" id="classSVF_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#l00297">Andersen.cpp:297</a></div></div>
1682
+ <div class="ttc" id="classSVF_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#l00312">Andersen.cpp:312</a></div></div>
1633
1683
  <div class="ttc" id="classSVF_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#l00258">ConsGNode.h:258</a></div></div>
1634
1684
  <div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00164">GenericGraph.h:164</a></div></div>
1635
1685
  </div><!-- fragment -->
@@ -1669,8 +1719,8 @@ Additional Inherited Members</h2></td></tr>
1669
1719
  </table>
1670
1720
  </div><div class="memdoc">
1671
1721
 
1672
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00631">631</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1673
- <div class="fragment"><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160;{</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<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><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <a class="code" href="classSVF_1_1RetBlockNode.html">RetBlockNode</a>* retBlockNode = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#ad274c5c15ac51cea5d09ad08febe8c14">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a6d66c83cb1656d0f8ec8b8b65a9e9c41">getRetBlockNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* cs_return = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#ae455de4db007a5bebffd3a9c16e0b107">getCallSiteRet</a>(retBlockNode);</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret;</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; CallSite2DummyValPN::const_iterator it = <a class="code" href="classSVF_1_1Andersen.html#a2f88b6035ecb480f7d11afe6bc666541">callsite2DummyValPN</a>.find(cs);</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">if</span>(it != <a class="code" href="classSVF_1_1Andersen.html#a2f88b6035ecb480f7d11afe6bc666541">callsite2DummyValPN</a>.end())</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; {</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; srcret = <a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(it-&gt;second);</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; }</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; {</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> valNode = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a98b4beb7f17585173072f3bbea20eeb6">addDummyValNode</a>();</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> objNode = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#adc044907b992993b5ad803d1acf0dd91">addDummyObjNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a9b7d53a345875e4e6c72eb23ac6475de">getType</a>());</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(valNode,objNode);</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a2f88b6035ecb480f7d11afe6bc666541">callsite2DummyValPN</a>.insert(std::make_pair(cs,valNode));</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a5ea9c47d232f36b66d985f979f33293b">addConstraintNode</a>(<span class="keyword">new</span> <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>(valNode),valNode);</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a5ea9c47d232f36b66d985f979f33293b">addConstraintNode</a>(<span class="keyword">new</span> <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>(objNode),objNode);</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; srcret = valNode;</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; }</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160;</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = <a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(cs_return-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57">addCopyEdge</a>(srcret, dstrec))</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; cpySrcNodes.insert(std::make_pair(srcret,dstrec));</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160;}</div><div class="ttc" id="classSVF_1_1PAG_html_ad274c5c15ac51cea5d09ad08febe8c14"><div class="ttname"><a href="classSVF_1_1PAG.html#ad274c5c15ac51cea5d09ad08febe8c14">SVF::PAG::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00135">PAG.h:135</a></div></div>
1722
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00646">646</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1723
+ <div class="fragment"><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160;{</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<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><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <a class="code" href="classSVF_1_1RetBlockNode.html">RetBlockNode</a>* retBlockNode = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#ad274c5c15ac51cea5d09ad08febe8c14">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a6d66c83cb1656d0f8ec8b8b65a9e9c41">getRetBlockNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* cs_return = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#ae455de4db007a5bebffd3a9c16e0b107">getCallSiteRet</a>(retBlockNode);</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; CallSite2DummyValPN::const_iterator it = <a class="code" href="classSVF_1_1Andersen.html#a2f88b6035ecb480f7d11afe6bc666541">callsite2DummyValPN</a>.find(cs);</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keywordflow">if</span>(it != <a class="code" href="classSVF_1_1Andersen.html#a2f88b6035ecb480f7d11afe6bc666541">callsite2DummyValPN</a>.end())</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; {</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; srcret = <a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(it-&gt;second);</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; }</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; {</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> valNode = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a98b4beb7f17585173072f3bbea20eeb6">addDummyValNode</a>();</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> objNode = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#adc044907b992993b5ad803d1acf0dd91">addDummyObjNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a9b7d53a345875e4e6c72eb23ac6475de">getType</a>());</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(valNode,objNode);</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a2f88b6035ecb480f7d11afe6bc666541">callsite2DummyValPN</a>.insert(std::make_pair(cs,valNode));</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a5ea9c47d232f36b66d985f979f33293b">addConstraintNode</a>(<span class="keyword">new</span> <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>(valNode),valNode);</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a5ea9c47d232f36b66d985f979f33293b">addConstraintNode</a>(<span class="keyword">new</span> <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>(objNode),objNode);</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; srcret = valNode;</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; }</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160;</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = <a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(cs_return-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57">addCopyEdge</a>(srcret, dstrec))</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; cpySrcNodes.insert(std::make_pair(srcret,dstrec));</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;}</div><div class="ttc" id="classSVF_1_1PAG_html_ad274c5c15ac51cea5d09ad08febe8c14"><div class="ttname"><a href="classSVF_1_1PAG.html#ad274c5c15ac51cea5d09ad08febe8c14">SVF::PAG::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00135">PAG.h:135</a></div></div>
1674
1724
  <div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
1675
1725
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
1676
1726
  <div class="ttc" id="classSVF_1_1Andersen_html_a2f88b6035ecb480f7d11afe6bc666541"><div class="ttname"><a href="classSVF_1_1Andersen.html#a2f88b6035ecb480f7d11afe6bc666541">SVF::Andersen::callsite2DummyValPN</a></div><div class="ttdeci">CallSite2DummyValPN callsite2DummyValPN</div><div class="ttdoc">Map an instruction to a dummy obj which created at an indirect callsite, which invokes a heap allocat...</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00267">Andersen.h:267</a></div></div>
@@ -1726,12 +1776,14 @@ Additional Inherited Members</h2></td></tr>
1726
1776
  <p>Reimplemented in <a class="el" href="classSVF_1_1AndersenHLCD.html#a5926080868429040f5142843f01a2a5c">SVF::AndersenHLCD</a>, <a class="el" href="classSVF_1_1AndersenHCD.html#aaac9cac7fc5696adb585abd9d67f8c14">SVF::AndersenHCD</a>, and <a class="el" href="classSVF_1_1AndersenSFR.html#a3b255068b3ea53041af94fd373a53bd4">SVF::AndersenSFR</a>.</p>
1727
1777
 
1728
1778
  <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00175">175</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1729
- <div class="fragment"><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;{</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a95c0b2f501dff61993cd43a5cab89e17">resetData</a>();</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a69161671030b51c5a6cf139325aa098f">setDiffOpt</a>(<a class="code" href="classSVF_1_1Options.html#acf7262c0b0bd91e6dab56a631be51206">Options::PtsDiff</a>);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a2b13f14db90ad59a61dff097bcdf8fb7">setPWCOpt</a>(<a class="code" href="classSVF_1_1Options.html#a69579e2f37962afdbb292a36782511ed">Options::MergePWC</a>);</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a891816407a4c6346f56bc01a67b78aac">AndersenBase::initialize</a>();</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#adccf6acf63abc9cafc92b2148396fd10">processAllAddr</a>();</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;}</div><div class="ttc" id="classSVF_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#l00064">Andersen.cpp:64</a></div></div>
1779
+ <div class="fragment"><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;{</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a95c0b2f501dff61993cd43a5cab89e17">resetData</a>();</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a69161671030b51c5a6cf139325aa098f">setDiffOpt</a>(<a class="code" href="classSVF_1_1Options.html#acf7262c0b0bd91e6dab56a631be51206">Options::PtsDiff</a>);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a2b13f14db90ad59a61dff097bcdf8fb7">setPWCOpt</a>(<a class="code" href="classSVF_1_1Options.html#a69579e2f37962afdbb292a36782511ed">Options::MergePWC</a>);</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a891816407a4c6346f56bc01a67b78aac">AndersenBase::initialize</a>();</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a8459d43a21bcf8a50fc55d14fcf5a81e">Options::ClusterAnder</a>) <a class="code" href="classSVF_1_1Andersen.html#ae1ff65a411f2c4dfee0973ad4af48daf">cluster</a>();</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#adccf6acf63abc9cafc92b2148396fd10">processAllAddr</a>();</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;}</div><div class="ttc" id="classSVF_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#l00064">Andersen.cpp:64</a></div></div>
1730
1780
  <div class="ttc" id="classSVF_1_1Andersen_html_a95c0b2f501dff61993cd43a5cab89e17"><div class="ttname"><a href="classSVF_1_1Andersen.html#a95c0b2f501dff61993cd43a5cab89e17">SVF::Andersen::resetData</a></div><div class="ttdeci">void resetData()</div><div class="ttdoc">Reset data. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00182">Andersen.h:182</a></div></div>
1731
1781
  <div class="ttc" id="classSVF_1_1Andersen_html_a2b13f14db90ad59a61dff097bcdf8fb7"><div class="ttname"><a href="classSVF_1_1Andersen.html#a2b13f14db90ad59a61dff097bcdf8fb7">SVF::Andersen::setPWCOpt</a></div><div class="ttdeci">void setPWCOpt(bool flag)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00241">Andersen.h:241</a></div></div>
1782
+ <div class="ttc" id="classSVF_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#l00829">Andersen.cpp:829</a></div></div>
1732
1783
  <div class="ttc" id="classSVF_1_1Options_html_a69579e2f37962afdbb292a36782511ed"><div class="ttname"><a href="classSVF_1_1Options.html#a69579e2f37962afdbb292a36782511ed">SVF::Options::MergePWC</a></div><div class="ttdeci">static const llvm::cl::opt&lt; bool &gt; MergePWC</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00228">Options.h:228</a></div></div>
1784
+ <div class="ttc" id="classSVF_1_1Options_html_a8459d43a21bcf8a50fc55d14fcf5a81e"><div class="ttname"><a href="classSVF_1_1Options.html#a8459d43a21bcf8a50fc55d14fcf5a81e">SVF::Options::ClusterAnder</a></div><div class="ttdeci">static const llvm::cl::opt&lt; bool &gt; ClusterAnder</div><div class="ttdoc">Whether to stage Andersen&amp;#39;s with Steensgaard and cluster based on that data. </div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00037">Options.h:37</a></div></div>
1733
1785
  <div class="ttc" id="classSVF_1_1Options_html_acf7262c0b0bd91e6dab56a631be51206"><div class="ttname"><a href="classSVF_1_1Options.html#acf7262c0b0bd91e6dab56a631be51206">SVF::Options::PtsDiff</a></div><div class="ttdeci">static const llvm::cl::opt&lt; bool &gt; PtsDiff</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00227">Options.h:227</a></div></div>
1734
- <div class="ttc" id="classSVF_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#l00268">Andersen.cpp:268</a></div></div>
1786
+ <div class="ttc" id="classSVF_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#l00283">Andersen.cpp:283</a></div></div>
1735
1787
  <div class="ttc" id="classSVF_1_1Andersen_html_a69161671030b51c5a6cf139325aa098f"><div class="ttname"><a href="classSVF_1_1Andersen.html#a69161671030b51c5a6cf139325aa098f">SVF::Andersen::setDiffOpt</a></div><div class="ttdeci">void setDiffOpt(bool flag)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00255">Andersen.h:255</a></div></div>
1736
1788
  </div><!-- fragment -->
1737
1789
  </div>
@@ -1855,11 +1907,11 @@ Additional Inherited Members</h2></td></tr>
1855
1907
 
1856
1908
  <p>Reimplemented in <a class="el" href="classSVF_1_1AndersenWaveDiff.html#acdc82c72b14e012551a460fa91a634db">SVF::AndersenWaveDiff</a>.</p>
1857
1909
 
1858
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00780">780</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1859
- <div class="fragment"><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160;{</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160;</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">getConstraintNode</a>(nodeId);</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="keywordtype">bool</span> gepInsideScc = <a class="code" href="classSVF_1_1Andersen.html#ae6b1e54a389abc68994219e39539127e">mergeSrcToTgt</a>(nodeId,newRepId);</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="keywordflow">if</span> (gepInsideScc || node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a0ffe4f1ca1a6f70466cc1c6b3b12c90d">isPWCNode</a>())</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a03f9fe8ae7094c39937f47f422276724">setPWCNode</a>(newRepId);</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160;}</div><div class="ttc" id="classSVF_1_1ConstraintGraph_html_a26722666cc8f2fce61bed73f086a0e87"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">SVF::ConstraintGraph::getConstraintNode</a></div><div class="ttdeci">ConstraintNode * getConstraintNode(NodeID id) const</div><div class="ttdoc">Get/add/remove constraint node. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00107">ConsG.h:107</a></div></div>
1910
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00795">795</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1911
+ <div class="fragment"><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160;{</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160;</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">getConstraintNode</a>(nodeId);</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keywordtype">bool</span> gepInsideScc = <a class="code" href="classSVF_1_1Andersen.html#ae6b1e54a389abc68994219e39539127e">mergeSrcToTgt</a>(nodeId,newRepId);</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">if</span> (gepInsideScc || node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a0ffe4f1ca1a6f70466cc1c6b3b12c90d">isPWCNode</a>())</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a03f9fe8ae7094c39937f47f422276724">setPWCNode</a>(newRepId);</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160;}</div><div class="ttc" id="classSVF_1_1ConstraintGraph_html_a26722666cc8f2fce61bed73f086a0e87"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">SVF::ConstraintGraph::getConstraintNode</a></div><div class="ttdeci">ConstraintNode * getConstraintNode(NodeID id) const</div><div class="ttdoc">Get/add/remove constraint node. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00107">ConsG.h:107</a></div></div>
1860
1912
  <div class="ttc" id="classSVF_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#l00094">ConsGNode.h:94</a></div></div>
1861
1913
  <div class="ttc" id="classSVF_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>
1862
- <div class="ttc" id="classSVF_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#l00756">Andersen.cpp:756</a></div></div>
1914
+ <div class="ttc" id="classSVF_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#l00771">Andersen.cpp:771</a></div></div>
1863
1915
  <div class="ttc" id="classSVF_1_1AndersenBase_html_ae21e38a06a4397d11cdd17b0f8f282fd"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">SVF::AndersenBase::consCG</a></div><div class="ttdeci">ConstraintGraph * consCG</div><div class="ttdoc">Constraint Graph. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00149">Andersen.h:149</a></div></div>
1864
1916
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_a03f9fe8ae7094c39937f47f422276724"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a03f9fe8ae7094c39937f47f422276724">SVF::ConstraintGraph::setPWCNode</a></div><div class="ttdeci">void setPWCNode(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00352">ConsG.h:352</a></div></div>
1865
1917
  </div><!-- fragment -->
@@ -1916,13 +1968,13 @@ Additional Inherited Members</h2></td></tr>
1916
1968
  </table>
1917
1969
  </div><div class="memdoc">
1918
1970
 
1919
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00457">457</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1920
- <div class="fragment"><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;{</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a> revTopoOrder;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a> &amp; topoOrder = <a class="code" href="classSVF_1_1WPASolver.html#a37ca8a99b8f83fba796293e6e13b0953">getSCCDetector</a>()-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a6502c0a765ac1653474ffee651949f93">topoNodeStack</a>();</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">while</span> (!topoOrder.empty())</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; {</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> repNodeId = topoOrder.top();</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; topoOrder.pop();</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; revTopoOrder.push(repNodeId);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; subNodes = <a class="code" href="classSVF_1_1WPASolver.html#a37ca8a99b8f83fba796293e6e13b0953">getSCCDetector</a>()-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a6ab5eff6a576e6d8703c1ea29b7f425d">subNodes</a>(repNodeId);</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="comment">// merge sub nodes to rep node</span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a1ba1e1e36af289982146de06cf06ab0a">mergeSccNodes</a>(repNodeId, subNodes);</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; }</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="comment">// restore the topological order for later solving.</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keywordflow">while</span> (!revTopoOrder.empty())</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; {</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = revTopoOrder.top();</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; revTopoOrder.pop();</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; topoOrder.push(nodeId);</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; }</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;}</div><div class="ttc" id="classSVF_1_1SCCDetection_html_a6ab5eff6a576e6d8703c1ea29b7f425d"><div class="ttname"><a href="classSVF_1_1SCCDetection.html#a6ab5eff6a576e6d8703c1ea29b7f425d">SVF::SCCDetection::subNodes</a></div><div class="ttdeci">const NodeBS &amp; subNodes(NodeID n) const</div><div class="ttdoc">get all subnodes in one scc, if size is empty insert itself into the set </div><div class="ttdef"><b>Definition:</b> <a href="SCC_8h_source.html#l00173">SCC.h:173</a></div></div>
1971
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00472">472</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1972
+ <div class="fragment"><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;{</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a> revTopoOrder;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a> &amp; topoOrder = <a class="code" href="classSVF_1_1WPASolver.html#a37ca8a99b8f83fba796293e6e13b0953">getSCCDetector</a>()-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a6502c0a765ac1653474ffee651949f93">topoNodeStack</a>();</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keywordflow">while</span> (!topoOrder.empty())</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; {</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> repNodeId = topoOrder.top();</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; topoOrder.pop();</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; revTopoOrder.push(repNodeId);</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; subNodes = <a class="code" href="classSVF_1_1WPASolver.html#a37ca8a99b8f83fba796293e6e13b0953">getSCCDetector</a>()-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a6ab5eff6a576e6d8703c1ea29b7f425d">subNodes</a>(repNodeId);</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="comment">// merge sub nodes to rep node</span></div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a1ba1e1e36af289982146de06cf06ab0a">mergeSccNodes</a>(repNodeId, subNodes);</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; }</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="comment">// restore the topological order for later solving.</span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">while</span> (!revTopoOrder.empty())</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; {</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = revTopoOrder.top();</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; revTopoOrder.pop();</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; topoOrder.push(nodeId);</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; }</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;}</div><div class="ttc" id="classSVF_1_1SCCDetection_html_a6ab5eff6a576e6d8703c1ea29b7f425d"><div class="ttname"><a href="classSVF_1_1SCCDetection.html#a6ab5eff6a576e6d8703c1ea29b7f425d">SVF::SCCDetection::subNodes</a></div><div class="ttdeci">const NodeBS &amp; subNodes(NodeID n) const</div><div class="ttdoc">get all subnodes in one scc, if size is empty insert itself into the set </div><div class="ttdef"><b>Definition:</b> <a href="SCC_8h_source.html#l00173">SCC.h:173</a></div></div>
1921
1973
  <div class="ttc" id="classSVF_1_1SCCDetection_html_a6502c0a765ac1653474ffee651949f93"><div class="ttname"><a href="classSVF_1_1SCCDetection.html#a6502c0a765ac1653474ffee651949f93">SVF::SCCDetection::topoNodeStack</a></div><div class="ttdeci">GNodeStack &amp; topoNodeStack()</div><div class="ttdef"><b>Definition:</b> <a href="SCC_8h_source.html#l00128">SCC.h:128</a></div></div>
1922
1974
  <div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
1923
1975
  <div class="ttc" id="namespaceSVF_html_a1811127aebdb9c926e39d155e20b3dc0"><div class="ttname"><a href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">SVF::NodeStack</a></div><div class="ttdeci">std::stack&lt; NodeID &gt; NodeStack</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00121">SVFBasicTypes.h:121</a></div></div>
1924
1976
  <div class="ttc" id="classSVF_1_1WPASolver_html_a37ca8a99b8f83fba796293e6e13b0953"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a37ca8a99b8f83fba796293e6e13b0953">SVF::WPASolver::getSCCDetector</a></div><div class="ttdeci">SCC * getSCCDetector() const</div><div class="ttdoc">Get SCC detector. </div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00071">WPASolver.h:71</a></div></div>
1925
- <div class="ttc" id="classSVF_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#l00485">Andersen.cpp:485</a></div></div>
1977
+ <div class="ttc" id="classSVF_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#l00500">Andersen.cpp:500</a></div></div>
1926
1978
  <div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00087">SVFBasicTypes.h:87</a></div></div>
1927
1979
  </div><!-- fragment -->
1928
1980
  </div>
@@ -1964,9 +2016,9 @@ Additional Inherited Members</h2></td></tr>
1964
2016
  <p>Merge sub node in a SCC cycle to their rep node. </p>
1965
2017
  <p>Union points-to of subscc nodes into its rep nodes <a class="el" href="structMove.html">Move</a> incoming/outgoing direct edges of sub node to rep node </p>
1966
2018
 
1967
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00485">485</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
1968
- <div class="fragment"><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;{</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator nodeIt = subNodes.begin(); nodeIt != subNodes.end(); nodeIt++)</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; {</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> subNodeId = *nodeIt;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">if</span> (subNodeId != repNodeId)</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; {</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a36729160041bc3a3e2b0a92b29062848">mergeNodeToRep</a>(subNodeId, repNodeId);</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; }</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; }</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
1969
- <div class="ttc" id="classSVF_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#l00780">Andersen.cpp:780</a></div></div>
2019
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00500">500</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2020
+ <div class="fragment"><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;{</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator nodeIt = subNodes.begin(); nodeIt != subNodes.end(); nodeIt++)</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; {</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> subNodeId = *nodeIt;</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">if</span> (subNodeId != repNodeId)</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; {</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a36729160041bc3a3e2b0a92b29062848">mergeNodeToRep</a>(subNodeId, repNodeId);</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; }</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; }</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
2021
+ <div class="ttc" id="classSVF_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#l00795">Andersen.cpp:795</a></div></div>
1970
2022
  </div><!-- fragment -->
1971
2023
  </div>
1972
2024
  </div>
@@ -2010,11 +2062,11 @@ Additional Inherited Members</h2></td></tr>
2010
2062
 
2011
2063
  <p>Reimplemented in <a class="el" href="classSVF_1_1AndersenHLCD.html#a59da289c87f9ab815a15e0a745bdc31f">SVF::AndersenHLCD</a>, <a class="el" href="classSVF_1_1AndersenLCD.html#ac78efb1e4246c06c64dad1d368ed032d">SVF::AndersenLCD</a>, and <a class="el" href="classSVF_1_1AndersenSFR.html#ac5f406db5610347564fceff4d36f6a6f">SVF::AndersenSFR</a>.</p>
2012
2064
 
2013
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00756">756</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2014
- <div class="fragment"><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160;{</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160;</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="keywordflow">if</span>(nodeId==newRepId)</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160;</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a4baa6fc95d52afa370fc0fabffd42018">updatePropaPts</a>(newRepId, nodeId);</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#ab7dadfd4d810be4863f03ed996b3b3c4">unionPts</a>(newRepId,nodeId);</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">getConstraintNode</a>(nodeId);</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="keywordtype">bool</span> gepInsideScc = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#aabe2861fcbc364e2c8aa8114d4879c39">moveEdgesToRepNode</a>(node, <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">getConstraintNode</a>(newRepId));</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#acd54e3edace1f41511c8f0a6a68dac18">updateNodeRepAndSubs</a>(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(),newRepId);</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160;</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a9e21bc9b86080b4059f0907e9a7b33f3">removeConstraintNode</a>(node);</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160;</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keywordflow">return</span> gepInsideScc;</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;}</div><div class="ttc" id="classSVF_1_1ConstraintGraph_html_a26722666cc8f2fce61bed73f086a0e87"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">SVF::ConstraintGraph::getConstraintNode</a></div><div class="ttdeci">ConstraintNode * getConstraintNode(NodeID id) const</div><div class="ttdoc">Get/add/remove constraint node. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00107">ConsG.h:107</a></div></div>
2065
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00771">771</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2066
+ <div class="fragment"><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160;{</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="keywordflow">if</span>(nodeId==newRepId)</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a4baa6fc95d52afa370fc0fabffd42018">updatePropaPts</a>(newRepId, nodeId);</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#ab7dadfd4d810be4863f03ed996b3b3c4">unionPts</a>(newRepId,nodeId);</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160;</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">getConstraintNode</a>(nodeId);</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="keywordtype">bool</span> gepInsideScc = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#aabe2861fcbc364e2c8aa8114d4879c39">moveEdgesToRepNode</a>(node, <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">getConstraintNode</a>(newRepId));</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160;</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#acd54e3edace1f41511c8f0a6a68dac18">updateNodeRepAndSubs</a>(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(),newRepId);</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160;</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a9e21bc9b86080b4059f0907e9a7b33f3">removeConstraintNode</a>(node);</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160;</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="keywordflow">return</span> gepInsideScc;</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160;}</div><div class="ttc" id="classSVF_1_1ConstraintGraph_html_a26722666cc8f2fce61bed73f086a0e87"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">SVF::ConstraintGraph::getConstraintNode</a></div><div class="ttdeci">ConstraintNode * getConstraintNode(NodeID id) const</div><div class="ttdoc">Get/add/remove constraint node. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00107">ConsG.h:107</a></div></div>
2015
2067
  <div class="ttc" id="classSVF_1_1Andersen_html_ab7dadfd4d810be4863f03ed996b3b3c4"><div class="ttname"><a href="classSVF_1_1Andersen.html#ab7dadfd4d810be4863f03ed996b3b3c4">SVF::Andersen::unionPts</a></div><div class="ttdeci">virtual bool unionPts(NodeID id, const PointsTo &amp;target)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00226">Andersen.h:226</a></div></div>
2016
2068
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_aabe2861fcbc364e2c8aa8114d4879c39"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#aabe2861fcbc364e2c8aa8114d4879c39">SVF::ConstraintGraph::moveEdgesToRepNode</a></div><div class="ttdeci">bool moveEdgesToRepNode(ConstraintNode *node, ConstraintNode *rep)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00283">ConsG.h:283</a></div></div>
2017
- <div class="ttc" id="classSVF_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#l00796">Andersen.cpp:796</a></div></div>
2069
+ <div class="ttc" id="classSVF_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#l00811">Andersen.cpp:811</a></div></div>
2018
2070
  <div class="ttc" id="classSVF_1_1Andersen_html_a4baa6fc95d52afa370fc0fabffd42018"><div class="ttname"><a href="classSVF_1_1Andersen.html#a4baa6fc95d52afa370fc0fabffd42018">SVF::Andersen::updatePropaPts</a></div><div class="ttdeci">void updatePropaPts(NodeID dstId, NodeID srcId)</div><div class="ttdoc">Handle propagated points-to set. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00292">Andersen.h:292</a></div></div>
2019
2071
  <div class="ttc" id="classSVF_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>
2020
2072
  <div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00164">GenericGraph.h:164</a></div></div>
@@ -2050,8 +2102,8 @@ Additional Inherited Members</h2></td></tr>
2050
2102
 
2051
2103
  <p>Reimplemented in <a class="el" href="classSVF_1_1AndersenSCD.html#a52704e25a1e3b30ddf8676811f4e1584">SVF::AndersenSCD</a>.</p>
2052
2104
 
2053
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00282">282</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2054
- <div class="fragment"><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;{</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a70e60ce2e6f4cfd575c6f5c974ca1081">numOfProcessedAddr</a>++;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = addr-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = addr-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>();</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(dst,src))</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(dst);</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;}</div><div class="ttc" id="classSVF_1_1WPASolver_html_a4af1c3e72f5af96c4facff672108da58"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">SVF::WPASolver::pushIntoWorklist</a></div><div class="ttdeci">virtual void pushIntoWorklist(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00163">WPASolver.h:163</a></div></div>
2105
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00297">297</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2106
+ <div class="fragment"><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;{</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a70e60ce2e6f4cfd575c6f5c974ca1081">numOfProcessedAddr</a>++;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = addr-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = addr-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>();</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(dst,src))</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(dst);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;}</div><div class="ttc" id="classSVF_1_1WPASolver_html_a4af1c3e72f5af96c4facff672108da58"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">SVF::WPASolver::pushIntoWorklist</a></div><div class="ttdeci">virtual void pushIntoWorklist(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00163">WPASolver.h:163</a></div></div>
2055
2107
  <div class="ttc" id="classSVF_1_1GenericEdge_html_ad9edb45e74ae675d9da82f5acf02d56e"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">SVF::GenericEdge::getDstID</a></div><div class="ttdeci">NodeID getDstID() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00077">GenericGraph.h:77</a></div></div>
2056
2108
  <div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
2057
2109
  <div class="ttc" id="classSVF_1_1GenericEdge_html_ae6792506a0150a9400d635eceab7f9e7"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">SVF::GenericEdge::getSrcID</a></div><div class="ttdeci">NodeID getSrcID() const</div><div class="ttdoc">get methods of the components </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00073">GenericGraph.h:73</a></div></div>
@@ -2086,11 +2138,11 @@ Additional Inherited Members</h2></td></tr>
2086
2138
  <p>handling various constraints </p>
2087
2139
  <p>Process address edges </p>
2088
2140
 
2089
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00268">268</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2090
- <div class="fragment"><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;{</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">ConstraintGraph::const_iterator</a> nodeIt = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), nodeEit = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); nodeIt != nodeEit; nodeIt++)</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; {</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a> * cgNode = nodeIt-&gt;second;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</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><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#aca095e135edb5d27efe76bb7ee71184c">processAddr</a>(SVFUtil::cast&lt;AddrCGEdge&gt;(*it));</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;}</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
2141
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00283">283</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2142
+ <div class="fragment"><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;{</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">ConstraintGraph::const_iterator</a> nodeIt = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), nodeEit = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); nodeIt != nodeEit; nodeIt++)</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; {</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a> * cgNode = nodeIt-&gt;second;</div><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 = 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><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#aca095e135edb5d27efe76bb7ee71184c">processAddr</a>(SVFUtil::cast&lt;AddrCGEdge&gt;(*it));</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; }</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;}</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
2091
2143
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_ab1868f04de44f6fe1e9ac14f3d4ee56b"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">SVF::ConstraintNode::const_iterator</a></div><div class="ttdeci">ConstraintEdge::ConstraintEdgeSetTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00045">ConsGNode.h:45</a></div></div>
2092
2144
  <div class="ttc" id="classSVF_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#l00338">GenericGraph.h:338</a></div></div>
2093
- <div class="ttc" id="classSVF_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#l00282">Andersen.cpp:282</a></div></div>
2145
+ <div class="ttc" id="classSVF_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#l00297">Andersen.cpp:297</a></div></div>
2094
2146
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a4bef15157423cef48dc7333a803cd27d"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">SVF::GenericGraph::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00369">GenericGraph.h:369</a></div></div>
2095
2147
  <div class="ttc" id="classSVF_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>
2096
2148
  <div class="ttc" id="classSVF_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#l00249">ConsGNode.h:249</a></div></div>
@@ -2136,8 +2188,8 @@ Additional Inherited Members</h2></td></tr>
2136
2188
 
2137
2189
  <p>Reimplemented in <a class="el" href="classSVF_1_1AndersenWaveDiff.html#a3a5b952c0c2fe2be1b9a6fcfeeba2c37">SVF::AndersenWaveDiff</a>.</p>
2138
2190
 
2139
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00337">337</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2140
- <div class="fragment"><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;{</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a9d7b6e602e1764f76583824dddebf985">numOfProcessedCopy</a>++;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((SVFUtil::isa&lt;CopyCGEdge&gt;(edge)) &amp;&amp; <span class="stringliteral">&quot;not copy/call/ret ??&quot;</span>);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</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><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; srcPts = <a class="code" href="classSVF_1_1Andersen.html#a106691684d8e7a69157d423393d83d66">getDiffPts</a>(node);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordtype">bool</span> changed = <a class="code" href="classSVF_1_1Andersen.html#ab7dadfd4d810be4863f03ed996b3b3c4">unionPts</a>(dst, srcPts);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">if</span> (changed)</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(dst);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;}</div><div class="ttc" id="classSVF_1_1WPASolver_html_a4af1c3e72f5af96c4facff672108da58"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">SVF::WPASolver::pushIntoWorklist</a></div><div class="ttdeci">virtual void pushIntoWorklist(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00163">WPASolver.h:163</a></div></div>
2191
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00352">352</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2192
+ <div class="fragment"><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;{</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a9d7b6e602e1764f76583824dddebf985">numOfProcessedCopy</a>++;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((SVFUtil::isa&lt;CopyCGEdge&gt;(edge)) &amp;&amp; <span class="stringliteral">&quot;not copy/call/ret ??&quot;</span>);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</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><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; srcPts = <a class="code" href="classSVF_1_1Andersen.html#a106691684d8e7a69157d423393d83d66">getDiffPts</a>(node);</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordtype">bool</span> changed = <a class="code" href="classSVF_1_1Andersen.html#ab7dadfd4d810be4863f03ed996b3b3c4">unionPts</a>(dst, srcPts);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">if</span> (changed)</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(dst);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;}</div><div class="ttc" id="classSVF_1_1WPASolver_html_a4af1c3e72f5af96c4facff672108da58"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">SVF::WPASolver::pushIntoWorklist</a></div><div class="ttdeci">virtual void pushIntoWorklist(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00163">WPASolver.h:163</a></div></div>
2141
2193
  <div class="ttc" id="classSVF_1_1Andersen_html_a106691684d8e7a69157d423393d83d66"><div class="ttname"><a href="classSVF_1_1Andersen.html#a106691684d8e7a69157d423393d83d66">SVF::Andersen::getDiffPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getDiffPts(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00282">Andersen.h:282</a></div></div>
2142
2194
  <div class="ttc" id="classSVF_1_1Andersen_html_ab7dadfd4d810be4863f03ed996b3b3c4"><div class="ttname"><a href="classSVF_1_1Andersen.html#ab7dadfd4d810be4863f03ed996b3b3c4">SVF::Andersen::unionPts</a></div><div class="ttdeci">virtual bool unionPts(NodeID id, const PointsTo &amp;target)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00226">Andersen.h:226</a></div></div>
2143
2195
  <div class="ttc" id="classSVF_1_1GenericEdge_html_ad9edb45e74ae675d9da82f5acf02d56e"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">SVF::GenericEdge::getDstID</a></div><div class="ttdeci">NodeID getDstID() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00077">GenericGraph.h:77</a></div></div>
@@ -2183,10 +2235,10 @@ Additional Inherited Members</h2></td></tr>
2183
2235
  </div><div class="memdoc">
2184
2236
  <p>Process gep edges src &ndash;gep&ndash;&gt; dst, for each srcPtdNode pts(src) ==&gt; add fieldSrcPtdNode into tmpDstPts union pts(dst) with tmpDstPts </p>
2185
2237
 
2186
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00357">357</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2187
- <div class="fragment"><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;{</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; srcPts = <a class="code" href="classSVF_1_1Andersen.html#a106691684d8e7a69157d423393d83d66">getDiffPts</a>(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>());</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Andersen.html#ac6b1efcaadfed48c226701ecf6bac55e">processGepPts</a>(srcPts, edge);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;}</div><div class="ttc" id="classSVF_1_1Andersen_html_a106691684d8e7a69157d423393d83d66"><div class="ttname"><a href="classSVF_1_1Andersen.html#a106691684d8e7a69157d423393d83d66">SVF::Andersen::getDiffPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getDiffPts(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00282">Andersen.h:282</a></div></div>
2238
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00372">372</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2239
+ <div class="fragment"><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;{</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; srcPts = <a class="code" href="classSVF_1_1Andersen.html#a106691684d8e7a69157d423393d83d66">getDiffPts</a>(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>());</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Andersen.html#ac6b1efcaadfed48c226701ecf6bac55e">processGepPts</a>(srcPts, edge);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;}</div><div class="ttc" id="classSVF_1_1Andersen_html_a106691684d8e7a69157d423393d83d66"><div class="ttname"><a href="classSVF_1_1Andersen.html#a106691684d8e7a69157d423393d83d66">SVF::Andersen::getDiffPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getDiffPts(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00282">Andersen.h:282</a></div></div>
2188
2240
  <div class="ttc" id="classSVF_1_1GenericEdge_html_ae6792506a0150a9400d635eceab7f9e7"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">SVF::GenericEdge::getSrcID</a></div><div class="ttdeci">NodeID getSrcID() const</div><div class="ttdoc">get methods of the components </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00073">GenericGraph.h:73</a></div></div>
2189
- <div class="ttc" id="classSVF_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#l00366">Andersen.cpp:366</a></div></div>
2241
+ <div class="ttc" id="classSVF_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#l00381">Andersen.cpp:381</a></div></div>
2190
2242
  <div class="ttc" id="classSVF_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#l00027">PointsTo.h:27</a></div></div>
2191
2243
  </div><!-- fragment -->
2192
2244
  </div>
@@ -2226,8 +2278,8 @@ Additional Inherited Members</h2></td></tr>
2226
2278
  </div><div class="memdoc">
2227
2279
  <p>Compute points-to for gep edges </p>
2228
2280
 
2229
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00366">366</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2230
- <div class="fragment"><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;{</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a25de7638a692832f0d4727815ff270f6">numOfProcessedGep</a>++;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> tmpDstPts;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;VariantGepCGEdge&gt;(edge))</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; {</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="comment">// If a pointer is connected by a variant gep edge,</span></div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="comment">// then set this memory object to be field insensitive,</span></div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="comment">// unless the object is a black hole/constant.</span></div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; {</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a8ba74f82c1e796f2888ba34bc8355ce9">isBlkObjOrConstantObj</a>(o))</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; {</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; tmpDstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; }</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(o))</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; {</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#ac5683fe2e24b393ccc5cb6d8bc92cf2b">setObjFieldInsensitive</a>(o);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a19e69dabc1f5d16129bfedc81e6e7ceb">addNodeToBeCollapsed</a>(<a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a2337fa70dc5b0b13dbba4cd776404c6b">getBaseObjNode</a>(o));</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; }</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="comment">// Add the field-insensitive node into pts.</span></div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseId = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a5fbbfb7b935e0b8867f7beab32ab7763">getFIObjNode</a>(o);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; tmpDstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(baseId);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; }</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; }</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</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><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; {</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="comment">// TODO: after the node is set to field insensitive, handling invariant</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="comment">// gep edge may lose precision because offsets here are ignored, and the</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="comment">// base object is always returned.</span></div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; {</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a8ba74f82c1e796f2888ba34bc8355ce9">isBlkObjOrConstantObj</a>(o))</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; {</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; tmpDstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; }</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1Andersen.html#af42fe6aeacfd31bbef7f5c80c8cf6173">matchType</a>(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>(), o, normalGepEdge)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fieldSrcPtdNode = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a4a42759f8a39ff4495c8691f3c87e443">getGepObjNode</a>(o, normalGepEdge-&gt;getLocationSet());</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; tmpDstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(fieldSrcPtdNode);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a85cc81a4f9399e9a23372fa2658325a6">addTypeForGepObjNode</a>(fieldSrcPtdNode, normalGepEdge);</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; }</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; }</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; {</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Andersen::processGepPts: New type GEP edge type?&quot;</span>);</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; }</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</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><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#ab7dadfd4d810be4863f03ed996b3b3c4">unionPts</a>(dstId, tmpDstPts))</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; {</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(dstId);</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;}</div><div class="ttc" id="classSVF_1_1ConstraintGraph_html_a4a42759f8a39ff4495c8691f3c87e443"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a4a42759f8a39ff4495c8691f3c87e443">SVF::ConstraintGraph::getGepObjNode</a></div><div class="ttdeci">NodeID getGepObjNode(NodeID id, const LocationSet &amp;ls)</div><div class="ttdoc">Get a field of a memory object. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00327">ConsG.h:327</a></div></div>
2281
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00381">381</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2282
+ <div class="fragment"><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;{</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a25de7638a692832f0d4727815ff270f6">numOfProcessedGep</a>++;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> tmpDstPts;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;VariantGepCGEdge&gt;(edge))</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; {</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="comment">// If a pointer is connected by a variant gep edge,</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="comment">// then set this memory object to be field insensitive,</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="comment">// unless the object is a black hole/constant.</span></div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; {</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a8ba74f82c1e796f2888ba34bc8355ce9">isBlkObjOrConstantObj</a>(o))</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; {</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; tmpDstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; }</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(o))</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; {</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#ac5683fe2e24b393ccc5cb6d8bc92cf2b">setObjFieldInsensitive</a>(o);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a19e69dabc1f5d16129bfedc81e6e7ceb">addNodeToBeCollapsed</a>(<a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a2337fa70dc5b0b13dbba4cd776404c6b">getBaseObjNode</a>(o));</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; }</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="comment">// Add the field-insensitive node into pts.</span></div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseId = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a5fbbfb7b935e0b8867f7beab32ab7763">getFIObjNode</a>(o);</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; tmpDstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(baseId);</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; }</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; }</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</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><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; {</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="comment">// TODO: after the node is set to field insensitive, handling invariant</span></div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="comment">// gep edge may lose precision because offsets here are ignored, and the</span></div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="comment">// base object is always returned.</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; {</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a8ba74f82c1e796f2888ba34bc8355ce9">isBlkObjOrConstantObj</a>(o))</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; {</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; tmpDstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1Andersen.html#af42fe6aeacfd31bbef7f5c80c8cf6173">matchType</a>(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>(), o, normalGepEdge)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fieldSrcPtdNode = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a4a42759f8a39ff4495c8691f3c87e443">getGepObjNode</a>(o, normalGepEdge-&gt;getLocationSet());</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; tmpDstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(fieldSrcPtdNode);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a85cc81a4f9399e9a23372fa2658325a6">addTypeForGepObjNode</a>(fieldSrcPtdNode, normalGepEdge);</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; }</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; }</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; {</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Andersen::processGepPts: New type GEP edge type?&quot;</span>);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; }</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</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><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#ab7dadfd4d810be4863f03ed996b3b3c4">unionPts</a>(dstId, tmpDstPts))</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(dstId);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;}</div><div class="ttc" id="classSVF_1_1ConstraintGraph_html_a4a42759f8a39ff4495c8691f3c87e443"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a4a42759f8a39ff4495c8691f3c87e443">SVF::ConstraintGraph::getGepObjNode</a></div><div class="ttdeci">NodeID getGepObjNode(NodeID id, const LocationSet &amp;ls)</div><div class="ttdoc">Get a field of a memory object. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00327">ConsG.h:327</a></div></div>
2231
2283
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_a8ba74f82c1e796f2888ba34bc8355ce9"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a8ba74f82c1e796f2888ba34bc8355ce9">SVF::ConstraintGraph::isBlkObjOrConstantObj</a></div><div class="ttdeci">bool isBlkObjOrConstantObj(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00309">ConsG.h:309</a></div></div>
2232
2284
  <div class="ttc" id="classSVF_1_1WPASolver_html_a4af1c3e72f5af96c4facff672108da58"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">SVF::WPASolver::pushIntoWorklist</a></div><div class="ttdeci">virtual void pushIntoWorklist(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00163">WPASolver.h:163</a></div></div>
2233
2285
  <div class="ttc" id="classSVF_1_1Andersen_html_ab7dadfd4d810be4863f03ed996b3b3c4"><div class="ttname"><a href="classSVF_1_1Andersen.html#ab7dadfd4d810be4863f03ed996b3b3c4">SVF::Andersen::unionPts</a></div><div class="ttdeci">virtual bool unionPts(NodeID id, const PointsTo &amp;target)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00226">Andersen.h:226</a></div></div>
@@ -2240,7 +2292,7 @@ Additional Inherited Members</h2></td></tr>
2240
2292
  <div class="ttc" id="classSVF_1_1Andersen_html_af42fe6aeacfd31bbef7f5c80c8cf6173"><div class="ttname"><a href="classSVF_1_1Andersen.html#af42fe6aeacfd31bbef7f5c80c8cf6173">SVF::Andersen::matchType</a></div><div class="ttdeci">virtual bool matchType(NodeID, NodeID, const NormalGepCGEdge *)</div><div class="ttdoc">match types for Gep Edges </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00405">Andersen.h:405</a></div></div>
2241
2293
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_ac5683fe2e24b393ccc5cb6d8bc92cf2b"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ac5683fe2e24b393ccc5cb6d8bc92cf2b">SVF::PointerAnalysis::setObjFieldInsensitive</a></div><div class="ttdeci">void setObjFieldInsensitive(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00365">PointerAnalysis.h:365</a></div></div>
2242
2294
  <div class="ttc" id="classSVF_1_1Andersen_html_a85cc81a4f9399e9a23372fa2658325a6"><div class="ttname"><a href="classSVF_1_1Andersen.html#a85cc81a4f9399e9a23372fa2658325a6">SVF::Andersen::addTypeForGepObjNode</a></div><div class="ttdeci">virtual void addTypeForGepObjNode(NodeID, const NormalGepCGEdge *)</div><div class="ttdoc">add type for newly created GepObjNode </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00410">Andersen.h:410</a></div></div>
2243
- <div class="ttc" id="classSVF_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#l00137">PointsTo.cpp:137</a></div></div>
2295
+ <div class="ttc" id="classSVF_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#l00149">PointsTo.cpp:149</a></div></div>
2244
2296
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_a2337fa70dc5b0b13dbba4cd776404c6b"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a2337fa70dc5b0b13dbba4cd776404c6b">SVF::ConstraintGraph::getBaseObjNode</a></div><div class="ttdeci">NodeID getBaseObjNode(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00317">ConsG.h:317</a></div></div>
2245
2297
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a25de7638a692832f0d4727815ff270f6"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a25de7638a692832f0d4727815ff270f6">SVF::AndersenBase::numOfProcessedGep</a></div><div class="ttdeci">static Size_t numOfProcessedGep</div><div class="ttdoc">Number of processed Copy edge. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00130">Andersen.h:130</a></div></div>
2246
2298
  <div class="ttc" id="classSVF_1_1AndersenBase_html_ae21e38a06a4397d11cdd17b0f8f282fd"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">SVF::AndersenBase::consCG</a></div><div class="ttdeci">ConstraintGraph * consCG</div><div class="ttdoc">Constraint Graph. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00149">Andersen.h:149</a></div></div>
@@ -2286,8 +2338,8 @@ Additional Inherited Members</h2></td></tr>
2286
2338
  <p>Process load edges src &ndash;load&ndash;&gt; dst, node pts(src) ==&gt; node&ndash;copy&ndash;&gt;dst </p>
2287
2339
  <p>TODO: New copy edges are also added for black hole obj node to make gcc in spec 2000 pass the flow-sensitive analysis. Try to handle black hole obj in an appropiate way. </p>
2288
2340
 
2289
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00297">297</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2290
- <div class="fragment"><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;{</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;<span class="comment">// if (pag-&gt;isBlkObjOrConstantObj(node) || isNonPointerObj(node))</span></div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a5382518f3bc9c3bbb3148b9499ae5ae2">isConstantObj</a>(node) || <a class="code" href="classSVF_1_1PointerAnalysis.html#a9d3b20c9883d734537fb98b57b5372b9">isNonPointerObj</a>(node))</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a5f1b0711583aa8947dfb4619658f1904">numOfProcessedLoad</a>++;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = load-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57">addCopyEdge</a>(node, dst);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;}</div><div class="ttc" id="classSVF_1_1PointerAnalysis_html_a9d3b20c9883d734537fb98b57b5372b9"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a9d3b20c9883d734537fb98b57b5372b9">SVF::PointerAnalysis::isNonPointerObj</a></div><div class="ttdeci">bool isNonPointerObj(NodeID ptd) const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00320">PointerAnalysis.h:320</a></div></div>
2341
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00312">312</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2342
+ <div class="fragment"><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;{</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;<span class="comment">// if (pag-&gt;isBlkObjOrConstantObj(node) || isNonPointerObj(node))</span></div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a5382518f3bc9c3bbb3148b9499ae5ae2">isConstantObj</a>(node) || <a class="code" href="classSVF_1_1PointerAnalysis.html#a9d3b20c9883d734537fb98b57b5372b9">isNonPointerObj</a>(node))</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a5f1b0711583aa8947dfb4619658f1904">numOfProcessedLoad</a>++;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = load-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57">addCopyEdge</a>(node, dst);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;}</div><div class="ttc" id="classSVF_1_1PointerAnalysis_html_a9d3b20c9883d734537fb98b57b5372b9"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a9d3b20c9883d734537fb98b57b5372b9">SVF::PointerAnalysis::isNonPointerObj</a></div><div class="ttdeci">bool isNonPointerObj(NodeID ptd) const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00320">PointerAnalysis.h:320</a></div></div>
2291
2343
  <div class="ttc" id="classSVF_1_1GenericEdge_html_ad9edb45e74ae675d9da82f5acf02d56e"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">SVF::GenericEdge::getDstID</a></div><div class="ttdeci">NodeID getDstID() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00077">GenericGraph.h:77</a></div></div>
2292
2344
  <div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
2293
2345
  <div class="ttc" id="classSVF_1_1PAG_html_a5382518f3bc9c3bbb3148b9499ae5ae2"><div class="ttname"><a href="classSVF_1_1PAG.html#a5382518f3bc9c3bbb3148b9499ae5ae2">SVF::PAG::isConstantObj</a></div><div class="ttdeci">bool isConstantObj(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00666">PAG.h:666</a></div></div>
@@ -2328,17 +2380,17 @@ Additional Inherited Members</h2></td></tr>
2328
2380
 
2329
2381
  <p>Reimplemented in <a class="el" href="classSVF_1_1AndersenWaveDiff.html#afa1055cda6c910b24480505efd205895">SVF::AndersenWaveDiff</a>.</p>
2330
2382
 
2331
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00199">199</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2332
- <div class="fragment"><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;{</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="comment">// sub nodes do not need to be processed</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(nodeId) != nodeId)</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">getConstraintNode</a>(nodeId);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordtype">double</span> insertStart = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a0f32ba8cb1109c257552fa775a007ffd">handleLoadStore</a>(node);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordtype">double</span> insertEnd = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a9fe738f1e11c80006d540f246a80bfdf">timeOfProcessLoadStore</a> += (insertEnd - insertStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordtype">double</span> propStart = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#ab069683dd6ca563113efbde2813ab35e">handleCopyGep</a>(node);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordtype">double</span> propEnd = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#aae14de6fbca9280d8d0290326aa493f0">timeOfProcessCopyGep</a> += (propEnd - propStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;}</div><div class="ttc" id="classSVF_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#l00142">Andersen.h:142</a></div></div>
2383
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00214">214</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2384
+ <div class="fragment"><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;{</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="comment">// sub nodes do not need to be processed</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(nodeId) != nodeId)</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">getConstraintNode</a>(nodeId);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordtype">double</span> insertStart = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a0f32ba8cb1109c257552fa775a007ffd">handleLoadStore</a>(node);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordtype">double</span> insertEnd = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a9fe738f1e11c80006d540f246a80bfdf">timeOfProcessLoadStore</a> += (insertEnd - insertStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordtype">double</span> propStart = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#ab069683dd6ca563113efbde2813ab35e">handleCopyGep</a>(node);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordtype">double</span> propEnd = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#aae14de6fbca9280d8d0290326aa493f0">timeOfProcessCopyGep</a> += (propEnd - propStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;}</div><div class="ttc" id="classSVF_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#l00142">Andersen.h:142</a></div></div>
2333
2385
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_a26722666cc8f2fce61bed73f086a0e87"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a26722666cc8f2fce61bed73f086a0e87">SVF::ConstraintGraph::getConstraintNode</a></div><div class="ttdeci">ConstraintNode * getConstraintNode(NodeID id) const</div><div class="ttdoc">Get/add/remove constraint node. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00107">ConsG.h:107</a></div></div>
2334
2386
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5ec3d9bf1fc81346c9df29638daedc0f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">SVF::PointerAnalysis::stat</a></div><div class="ttdeci">PTAStat * stat</div><div class="ttdoc">Statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00155">PointerAnalysis.h:155</a></div></div>
2335
2387
  <div class="ttc" id="classSVF_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>
2336
2388
  <div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00171">SVFBasicTypes.h:171</a></div></div>
2337
- <div class="ttc" id="classSVF_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#l00240">Andersen.cpp:240</a></div></div>
2389
+ <div class="ttc" id="classSVF_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#l00255">Andersen.cpp:255</a></div></div>
2338
2390
  <div class="ttc" id="classSVF_1_1AndersenBase_html_ae21e38a06a4397d11cdd17b0f8f282fd"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">SVF::AndersenBase::consCG</a></div><div class="ttdeci">ConstraintGraph * consCG</div><div class="ttdoc">Constraint Graph. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00149">Andersen.h:149</a></div></div>
2339
2391
  <div class="ttc" id="classSVF_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#l00143">Andersen.h:143</a></div></div>
2340
2392
  <div class="ttc" id="classSVF_1_1Andersen_html_aad706e332847e6b0892350a05028ba30"><div class="ttname"><a href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">SVF::Andersen::sccRepNode</a></div><div class="ttdeci">NodeID sccRepNode(NodeID id) const</div><div class="ttdoc">SCC methods. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00211">Andersen.h:211</a></div></div>
2341
- <div class="ttc" id="classSVF_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#l00220">Andersen.cpp:220</a></div></div>
2393
+ <div class="ttc" id="classSVF_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#l00235">Andersen.cpp:235</a></div></div>
2342
2394
  <div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00113">PTAStat.cpp:113</a></div></div>
2343
2395
  </div><!-- fragment -->
2344
2396
  </div>
@@ -2379,8 +2431,8 @@ Additional Inherited Members</h2></td></tr>
2379
2431
  <p>Process store edges src &ndash;store&ndash;&gt; dst, node pts(dst) ==&gt; src&ndash;copy&ndash;&gt;node </p>
2380
2432
  <p>TODO: New copy edges are also added for black hole obj node to make gcc in spec 2000 pass the flow-sensitive analysis. Try to handle black hole obj in an appropiate way </p>
2381
2433
 
2382
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00317">317</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2383
- <div class="fragment"><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;{</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;<span class="comment">// if (pag-&gt;isBlkObjOrConstantObj(node) || isNonPointerObj(node))</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a5382518f3bc9c3bbb3148b9499ae5ae2">isConstantObj</a>(node) || <a class="code" href="classSVF_1_1PointerAnalysis.html#a9d3b20c9883d734537fb98b57b5372b9">isNonPointerObj</a>(node))</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ae18183a5d8ebd46fcdb9246bd643b150">numOfProcessedStore</a>++;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</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><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57">addCopyEdge</a>(src, node);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;}</div><div class="ttc" id="classSVF_1_1PointerAnalysis_html_a9d3b20c9883d734537fb98b57b5372b9"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a9d3b20c9883d734537fb98b57b5372b9">SVF::PointerAnalysis::isNonPointerObj</a></div><div class="ttdeci">bool isNonPointerObj(NodeID ptd) const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00320">PointerAnalysis.h:320</a></div></div>
2434
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00332">332</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2435
+ <div class="fragment"><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;{</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;<span class="comment">// if (pag-&gt;isBlkObjOrConstantObj(node) || isNonPointerObj(node))</span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a5382518f3bc9c3bbb3148b9499ae5ae2">isConstantObj</a>(node) || <a class="code" href="classSVF_1_1PointerAnalysis.html#a9d3b20c9883d734537fb98b57b5372b9">isNonPointerObj</a>(node))</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ae18183a5d8ebd46fcdb9246bd643b150">numOfProcessedStore</a>++;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</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><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57">addCopyEdge</a>(src, node);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;}</div><div class="ttc" id="classSVF_1_1PointerAnalysis_html_a9d3b20c9883d734537fb98b57b5372b9"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a9d3b20c9883d734537fb98b57b5372b9">SVF::PointerAnalysis::isNonPointerObj</a></div><div class="ttdeci">bool isNonPointerObj(NodeID ptd) const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00320">PointerAnalysis.h:320</a></div></div>
2384
2436
  <div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
2385
2437
  <div class="ttc" id="classSVF_1_1GenericEdge_html_ae6792506a0150a9400d635eceab7f9e7"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">SVF::GenericEdge::getSrcID</a></div><div class="ttdeci">NodeID getSrcID() const</div><div class="ttdoc">get methods of the components </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00073">GenericGraph.h:73</a></div></div>
2386
2438
  <div class="ttc" id="classSVF_1_1PAG_html_a5382518f3bc9c3bbb3148b9499ae5ae2"><div class="ttname"><a href="classSVF_1_1PAG.html#a5382518f3bc9c3bbb3148b9499ae5ae2">SVF::PAG::isConstantObj</a></div><div class="ttdeci">bool isConstantObj(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00666">PAG.h:666</a></div></div>
@@ -2523,15 +2575,15 @@ Additional Inherited Members</h2></td></tr>
2523
2575
 
2524
2576
  <p>Reimplemented in <a class="el" href="classSVF_1_1AndersenLCD.html#a078a58b3b3f18cca4e09ff5a9a8ed791">SVF::AndersenLCD</a>, <a class="el" href="classSVF_1_1AndersenWaveDiffWithType.html#aef46713e8407e5963c5c8f04ff1545d1">SVF::AndersenWaveDiffWithType</a>, and <a class="el" href="classSVF_1_1AndersenSCD.html#a70f69baf47587b742b5013a63a3ce593">SVF::AndersenSCD</a>.</p>
2525
2577
 
2526
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00580">580</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2527
- <div class="fragment"><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;{</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a6da6e1231a46fde6925493045b8b2490">numOfSCCDetection</a>++;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160;</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keywordtype">double</span> sccStart = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#aaa932894d00b69cfa741f9987a9cc6b8">WPAConstraintSolver::SCCDetect</a>();</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordtype">double</span> sccEnd = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a6b7d0e57f741c446d0bf178939960143">timeOfSCCDetection</a> += (sccEnd - sccStart)/<a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160;</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordtype">double</span> mergeStart = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#ac86ffd334568e4df5c08b3c827018bef">mergeSccCycle</a>();</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160;</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="keywordtype">double</span> mergeEnd = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160;</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a02c5a50b214d36921e1404784e76704d">timeOfSCCMerges</a> += (mergeEnd - mergeStart)/<a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160;</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1WPASolver.html#a37ca8a99b8f83fba796293e6e13b0953">getSCCDetector</a>()-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a6502c0a765ac1653474ffee651949f93">topoNodeStack</a>();</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;}</div><div class="ttc" id="classSVF_1_1SCCDetection_html_a6502c0a765ac1653474ffee651949f93"><div class="ttname"><a href="classSVF_1_1SCCDetection.html#a6502c0a765ac1653474ffee651949f93">SVF::SCCDetection::topoNodeStack</a></div><div class="ttdeci">GNodeStack &amp; topoNodeStack()</div><div class="ttdef"><b>Definition:</b> <a href="SCC_8h_source.html#l00128">SCC.h:128</a></div></div>
2578
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00595">595</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2579
+ <div class="fragment"><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;{</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a6da6e1231a46fde6925493045b8b2490">numOfSCCDetection</a>++;</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordtype">double</span> sccStart = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#aaa932894d00b69cfa741f9987a9cc6b8">WPAConstraintSolver::SCCDetect</a>();</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keywordtype">double</span> sccEnd = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160;</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a6b7d0e57f741c446d0bf178939960143">timeOfSCCDetection</a> += (sccEnd - sccStart)/<a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordtype">double</span> mergeStart = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#ac86ffd334568e4df5c08b3c827018bef">mergeSccCycle</a>();</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keywordtype">double</span> mergeEnd = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160;</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a02c5a50b214d36921e1404784e76704d">timeOfSCCMerges</a> += (mergeEnd - mergeStart)/<a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1WPASolver.html#a37ca8a99b8f83fba796293e6e13b0953">getSCCDetector</a>()-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a6502c0a765ac1653474ffee651949f93">topoNodeStack</a>();</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160;}</div><div class="ttc" id="classSVF_1_1SCCDetection_html_a6502c0a765ac1653474ffee651949f93"><div class="ttname"><a href="classSVF_1_1SCCDetection.html#a6502c0a765ac1653474ffee651949f93">SVF::SCCDetection::topoNodeStack</a></div><div class="ttdeci">GNodeStack &amp; topoNodeStack()</div><div class="ttdef"><b>Definition:</b> <a href="SCC_8h_source.html#l00128">SCC.h:128</a></div></div>
2528
2580
  <div class="ttc" id="classSVF_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#l00091">WPASolver.h:91</a></div></div>
2529
2581
  <div class="ttc" id="classSVF_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#l00138">Andersen.h:138</a></div></div>
2530
2582
  <div class="ttc" id="classSVF_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#l00137">Andersen.h:137</a></div></div>
2531
2583
  <div class="ttc" id="classSVF_1_1WPASolver_html_a37ca8a99b8f83fba796293e6e13b0953"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a37ca8a99b8f83fba796293e6e13b0953">SVF::WPASolver::getSCCDetector</a></div><div class="ttdeci">SCC * getSCCDetector() const</div><div class="ttdoc">Get SCC detector. </div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00071">WPASolver.h:71</a></div></div>
2532
2584
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5ec3d9bf1fc81346c9df29638daedc0f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">SVF::PointerAnalysis::stat</a></div><div class="ttdeci">PTAStat * stat</div><div class="ttdoc">Statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00155">PointerAnalysis.h:155</a></div></div>
2533
2585
  <div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00171">SVFBasicTypes.h:171</a></div></div>
2534
- <div class="ttc" id="classSVF_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#l00457">Andersen.cpp:457</a></div></div>
2586
+ <div class="ttc" id="classSVF_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#l00472">Andersen.cpp:472</a></div></div>
2535
2587
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a6da6e1231a46fde6925493045b8b2490"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a6da6e1231a46fde6925493045b8b2490">SVF::AndersenBase::numOfSCCDetection</a></div><div class="ttdeci">static Size_t numOfSCCDetection</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00136">Andersen.h:136</a></div></div>
2536
2588
  <div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00113">PTAStat.cpp:113</a></div></div>
2537
2589
  </div><!-- fragment -->
@@ -2810,15 +2862,15 @@ Additional Inherited Members</h2></td></tr>
2810
2862
 
2811
2863
  <p>Reimplemented in <a class="el" href="classSVF_1_1AndersenSCD.html#a512c636bdaafe6a3ac8f0cc29392c573">SVF::AndersenSCD</a>.</p>
2812
2864
 
2813
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00604">604</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2814
- <div class="fragment"><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;{</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keywordtype">double</span> cgUpdateStart = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#aa9661d26d1ae9c829a9296d1b6d874f4">CallEdgeMap</a> newEdges;</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a9830d4676fd424b633f8e4d918734296">onTheFlyCallGraphSolve</a>(callsites,newEdges);</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <a class="code" href="namespaceSVF.html#ac82022f3f81965c3ce9b26c299f537a7">NodePairSet</a> cpySrcNodes; </div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="keywordflow">for</span>(CallEdgeMap::iterator it = newEdges.begin(), eit = newEdges.end(); it!=eit; ++it )</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; {</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(it-&gt;first-&gt;getCallSite());</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keywordflow">for</span>(FunctionSet::iterator cit = it-&gt;second.begin(), ecit = it-&gt;second.end(); cit!=ecit; ++cit)</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; {</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a5a90e681e46c52ffd3debf02910c7ecf">connectCaller2CalleeParams</a>(cs,*cit,cpySrcNodes);</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; }</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; }</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordflow">for</span>(NodePairSet::iterator it = cpySrcNodes.begin(), eit = cpySrcNodes.end(); it!=eit; ++it)</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; {</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(it-&gt;first);</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; }</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keywordtype">double</span> cgUpdateEnd = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a2afb49f513c9534fd051117b59dc056b">timeOfUpdateCallGraph</a> += (cgUpdateEnd - cgUpdateStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keywordflow">return</span> (!newEdges.empty());</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160;}</div><div class="ttc" id="classSVF_1_1WPASolver_html_a4af1c3e72f5af96c4facff672108da58"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">SVF::WPASolver::pushIntoWorklist</a></div><div class="ttdeci">virtual void pushIntoWorklist(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00163">WPASolver.h:163</a></div></div>
2865
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00619">619</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2866
+ <div class="fragment"><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;{</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordtype">double</span> cgUpdateStart = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#aa9661d26d1ae9c829a9296d1b6d874f4">CallEdgeMap</a> newEdges;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a9830d4676fd424b633f8e4d918734296">onTheFlyCallGraphSolve</a>(callsites,newEdges);</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <a class="code" href="namespaceSVF.html#ac82022f3f81965c3ce9b26c299f537a7">NodePairSet</a> cpySrcNodes; </div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keywordflow">for</span>(CallEdgeMap::iterator it = newEdges.begin(), eit = newEdges.end(); it!=eit; ++it )</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; {</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(it-&gt;first-&gt;getCallSite());</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="keywordflow">for</span>(FunctionSet::iterator cit = it-&gt;second.begin(), ecit = it-&gt;second.end(); cit!=ecit; ++cit)</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; {</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a5a90e681e46c52ffd3debf02910c7ecf">connectCaller2CalleeParams</a>(cs,*cit,cpySrcNodes);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; }</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; }</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">for</span>(NodePairSet::iterator it = cpySrcNodes.begin(), eit = cpySrcNodes.end(); it!=eit; ++it)</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; {</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(it-&gt;first);</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; }</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="keywordtype">double</span> cgUpdateEnd = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#a2afb49f513c9534fd051117b59dc056b">timeOfUpdateCallGraph</a> += (cgUpdateEnd - cgUpdateStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keywordflow">return</span> (!newEdges.empty());</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160;}</div><div class="ttc" id="classSVF_1_1WPASolver_html_a4af1c3e72f5af96c4facff672108da58"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">SVF::WPASolver::pushIntoWorklist</a></div><div class="ttdeci">virtual void pushIntoWorklist(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00163">WPASolver.h:163</a></div></div>
2815
2867
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a9830d4676fd424b633f8e4d918734296"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a9830d4676fd424b633f8e4d918734296">SVF::BVDataPTAImpl::onTheFlyCallGraphSolve</a></div><div class="ttdeci">virtual void onTheFlyCallGraphSolve(const CallSiteToFunPtrMap &amp;callsites, CallEdgeMap &amp;newEdges)</div><div class="ttdoc">On the fly call graph construction. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00374">PointerAnalysisImpl.cpp:374</a></div></div>
2816
2868
  <div class="ttc" id="namespaceSVF_html_ac82022f3f81965c3ce9b26c299f537a7"><div class="ttname"><a href="namespaceSVF.html#ac82022f3f81965c3ce9b26c299f537a7">SVF::NodePairSet</a></div><div class="ttdeci">Set&lt; NodePair &gt; NodePairSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00117">SVFBasicTypes.h:117</a></div></div>
2817
2869
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_aa9661d26d1ae9c829a9296d1b6d874f4"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#aa9661d26d1ae9c829a9296d1b6d874f4">SVF::PointerAnalysis::CallEdgeMap</a></div><div class="ttdeci">OrderedMap&lt; const CallBlockNode *, FunctionSet &gt; CallEdgeMap</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00111">PointerAnalysis.h:111</a></div></div>
2818
2870
  <div class="ttc" id="classSVF_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#l00144">Andersen.h:144</a></div></div>
2819
2871
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5ec3d9bf1fc81346c9df29638daedc0f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">SVF::PointerAnalysis::stat</a></div><div class="ttdeci">PTAStat * stat</div><div class="ttdoc">Statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00155">PointerAnalysis.h:155</a></div></div>
2820
2872
  <div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00171">SVFBasicTypes.h:171</a></div></div>
2821
- <div class="ttc" id="classSVF_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#l00661">Andersen.cpp:661</a></div></div>
2873
+ <div class="ttc" id="classSVF_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#l00676">Andersen.cpp:676</a></div></div>
2822
2874
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a202de7ad2bea0311e2f75894c030e7a9"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVF::SVFUtil::getLLVMCallSite</a></div><div class="ttdeci">CallSite getLLVMCallSite(const Instruction *inst)</div><div class="ttdoc">Return LLVM callsite given a instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00219">SVFUtil.h:219</a></div></div>
2823
2875
  <div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00313">BasicTypes.h:313</a></div></div>
2824
2876
  <div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00113">PTAStat.cpp:113</a></div></div>
@@ -2862,8 +2914,8 @@ Additional Inherited Members</h2></td></tr>
2862
2914
  <p>Updates subnodes of its rep, and rep node of its subs. </p>
2863
2915
  <p>update nodeToRepMap, for each subs of current node updates its rep to newRepId </p>
2864
2916
 
2865
- <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00796">796</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2866
- <div class="fragment"><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160;{</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#abea65bf6dd43aa312082f8d4c7c3e3cb">setRep</a>(nodeId,newRepId);</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> repSubs;</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; repSubs.set(nodeId);</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <span class="comment">// update nodeToSubsMap, union its subs with its rep Subs</span></div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; nodeSubs = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#aed605b010e313f4b11e95b83fe50e3b3">sccSubNodes</a>(nodeId);</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">for</span>(NodeBS::iterator sit = nodeSubs.begin(), esit = nodeSubs.end(); sit!=esit; ++sit)</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; {</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> subId = *sit;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#abea65bf6dd43aa312082f8d4c7c3e3cb">setRep</a>(subId,newRepId);</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; }</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; repSubs |= nodeSubs;</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a148235bd1355a700d3ce187702e89bc8">setSubs</a>(newRepId,repSubs);</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a5fe3815a7990e16b99cf46e90529f8b3">resetSubs</a>(nodeId);</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
2917
+ <p class="definition">Definition at line <a class="el" href="Andersen_8cpp_source.html#l00811">811</a> of file <a class="el" href="Andersen_8cpp_source.html">Andersen.cpp</a>.</p>
2918
+ <div class="fragment"><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;{</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#abea65bf6dd43aa312082f8d4c7c3e3cb">setRep</a>(nodeId,newRepId);</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> repSubs;</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; repSubs.set(nodeId);</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="comment">// update nodeToSubsMap, union its subs with its rep Subs</span></div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; nodeSubs = <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#aed605b010e313f4b11e95b83fe50e3b3">sccSubNodes</a>(nodeId);</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="keywordflow">for</span>(NodeBS::iterator sit = nodeSubs.begin(), esit = nodeSubs.end(); sit!=esit; ++sit)</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; {</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> subId = *sit;</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#abea65bf6dd43aa312082f8d4c7c3e3cb">setRep</a>(subId,newRepId);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; }</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; repSubs |= nodeSubs;</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a148235bd1355a700d3ce187702e89bc8">setSubs</a>(newRepId,repSubs);</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <a class="code" href="classSVF_1_1AndersenBase.html#ae21e38a06a4397d11cdd17b0f8f282fd">consCG</a>-&gt;<a class="code" href="classSVF_1_1ConstraintGraph.html#a5fe3815a7990e16b99cf46e90529f8b3">resetSubs</a>(nodeId);</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
2867
2919
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_aed605b010e313f4b11e95b83fe50e3b3"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#aed605b010e313f4b11e95b83fe50e3b3">SVF::ConstraintGraph::sccSubNodes</a></div><div class="ttdeci">NodeBS &amp; sccSubNodes(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00240">ConsG.h:240</a></div></div>
2868
2920
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_a148235bd1355a700d3ce187702e89bc8"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a148235bd1355a700d3ce187702e89bc8">SVF::ConstraintGraph::setSubs</a></div><div class="ttdeci">void setSubs(NodeID node, NodeBS &amp;subs)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00249">ConsG.h:249</a></div></div>
2869
2921
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_abea65bf6dd43aa312082f8d4c7c3e3cb"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#abea65bf6dd43aa312082f8d4c7c3e3cb">SVF::ConstraintGraph::setRep</a></div><div class="ttdeci">void setRep(NodeID node, NodeID rep)</div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00245">ConsG.h:245</a></div></div>