svf-tools 1.0.317 → 1.0.321

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 (547) hide show
  1. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +6 -6
  2. package/SVF-doxygen/html/html/Andersen_8cpp.html +1 -1
  3. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +4 -4
  4. package/SVF-doxygen/html/html/Andersen_8h_source.html +1 -1
  5. package/SVF-doxygen/html/html/CHGBuilder_8cpp.html +138 -0
  6. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +178 -0
  7. package/SVF-doxygen/html/html/CHGBuilder_8h.html +95 -0
  8. package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +109 -0
  9. package/SVF-doxygen/html/html/CHG_8cpp.html +10 -64
  10. package/SVF-doxygen/html/html/CHG_8cpp_source.html +31 -108
  11. package/SVF-doxygen/html/html/CHG_8h.html +9 -3
  12. package/SVF-doxygen/html/html/CHG_8h_source.html +82 -76
  13. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +37 -33
  14. package/SVF-doxygen/html/html/ConsG_8h_source.html +32 -32
  15. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
  16. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +3 -3
  17. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +2 -2
  18. package/SVF-doxygen/html/html/DCHG_8h.html +1 -1
  19. package/SVF-doxygen/html/html/DCHG_8h_source.html +8 -8
  20. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +5 -5
  21. package/SVF-doxygen/html/html/DDAClient_8h_source.html +2 -2
  22. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +5 -5
  23. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +4 -4
  24. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +12 -12
  25. package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +1 -1
  26. package/SVF-doxygen/html/html/ExternalPAG_8cpp.html +1 -1
  27. package/SVF-doxygen/html/html/ExternalPAG_8cpp_source.html +22 -22
  28. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +1 -1
  29. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
  30. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +2 -2
  31. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +4 -4
  32. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +7 -7
  33. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +11 -11
  34. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +3 -3
  35. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +16 -16
  36. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +6 -6
  37. package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h_source.html +1 -1
  38. package/SVF-doxygen/html/html/GenericGraph_8h_source.html +3 -3
  39. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +2 -2
  40. package/SVF-doxygen/html/html/GraphPrinter_8h_source.html +1 -1
  41. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +4 -4
  42. package/SVF-doxygen/html/html/ICFG_8h_source.html +1 -1
  43. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +1 -1
  44. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +20 -21
  45. package/SVF-doxygen/html/html/IRGraph_8h_source.html +37 -40
  46. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +4 -4
  47. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +2 -2
  48. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +6 -6
  49. package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
  50. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +18 -18
  51. package/SVF-doxygen/html/html/MemRegion_8h_source.html +2 -2
  52. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +3 -3
  53. package/SVF-doxygen/html/html/MemSSA_8h_source.html +2 -2
  54. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +2 -2
  55. package/SVF-doxygen/html/html/OfflineConsG_8h_source.html +1 -1
  56. package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +3 -3
  57. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +1 -1
  58. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +1 -1
  59. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +11 -11
  60. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +13 -13
  61. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +5 -5
  62. package/SVF-doxygen/html/html/PointerAnalysis_8cpp.html +1 -2
  63. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +30 -33
  64. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +31 -31
  65. package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +1 -1
  66. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +4 -4
  67. package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +1 -1
  68. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +9 -9
  69. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +48 -48
  70. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +36 -36
  71. package/SVF-doxygen/html/html/SVFG_8h_source.html +25 -25
  72. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp.html +0 -1
  73. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +5 -6
  74. package/SVF-doxygen/html/html/SVFIRBuilder_8h.html +1 -7
  75. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +90 -85
  76. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +70 -62
  77. package/SVF-doxygen/html/html/SVFIR_8h_source.html +168 -182
  78. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +39 -23
  79. package/SVF-doxygen/html/html/SVFStatements_8h.html +6 -0
  80. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +146 -94
  81. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +2 -2
  82. package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +1 -1
  83. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +5 -5
  84. package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +1 -1
  85. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +1 -1
  86. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
  87. package/SVF-doxygen/html/html/TCT_8cpp_source.html +1 -1
  88. package/SVF-doxygen/html/html/TCT_8h_source.html +1 -1
  89. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +2 -2
  90. package/SVF-doxygen/html/html/TypeAnalysis_8cpp.html +1 -1
  91. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +9 -9
  92. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +7 -7
  93. package/SVF-doxygen/html/html/VFGEdge_8h_source.html +1 -1
  94. package/SVF-doxygen/html/html/VFGNode_8h.html +2 -0
  95. package/SVF-doxygen/html/html/VFGNode_8h_source.html +143 -126
  96. package/SVF-doxygen/html/html/VFG_8cpp_source.html +136 -129
  97. package/SVF-doxygen/html/html/VFG_8h_source.html +144 -133
  98. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +6 -6
  99. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +3 -3
  100. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +4 -4
  101. package/SVF-doxygen/html/html/annotated.html +265 -261
  102. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode-members.html +75 -74
  103. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +10 -9
  104. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode-members.html +75 -74
  105. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +10 -9
  106. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode-members.html +73 -72
  107. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +31 -30
  108. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode-members.html +75 -74
  109. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +35 -34
  110. package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge-members.html +1 -1
  111. package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +5 -5
  112. package/SVF-doxygen/html/html/classSVF_1_1AddrPE-members.html +42 -39
  113. package/SVF-doxygen/html/html/classSVF_1_1AddrPE.html +27 -22
  114. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode-members.html +77 -76
  115. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +23 -22
  116. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +3 -3
  117. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +18 -18
  118. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +8 -8
  119. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +1 -1
  120. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +6 -6
  121. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode-members.html +69 -68
  122. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +30 -29
  123. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +20 -20
  124. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE-members.html +49 -28
  125. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.html +295 -34
  126. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.png +0 -0
  127. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode-members.html +76 -75
  128. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +12 -11
  129. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt-members.html +70 -22
  130. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +633 -89
  131. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.png +0 -0
  132. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode-members.html +164 -0
  133. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +694 -0
  134. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.png +0 -0
  135. package/SVF-doxygen/html/html/classSVF_1_1CHEdge-members.html +1 -1
  136. package/SVF-doxygen/html/html/classSVF_1_1CHEdge.html +15 -15
  137. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder-members.html +100 -0
  138. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +777 -0
  139. package/SVF-doxygen/html/html/classSVF_1_1CHGraph-members.html +31 -46
  140. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +103 -651
  141. package/SVF-doxygen/html/html/classSVF_1_1CHNode.html +54 -54
  142. package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge-members.html +1 -1
  143. package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +2 -2
  144. package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge-members.html +1 -1
  145. package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge.html +4 -4
  146. package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge-members.html +1 -1
  147. package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +2 -2
  148. package/SVF-doxygen/html/html/classSVF_1_1CallPE-members.html +48 -45
  149. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +33 -28
  150. package/SVF-doxygen/html/html/classSVF_1_1CmpPE-members.html +49 -28
  151. package/SVF-doxygen/html/html/classSVF_1_1CmpPE.html +295 -34
  152. package/SVF-doxygen/html/html/classSVF_1_1CmpPE.png +0 -0
  153. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode-members.html +79 -78
  154. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +13 -12
  155. package/SVF-doxygen/html/html/classSVF_1_1CommonCHGraph.html +11 -11
  156. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +6 -6
  157. package/SVF-doxygen/html/html/classSVF_1_1ConstraintEdge-members.html +1 -1
  158. package/SVF-doxygen/html/html/classSVF_1_1ConstraintEdge.html +2 -2
  159. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +90 -86
  160. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +7 -7
  161. package/SVF-doxygen/html/html/classSVF_1_1CopyCGEdge-members.html +1 -1
  162. package/SVF-doxygen/html/html/classSVF_1_1CopyCGEdge.html +2 -2
  163. package/SVF-doxygen/html/html/classSVF_1_1CopyPE-members.html +45 -42
  164. package/SVF-doxygen/html/html/classSVF_1_1CopyPE.html +27 -22
  165. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode-members.html +80 -79
  166. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +11 -10
  167. package/SVF-doxygen/html/html/classSVF_1_1DCHEdge-members.html +1 -1
  168. package/SVF-doxygen/html/html/classSVF_1_1DCHEdge.html +2 -2
  169. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +6 -6
  170. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +3 -3
  171. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +7 -7
  172. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +4 -4
  173. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +14 -14
  174. package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge-members.html +1 -1
  175. package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge.html +4 -4
  176. package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode-members.html +72 -71
  177. package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode.html +10 -9
  178. package/SVF-doxygen/html/html/classSVF_1_1ExternalPAG.html +22 -22
  179. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +1 -1
  180. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +5 -5
  181. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +22 -22
  182. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +9 -9
  183. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +14 -14
  184. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode-members.html +76 -75
  185. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +10 -9
  186. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode-members.html +76 -75
  187. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +10 -9
  188. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode-members.html +76 -75
  189. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +38 -37
  190. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode-members.html +79 -78
  191. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +38 -37
  192. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +4 -4
  193. package/SVF-doxygen/html/html/classSVF_1_1GenericEdge-members.html +1 -1
  194. package/SVF-doxygen/html/html/classSVF_1_1GenericEdge.html +11 -11
  195. package/SVF-doxygen/html/html/classSVF_1_1GenericEdge.png +0 -0
  196. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +8 -7
  197. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
  198. package/SVF-doxygen/html/html/classSVF_1_1GepCGEdge-members.html +1 -1
  199. package/SVF-doxygen/html/html/classSVF_1_1GepCGEdge.html +2 -2
  200. package/SVF-doxygen/html/html/classSVF_1_1GepPE-members.html +45 -42
  201. package/SVF-doxygen/html/html/classSVF_1_1GepPE.html +22 -17
  202. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode-members.html +80 -79
  203. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +23 -22
  204. package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge-members.html +1 -1
  205. package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge.html +2 -2
  206. package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge-members.html +1 -1
  207. package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +2 -2
  208. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +4 -4
  209. package/SVF-doxygen/html/html/classSVF_1_1IRGraph-members.html +36 -37
  210. package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +149 -163
  211. package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge-members.html +1 -1
  212. package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +2 -2
  213. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode-members.html +88 -87
  214. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +10 -9
  215. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode-members.html +86 -85
  216. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +46 -45
  217. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge-members.html +1 -1
  218. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +2 -2
  219. package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge-members.html +1 -1
  220. package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge.html +4 -4
  221. package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge-members.html +1 -1
  222. package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +2 -2
  223. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode-members.html +85 -84
  224. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +10 -9
  225. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode-members.html +84 -83
  226. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +33 -32
  227. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +5 -5
  228. package/SVF-doxygen/html/html/classSVF_1_1LoadCGEdge-members.html +1 -1
  229. package/SVF-doxygen/html/html/classSVF_1_1LoadCGEdge.html +2 -2
  230. package/SVF-doxygen/html/html/classSVF_1_1LoadPE-members.html +45 -42
  231. package/SVF-doxygen/html/html/classSVF_1_1LoadPE.html +27 -22
  232. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode-members.html +80 -79
  233. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +11 -10
  234. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +24 -24
  235. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode-members.html +70 -69
  236. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +10 -9
  237. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode-members.html +81 -80
  238. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +10 -9
  239. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +1 -1
  240. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +6 -6
  241. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +2 -2
  242. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +9 -9
  243. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt-members.html +143 -0
  244. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +669 -0
  245. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.png +0 -0
  246. package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge-members.html +1 -1
  247. package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge.html +2 -2
  248. package/SVF-doxygen/html/html/classSVF_1_1NormalGepPE-members.html +47 -44
  249. package/SVF-doxygen/html/html/classSVF_1_1NormalGepPE.html +34 -29
  250. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode-members.html +66 -65
  251. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +37 -36
  252. package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +6 -6
  253. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +17 -16
  254. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode-members.html +77 -76
  255. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +44 -43
  256. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge-members.html +1 -1
  257. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +2 -2
  258. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +11 -11
  259. package/SVF-doxygen/html/html/classSVF_1_1PhiPE-members.html +153 -0
  260. package/SVF-doxygen/html/html/classSVF_1_1PhiPE.html +717 -0
  261. package/SVF-doxygen/html/html/classSVF_1_1PhiPE.png +0 -0
  262. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +77 -79
  263. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +2 -2
  264. package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge-members.html +1 -1
  265. package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +2 -2
  266. package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge-members.html +1 -1
  267. package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge.html +4 -4
  268. package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge-members.html +1 -1
  269. package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +2 -2
  270. package/SVF-doxygen/html/html/classSVF_1_1RetPE-members.html +48 -45
  271. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +33 -28
  272. package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +90 -86
  273. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +81 -71
  274. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +16 -16
  275. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +105 -101
  276. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +149 -138
  277. package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +106 -119
  278. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +621 -1090
  279. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +14 -12
  280. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +401 -288
  281. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt-members.html +41 -35
  282. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +174 -37
  283. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.png +0 -0
  284. package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +1 -1
  285. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +14 -14
  286. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +2 -2
  287. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode-members.html +76 -75
  288. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +14 -13
  289. package/SVF-doxygen/html/html/classSVF_1_1StoreCGEdge-members.html +1 -1
  290. package/SVF-doxygen/html/html/classSVF_1_1StoreCGEdge.html +2 -2
  291. package/SVF-doxygen/html/html/classSVF_1_1StorePE-members.html +45 -42
  292. package/SVF-doxygen/html/html/classSVF_1_1StorePE.html +27 -22
  293. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode-members.html +80 -79
  294. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +11 -10
  295. package/SVF-doxygen/html/html/classSVF_1_1TCTEdge-members.html +1 -1
  296. package/SVF-doxygen/html/html/classSVF_1_1TCTEdge.html +2 -2
  297. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE-members.html +49 -46
  298. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +22 -17
  299. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +49 -46
  300. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +22 -17
  301. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +2 -2
  302. package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge-members.html +1 -1
  303. package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +2 -2
  304. package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge-members.html +1 -1
  305. package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +2 -2
  306. package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge-members.html +1 -1
  307. package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +2 -2
  308. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +12 -12
  309. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +9 -9
  310. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE-members.html +56 -43
  311. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE.html +329 -30
  312. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode-members.html +34 -32
  313. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +63 -30
  314. package/SVF-doxygen/html/html/classSVF_1_1VFG-members.html +52 -48
  315. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +515 -441
  316. package/SVF-doxygen/html/html/classSVF_1_1VFGEdge-members.html +1 -1
  317. package/SVF-doxygen/html/html/classSVF_1_1VFGEdge.html +4 -4
  318. package/SVF-doxygen/html/html/classSVF_1_1VFGNode-members.html +65 -64
  319. package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +22 -18
  320. package/SVF-doxygen/html/html/classSVF_1_1VFGNode.png +0 -0
  321. package/SVF-doxygen/html/html/classSVF_1_1VariantGepCGEdge-members.html +1 -1
  322. package/SVF-doxygen/html/html/classSVF_1_1VariantGepCGEdge.html +2 -2
  323. package/SVF-doxygen/html/html/classSVF_1_1VariantGepPE-members.html +47 -44
  324. package/SVF-doxygen/html/html/classSVF_1_1VariantGepPE.html +28 -23
  325. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +11 -11
  326. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +7 -7
  327. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +8 -8
  328. package/SVF-doxygen/html/html/classes.html +95 -94
  329. package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
  330. package/SVF-doxygen/html/html/dir_1870ebf480d659cc38d2dd7ac3aa8993.html +2 -2
  331. package/SVF-doxygen/html/html/dir_5840dc76920ee0f379cd88b55fa041fd.html +1 -1
  332. package/SVF-doxygen/html/html/dir_770a542efe75a1b68c109cb4e4290224.html +1 -3
  333. package/SVF-doxygen/html/html/dir_fa02919a30fec2d2c2d591b4d920d648.html +2 -2
  334. package/SVF-doxygen/html/html/files.html +18 -19
  335. package/SVF-doxygen/html/html/functions_0x7e.html +0 -3
  336. package/SVF-doxygen/html/html/functions_a.html +35 -36
  337. package/SVF-doxygen/html/html/functions_b.html +24 -17
  338. package/SVF-doxygen/html/html/functions_c.html +44 -43
  339. package/SVF-doxygen/html/html/functions_d.html +0 -3
  340. package/SVF-doxygen/html/html/functions_e.html +7 -9
  341. package/SVF-doxygen/html/html/functions_eval_b.html +4 -0
  342. package/SVF-doxygen/html/html/functions_eval_p.html +3 -0
  343. package/SVF-doxygen/html/html/functions_f.html +6 -15
  344. package/SVF-doxygen/html/html/functions_func.html +40 -38
  345. package/SVF-doxygen/html/html/functions_func_0x7e.html +0 -3
  346. package/SVF-doxygen/html/html/functions_func_b.html +14 -8
  347. package/SVF-doxygen/html/html/functions_func_c.html +32 -28
  348. package/SVF-doxygen/html/html/functions_func_d.html +0 -3
  349. package/SVF-doxygen/html/html/functions_func_e.html +0 -3
  350. package/SVF-doxygen/html/html/functions_func_g.html +92 -60
  351. package/SVF-doxygen/html/html/functions_func_h.html +3 -9
  352. package/SVF-doxygen/html/html/functions_func_i.html +12 -16
  353. package/SVF-doxygen/html/html/functions_func_m.html +6 -0
  354. package/SVF-doxygen/html/html/functions_func_o.html +11 -4
  355. package/SVF-doxygen/html/html/functions_func_p.html +6 -6
  356. package/SVF-doxygen/html/html/functions_func_r.html +3 -4
  357. package/SVF-doxygen/html/html/functions_func_s.html +6 -9
  358. package/SVF-doxygen/html/html/functions_func_t.html +14 -11
  359. package/SVF-doxygen/html/html/functions_g.html +91 -59
  360. package/SVF-doxygen/html/html/functions_h.html +2 -11
  361. package/SVF-doxygen/html/html/functions_i.html +12 -16
  362. package/SVF-doxygen/html/html/functions_l.html +6 -6
  363. package/SVF-doxygen/html/html/functions_m.html +9 -0
  364. package/SVF-doxygen/html/html/functions_n.html +6 -6
  365. package/SVF-doxygen/html/html/functions_o.html +31 -16
  366. package/SVF-doxygen/html/html/functions_p.html +23 -18
  367. package/SVF-doxygen/html/html/functions_r.html +4 -8
  368. package/SVF-doxygen/html/html/functions_rela.html +3 -0
  369. package/SVF-doxygen/html/html/functions_s.html +14 -16
  370. package/SVF-doxygen/html/html/functions_t.html +18 -15
  371. package/SVF-doxygen/html/html/functions_type_b.html +0 -6
  372. package/SVF-doxygen/html/html/functions_type_c.html +2 -7
  373. package/SVF-doxygen/html/html/functions_type_o.html +3 -0
  374. package/SVF-doxygen/html/html/functions_type_p.html +4 -1
  375. package/SVF-doxygen/html/html/functions_type_u.html +0 -6
  376. package/SVF-doxygen/html/html/functions_type_v.html +3 -0
  377. package/SVF-doxygen/html/html/functions_type_w.html +1 -0
  378. package/SVF-doxygen/html/html/functions_u.html +4 -13
  379. package/SVF-doxygen/html/html/functions_v.html +8 -5
  380. package/SVF-doxygen/html/html/functions_vars_a.html +0 -3
  381. package/SVF-doxygen/html/html/functions_vars_b.html +6 -3
  382. package/SVF-doxygen/html/html/functions_vars_c.html +5 -4
  383. package/SVF-doxygen/html/html/functions_vars_e.html +1 -2
  384. package/SVF-doxygen/html/html/functions_vars_f.html +0 -9
  385. package/SVF-doxygen/html/html/functions_vars_h.html +0 -3
  386. package/SVF-doxygen/html/html/functions_vars_m.html +3 -0
  387. package/SVF-doxygen/html/html/functions_vars_o.html +8 -3
  388. package/SVF-doxygen/html/html/functions_vars_p.html +3 -0
  389. package/SVF-doxygen/html/html/functions_vars_r.html +0 -3
  390. package/SVF-doxygen/html/html/functions_vars_s.html +3 -0
  391. package/SVF-doxygen/html/html/functions_vars_u.html +0 -3
  392. package/SVF-doxygen/html/html/functions_vars_v.html +3 -3
  393. package/SVF-doxygen/html/html/functions_w.html +9 -4
  394. package/SVF-doxygen/html/html/globals_d.html +0 -4
  395. package/SVF-doxygen/html/html/globals_e.html +6 -9
  396. package/SVF-doxygen/html/html/globals_func_d.html +0 -3
  397. package/SVF-doxygen/html/html/globals_func_e.html +6 -9
  398. package/SVF-doxygen/html/html/globals_func_g.html +2 -5
  399. package/SVF-doxygen/html/html/globals_g.html +0 -3
  400. package/SVF-doxygen/html/html/globals_o.html +0 -9
  401. package/SVF-doxygen/html/html/globals_p.html +1 -1
  402. package/SVF-doxygen/html/html/globals_r.html +3 -3
  403. package/SVF-doxygen/html/html/globals_s.html +3 -3
  404. package/SVF-doxygen/html/html/globals_vars.html +2 -5
  405. package/SVF-doxygen/html/html/globals_z.html +1 -1
  406. package/SVF-doxygen/html/html/hierarchy.html +105 -101
  407. package/SVF-doxygen/html/html/menudata.js +0 -1
  408. package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
  409. package/SVF-doxygen/html/html/namespaceSVF.html +27 -37
  410. package/SVF-doxygen/html/html/namespacemembers_p.html +0 -3
  411. package/SVF-doxygen/html/html/namespacemembers_type_p.html +0 -3
  412. package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
  413. package/SVF-doxygen/html/html/search/all_1.js +20 -21
  414. package/SVF-doxygen/html/html/search/all_10.js +11 -10
  415. package/SVF-doxygen/html/html/search/all_12.js +6 -7
  416. package/SVF-doxygen/html/html/search/all_13.js +13 -13
  417. package/SVF-doxygen/html/html/search/all_14.js +3 -3
  418. package/SVF-doxygen/html/html/search/all_15.js +2 -4
  419. package/SVF-doxygen/html/html/search/all_16.js +2 -2
  420. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  421. package/SVF-doxygen/html/html/search/all_1a.js +1 -1
  422. package/SVF-doxygen/html/html/search/all_1b.js +0 -1
  423. package/SVF-doxygen/html/html/search/all_2.js +13 -10
  424. package/SVF-doxygen/html/html/search/all_3.js +15 -15
  425. package/SVF-doxygen/html/html/search/all_4.js +2 -4
  426. package/SVF-doxygen/html/html/search/all_5.js +3 -6
  427. package/SVF-doxygen/html/html/search/all_6.js +1 -4
  428. package/SVF-doxygen/html/html/search/all_7.js +34 -34
  429. package/SVF-doxygen/html/html/search/all_8.js +2 -5
  430. package/SVF-doxygen/html/html/search/all_9.js +4 -5
  431. package/SVF-doxygen/html/html/search/all_b.js +1 -1
  432. package/SVF-doxygen/html/html/search/all_c.js +3 -3
  433. package/SVF-doxygen/html/html/search/all_d.js +6 -3
  434. package/SVF-doxygen/html/html/search/all_e.js +6 -6
  435. package/SVF-doxygen/html/html/search/all_f.js +7 -8
  436. package/SVF-doxygen/html/html/search/classes_1.js +2 -0
  437. package/SVF-doxygen/html/html/search/classes_2.js +1 -0
  438. package/SVF-doxygen/html/html/search/classes_4.js +1 -2
  439. package/SVF-doxygen/html/html/search/classes_a.js +1 -0
  440. package/SVF-doxygen/html/html/search/classes_d.js +1 -0
  441. package/SVF-doxygen/html/html/search/enumvalues_1.js +1 -0
  442. package/SVF-doxygen/html/html/search/enumvalues_d.js +1 -0
  443. package/SVF-doxygen/html/html/search/files_2.js +2 -1
  444. package/SVF-doxygen/html/html/search/files_4.js +1 -3
  445. package/SVF-doxygen/html/html/search/functions_0.js +20 -20
  446. package/SVF-doxygen/html/html/search/functions_1.js +10 -8
  447. package/SVF-doxygen/html/html/search/functions_10.js +2 -3
  448. package/SVF-doxygen/html/html/search/functions_11.js +1 -1
  449. package/SVF-doxygen/html/html/search/functions_12.js +1 -1
  450. package/SVF-doxygen/html/html/search/functions_13.js +1 -1
  451. package/SVF-doxygen/html/html/search/functions_16.js +0 -1
  452. package/SVF-doxygen/html/html/search/functions_2.js +8 -8
  453. package/SVF-doxygen/html/html/search/functions_3.js +2 -4
  454. package/SVF-doxygen/html/html/search/functions_4.js +0 -2
  455. package/SVF-doxygen/html/html/search/functions_6.js +34 -34
  456. package/SVF-doxygen/html/html/search/functions_7.js +2 -4
  457. package/SVF-doxygen/html/html/search/functions_8.js +3 -4
  458. package/SVF-doxygen/html/html/search/functions_b.js +2 -0
  459. package/SVF-doxygen/html/html/search/functions_d.js +4 -6
  460. package/SVF-doxygen/html/html/search/functions_e.js +1 -1
  461. package/SVF-doxygen/html/html/search/functions_f.js +2 -2
  462. package/SVF-doxygen/html/html/search/related_0.js +1 -2
  463. package/SVF-doxygen/html/html/search/related_1.js +2 -1
  464. package/SVF-doxygen/html/html/search/related_2.js +1 -1
  465. package/SVF-doxygen/html/html/search/related_3.js +1 -2
  466. package/SVF-doxygen/html/html/search/related_4.js +2 -1
  467. package/SVF-doxygen/html/html/search/related_5.js +1 -4
  468. package/SVF-doxygen/html/html/search/related_6.js +4 -1
  469. package/SVF-doxygen/html/html/search/related_7.js +1 -5
  470. package/SVF-doxygen/html/html/search/related_8.js +5 -2
  471. package/SVF-doxygen/html/html/search/related_9.js +2 -1
  472. package/SVF-doxygen/html/html/search/related_a.html +26 -0
  473. package/SVF-doxygen/html/html/search/related_a.js +4 -0
  474. package/SVF-doxygen/html/html/search/searchdata.js +1 -1
  475. package/SVF-doxygen/html/html/search/typedefs_1.js +0 -2
  476. package/SVF-doxygen/html/html/search/typedefs_13.js +0 -2
  477. package/SVF-doxygen/html/html/search/typedefs_14.js +1 -0
  478. package/SVF-doxygen/html/html/search/typedefs_15.js +1 -1
  479. package/SVF-doxygen/html/html/search/typedefs_2.js +1 -3
  480. package/SVF-doxygen/html/html/search/typedefs_d.js +2 -2
  481. package/SVF-doxygen/html/html/search/typedefs_e.js +1 -0
  482. package/SVF-doxygen/html/html/search/typedefs_f.js +2 -2
  483. package/SVF-doxygen/html/html/search/variables_1.js +0 -1
  484. package/SVF-doxygen/html/html/search/variables_10.js +2 -1
  485. package/SVF-doxygen/html/html/search/variables_12.js +0 -1
  486. package/SVF-doxygen/html/html/search/variables_13.js +2 -1
  487. package/SVF-doxygen/html/html/search/variables_14.js +1 -1
  488. package/SVF-doxygen/html/html/search/variables_15.js +1 -2
  489. package/SVF-doxygen/html/html/search/variables_16.js +1 -1
  490. package/SVF-doxygen/html/html/search/variables_1a.js +1 -1
  491. package/SVF-doxygen/html/html/search/variables_2.js +2 -1
  492. package/SVF-doxygen/html/html/search/variables_3.js +2 -2
  493. package/SVF-doxygen/html/html/search/variables_4.js +0 -1
  494. package/SVF-doxygen/html/html/search/variables_5.js +1 -1
  495. package/SVF-doxygen/html/html/search/variables_6.js +1 -4
  496. package/SVF-doxygen/html/html/search/variables_8.js +0 -1
  497. package/SVF-doxygen/html/html/search/variables_b.js +1 -1
  498. package/SVF-doxygen/html/html/search/variables_d.js +2 -1
  499. package/SVF-doxygen/html/html/search/variables_e.js +1 -1
  500. package/SVF-doxygen/html/html/search/variables_f.js +2 -1
  501. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CHGraph_01_5_01_4.html +14 -14
  502. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +16 -16
  503. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +1 -1
  504. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +18 -18
  505. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +11 -11
  506. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +29 -29
  507. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1CHNode_01_5_01_4_01_4.html +2 -2
  508. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1SVFVar_01_5_01_4_01_4.html +1 -1
  509. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1VFGNode_01_5_01_4_01_4.html +1 -1
  510. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CHGraph_01_5_01_4.html +3 -3
  511. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CHNode_01_5_01_4.html +2 -2
  512. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1IRGraph_01_5_01_4.html +2 -2
  513. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1SVFVar_01_5_01_4.html +1 -1
  514. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1VFGNode_01_5_01_4.html +1 -1
  515. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1VFG_01_5_01_4.html +2 -2
  516. package/SVF-doxygen/html/html/svf-ex_8cpp.html +5 -6
  517. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +5 -5
  518. package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
  519. package/include/{SVF-FE → Graphs}/CHG.h +37 -20
  520. package/include/Graphs/GenericGraph.h +1 -1
  521. package/include/Graphs/IRGraph.h +6 -15
  522. package/include/Graphs/SVFGOPT.h +3 -2
  523. package/include/Graphs/VFG.h +42 -41
  524. package/include/Graphs/VFGNode.h +60 -7
  525. package/include/MemoryModel/SVFIR.h +93 -159
  526. package/include/MemoryModel/SVFStatements.h +253 -21
  527. package/include/SVF-FE/CHGBuilder.h +69 -0
  528. package/include/SVF-FE/DCHG.h +1 -1
  529. package/include/SVF-FE/SVFIRBuilder.h +21 -8
  530. package/lib/Graphs/CHG.cpp +280 -0
  531. package/lib/Graphs/ConsG.cpp +9 -0
  532. package/lib/Graphs/IRGraph.cpp +23 -8
  533. package/lib/Graphs/VFG.cpp +45 -19
  534. package/lib/MSSA/SVFGBuilder.cpp +3 -2
  535. package/lib/MemoryModel/PAGBuilderFromFile.cpp +9 -3
  536. package/lib/MemoryModel/PointerAnalysis.cpp +3 -5
  537. package/lib/MemoryModel/SVFIR.cpp +68 -12
  538. package/lib/MemoryModel/SVFStatements.cpp +65 -4
  539. package/lib/SVF-FE/{CHG.cpp → CHGBuilder.cpp} +82 -324
  540. package/lib/SVF-FE/SVFIRBuilder.cpp +58 -57
  541. package/lib/WPA/Andersen.cpp +1 -1
  542. package/lib/WPA/TypeAnalysis.cpp +1 -1
  543. package/package.json +1 -1
  544. package/tools/Example/svf-ex.cpp +1 -1
  545. package/include/Graphs/ExternalPAG.h +0 -147
  546. package/include/SVF-FE/CommonCHG.h +0 -49
  547. package/lib/Graphs/ExternalPAG.cpp +0 -623
@@ -66,10 +66,10 @@ $(function() {
66
66
  <div class="title">PointerAnalysisImpl.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="PointerAnalysisImpl_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * PointerAnalysisImpl.cpp</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Created on: 28Mar.,2020</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Author: yulei</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointerAnalysisImpl_8h.html">MemoryModel/PointerAnalysisImpl.h</a>&quot;</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CPPUtil_8h.html">SVF-FE/CPPUtil.h</a>&quot;</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="DCHG_8h.html">SVF-FE/DCHG.h</a>&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="IRAnnotator_8h.html">Util/IRAnnotator.h</a>&quot;</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;fstream&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacecppUtil.html">cppUtil</a>;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ab0e1242aadfe1e16a2bd1445658a5476"> 25</a></span>&#160;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab0e1242aadfe1e16a2bd1445658a5476">BVDataPTAImpl::BVDataPTAImpl</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* p, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PointerAnalysis::PTATY</a> type, <span class="keywordtype">bool</span> alias_check) :</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>(p, type, alias_check), ptCache()</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">if</span> (type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a9a25374fb6d2218c6c59de0482548f49">Andersen_BASE</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab68615784a520e39856be5237930e6a6">Andersen_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">AndersenWaveDiff_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a46f5e74d5f4b0a2d134e68d262079c3f">AndersenHCD_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a99d50c1712075e4c3278fc4fa4c9cd2f">AndersenHLCD_WPA</a></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac7c033efd59e2b5fcded79fc3ebdb9d4">AndersenLCD_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85acc2e7cbdd04a614a3b6189d2f01042f3">TypeCPP_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85aa43c83e2f0df003c158d4b1325b50b18">FlowS_DDA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac581e279a4bd69c059b0e5987f839a1f">AndersenWaveDiffWithType_WPA</a></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a6c06b12c95a4aa57edc6bef57514a7e1">AndersenSCD_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85accfa4ed42d3a3ac5e4abc403e738427b">AndersenSFR_WPA</a>)</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="comment">// Only maintain reverse points-to when the analysis is field-sensitive, as objects turning</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="comment">// field-insensitive is all it is used for.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">bool</span> maintainRevPts = <a class="code" href="classSVF_1_1Options.html#adfc1a5c6098d3867e29fc65ca9ffa1cc">Options::MaxFieldLimit</a> != 0;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac4e74e6dfee9d08198e0f7e3d76a0646">MutDiffPTDataTy</a>(maintainRevPts);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a1342c0953d7bb9bf0f6f676bd564350e">PersDiffPTDataTy</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(), maintainRevPts);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; }</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad24ef5326c26db858c73432aa7e67a0a">Steensgaard_WPA</a>)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">// Steensgaard is only field-insensitive (for now?), so no reverse points-to.</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac4e74e6dfee9d08198e0f7e3d76a0646">MutDiffPTDataTy</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a1342c0953d7bb9bf0f6f676bd564350e">PersDiffPTDataTy</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; }</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad6ccf1ce66083278349c5c3111172d78">FSSPARSE_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a088dda60195ab259693977af8414f203">FSTBHC_WPA</a>)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a5896e2aaf59305441a74ede0dfb85845">Options::INCDFPTData</a>)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a639446e6bf9712afa439d089b94aefae">MutIncDFPTDataTy</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a29172b3e8b3891a5d946a493cfcde2e7">PersIncDFPTDataTy</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac130bf326911b8e5396f57daa78566e7">MutDFPTDataTy</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a7087f9d5a1a5b3576173bd6a7fd72163">PersDFPTDataTy</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a412254a7738029bf3ee96f5c15a6bec9">VFS_WPA</a>)</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a7fde3e9b189e988cd0a24d567b136e13">MutVersionedPTDataTy</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae028ae29bdc799f35777b82a39faf5e8">PersVersionedPTDataTy</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;no points-to data available&quot;</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a5d3c3094e263bf16a4f312a118c1bd36">ptaImplTy</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#ac0c0855918cb2cdc3d8ebc175acfbd4da84705167ea3a7162ecb9470a8a77b5d8">BVDataImpl</a>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;}</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a57ff2bf45ede7a730a8adaba8e61179d"> 72</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a57ff2bf45ede7a730a8adaba8e61179d">BVDataPTAImpl::finalize</a>()</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;{</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a2026cffd7043208333083ed1a6603e7b">normalizePointsTo</a>();</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a118dabc50024b5cd91095814ade47166">PointerAnalysis::finalize</a>();</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent &amp;&amp; <a class="code" href="classSVF_1_1Options.html#a498a1a05a08be1ffd845aefeb0672bcb">Options::PStat</a>) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">ptCache</a>.printStats(<span class="stringliteral">&quot;bv-finalize&quot;</span>);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;}</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721"> 82</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">BVDataPTAImpl::expandFIObjs</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; expandedPts)</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;{</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; expandedPts = pts;;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> pit = pts.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), epit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>(); pit!=epit; ++pit)</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a4720426ab75f8d07e780995ffad7d51a">getBaseObjNode</a>(*pit) == *pit || <a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(*pit))</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; {</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; expandedPts |= <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a5a635bc1142c388da1db87d9172c03ab">getAllFieldsObjNode</a>(*pit);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;}</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#aa6a7186152037452599406a74b05d0e1"> 94</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">BVDataPTAImpl::expandFIObjs</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; pts, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; expandedPts)</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;{</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; expandedPts = pts;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a4720426ab75f8d07e780995ffad7d51a">getBaseObjNode</a>(o) == o || <a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(o))</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; expandedPts |= <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a5a635bc1142c388da1db87d9172c03ab">getAllFieldsObjNode</a>(o);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;}</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a7a87ca1a439e871896f92e4342befa2c"> 106</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a7a87ca1a439e871896f92e4342befa2c">BVDataPTAImpl::remapPointsToSets</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;{</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1PTData.html#af2f176027169e18730848c7a583aed93">remapAllPts</a>();</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;}</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a25c68f9d2b88437778e854ff0d741d1b"> 116</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a25c68f9d2b88437778e854ff0d741d1b">BVDataPTAImpl::writeToFile</a>(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; filename)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;{</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aa0ca07204a31004fb876c6e18d1ac1ca">writeToModule</a>();</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Storing pointer analysis results to &#39;&quot;</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">&quot;&#39;...&quot;</span>;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; error_code err;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="namespaceSVF.html#acde6a1d496f1b655088ccbe023820277">ToolOutputFile</a> F(filename.c_str(), err, llvm::sys::fs::OF_None);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">if</span> (err)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; error opening file for writing!\n&quot;</span>;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; F.os().clear_error();</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="comment">// Write analysis results to file</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), ie = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != ie; ++it) {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> var = it-&gt;first;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;pts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(var);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; stringstream ss;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; F.os() &lt;&lt; var &lt;&lt; <span class="stringliteral">&quot; -&gt; { &quot;</span>;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</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="l00139"></a><span class="lineno"> 139</span>&#160; F.os() &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n: pts) {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; F.os() &lt;&lt; n &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; F.os() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">// Write GepPAGNodes to file</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), ie = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != ie; ++it)</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode = it-&gt;second;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepObjPN.html">GepObjPN</a> *gepObjPN = SVFUtil::dyn_cast&lt;GepObjPN&gt;(pagNode))</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; F.os() &lt;&lt; it-&gt;first &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; F.os() &lt;&lt; <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a4720426ab75f8d07e780995ffad7d51a">getBaseObjNode</a>(it-&gt;first) &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; F.os() &lt;&lt; gepObjPN-&gt;getLocationSet().getOffset() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; F.os() &lt;&lt; <span class="stringliteral">&quot;------\n&quot;</span>;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="comment">// Write BaseNodes insensitivity to file</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> NodeIDs;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), ie = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != ie; ++it)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode = it-&gt;second;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">if</span> (!isa&lt;ObjPN&gt;(pagNode)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a4720426ab75f8d07e780995ffad7d51a">getBaseObjNode</a>(it-&gt;first);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">if</span> (NodeIDs.test(n)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; F.os() &lt;&lt; n &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; F.os() &lt;&lt; <a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(n) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; NodeIDs.set(n);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; }</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="comment">// Job finish and close file</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; F.os().close();</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">if</span> (!F.os().has_error())</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; F.keep();</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;}</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a290501006cb700db0e07dc577429c928"> 190</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a290501006cb700db0e07dc577429c928">BVDataPTAImpl::readFromFile</a>(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; filename)</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;{</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="comment">// If the module annotations are available, read from there instead</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keyword">auto</span> mainModule = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a9fe3fa15a6a0ec25864cb8439a45596e">getMainLLVMModule</a>();</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">if</span> (mainModule-&gt;getNamedMetadata(<span class="stringliteral">&quot;SVFIR-Annotated&quot;</span>) != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a857cdacfc8cafdeb1431bdfa077ef9b5">readFromModule</a>();</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Loading pointer analysis results from &#39;&quot;</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">&quot;&#39;...&quot;</span>;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; ifstream F(filename.c_str());</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">if</span> (!F.is_open())</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; error opening file for reading!\n&quot;</span>;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; }</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="comment">// Read analysis results from file</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="classSVF_1_1PTData.html">PTDataTy</a> *<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>();</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordtype">string</span> line;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="comment">// Read points-to sets</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordtype">string</span> delimiter1 = <span class="stringliteral">&quot; -&gt; { &quot;</span>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordtype">string</span> delimiter2 = <span class="stringliteral">&quot; }&quot;</span>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; map&lt;NodeID, string&gt; nodePtsMap;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; map&lt;string, PointsTo&gt; strPtsMap;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">while</span> (F.good())</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; <span class="comment">// Parse a single line in the form of &quot;var -&gt; { obj1 obj2 obj3 }&quot;</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; getline(F, line);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordtype">size_t</span> pos = line.find(delimiter1);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">if</span> (pos == string::npos) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">if</span> (line.back() != <span class="charliteral">&#39;}&#39;</span>) <span class="keywordflow">break</span>;</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="comment">// var</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> var = atoi(line.substr(0, pos).c_str());</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="comment">// objs</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; pos = pos + delimiter1.length();</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordtype">size_t</span> len = line.length() - pos - delimiter2.length();</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordtype">string</span> objs = line.substr(pos, len);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> dstPts;</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; <span class="keywordflow">if</span> (!objs.empty())</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="comment">// map the variable ID to its unique string pointer set</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; nodePtsMap[var] = objs;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">if</span> (strPtsMap.count(objs)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; istringstream ss(objs);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">while</span> (ss.good())</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; {</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; ss &gt;&gt; obj;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; dstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(obj);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// map the string pointer set to the parsed PointsTo set</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; strPtsMap[objs] = dstPts;</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; }</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="comment">// map the variable ID to its pointer set</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> t: nodePtsMap)</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; ptD-&gt;<a class="code" href="classSVF_1_1PTData.html#af7aa22f11558c12ff16612174e2221dd">unionPts</a>(t.first, strPtsMap[t.second]);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// Read SVFIR offset nodes</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">while</span> (F.good())</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">if</span> (line == <span class="stringliteral">&quot;------&quot;</span>) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="comment">// Parse a single line in the form of &quot;ID baseNodeID offset&quot;</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; istringstream ss(line);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordtype">size_t</span> offset;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; ss &gt;&gt; <span class="keywordtype">id</span> &gt;&gt; base &gt;&gt; offset;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2b80cf884eedb51f77a5e84def7d8793">getGepObjNode</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(base), <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(offset));</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keywordtype">id</span> == n &amp;&amp; <span class="stringliteral">&quot;Error adding GepObjNode into SVFIR!&quot;</span>);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; getline(F, line);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; }</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// Read BaseNode insensitivity</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">while</span> (F.good())</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; getline(F, line);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="comment">// Parse a single line in the form of &quot;baseNodeID insensitive&quot;</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; istringstream ss(line);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordtype">bool</span> insensitive;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; ss &gt;&gt; base &gt;&gt; insensitive;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">if</span> (insensitive)</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#ac5683fe2e24b393ccc5cb6d8bc92cf2b">setObjFieldInsensitive</a>(base);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="comment">// Update callgraph</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aa534e475fa34fa322c567bc376a3da70">updateCallGraph</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2d2131128ceb3362b5dc89317cfd88a0">getIndirectCallsites</a>());</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; F.close();</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;}</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;</div><div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#aa0ca07204a31004fb876c6e18d1ac1ca"> 302</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aa0ca07204a31004fb876c6e18d1ac1ca">BVDataPTAImpl::writeToModule</a>()</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;{</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keyword">auto</span> irAnnotator = std::make_unique&lt;IRAnnotator&gt;();</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">auto</span> mainModule = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a9fe3fa15a6a0ec25864cb8439a45596e">getMainLLVMModule</a>();</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; irAnnotator-&gt;processAndersenResults(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>, <span class="keyword">this</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;}</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a857cdacfc8cafdeb1431bdfa077ef9b5"> 315</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a857cdacfc8cafdeb1431bdfa077ef9b5">BVDataPTAImpl::readFromModule</a>()</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;{</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keyword">auto</span> irAnnotator = std::make_unique&lt;IRAnnotator&gt;();</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; irAnnotator-&gt;processAndersenResults(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>, <span class="keyword">this</span>, <span class="keyword">false</span>);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</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;</div><div class="line"><a name="l00325"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a8d6cea841b6ded0f80ef2b5784e9b752"> 325</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a8d6cea841b6ded0f80ef2b5784e9b752">BVDataPTAImpl::dumpTopLevelPtsTo</a>()</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;{</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</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="l00328"></a><span class="lineno"> 328</span>&#160; nIter != this-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().end(); ++nIter)</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; {</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(*nIter);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;isValidTopLevelPtr(node))</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; {</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</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_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</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="l00335"></a><span class="lineno"> 335</span>&#160;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</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="l00337"></a><span class="lineno"> 337</span>&#160; {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</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="l00339"></a><span class="lineno"> 339</span>&#160; }</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; {</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</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="l00343"></a><span class="lineno"> 343</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="l00344"></a><span class="lineno"> 344</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</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="l00346"></a><span class="lineno"> 346</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="l00347"></a><span class="lineno"> 347</span>&#160; }</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; }</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; }</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>().flush();</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;}</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;</div><div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a97705b60d294b87ee075a69f04a35d22"> 358</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a97705b60d294b87ee075a69f04a35d22">BVDataPTAImpl::dumpAllPts</a>()</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; <a class="code" href="namespaceSVF.html#a3c2bd95727ec0d9c55c631b6617026c8">OrderedNodeSet</a> pagNodes;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it!=eit; it++)</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; {</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; pagNodes.insert(it-&gt;first);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; }</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n : pagNodes)</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; {</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;----------------------------------------------\n&quot;</span>;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a1a6cee7e690ccb3e53cdc4c3e67b386d">dumpPts</a>(n, this-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(n));</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; }</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;----------------------------------------------\n&quot;</span>;</div><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;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a9830d4676fd424b633f8e4d918734296"> 381</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a9830d4676fd424b633f8e4d918734296">BVDataPTAImpl::onTheFlyCallGraphSolve</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">CallSiteToFunPtrMap</a>&amp; callsites, <a class="code" href="classSVF_1_1PointerAnalysis.html#aa9661d26d1ae9c829a9296d1b6d874f4">CallEdgeMap</a>&amp; newEdges)</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; <span class="keywordflow">for</span>(CallSiteToFunPtrMap::const_iterator iter = callsites.begin(), eiter = callsites.end(); iter!=eiter; ++iter)</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = iter-&gt;first;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#aca6465c72effcaddeb34f55da4555754">isVirtualCallSite</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-&gt;<a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>())))</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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vtbl = <a class="code" href="namespaceSVF_1_1cppUtil.html#a3b00cc9770022f124958513bf1e52a05">getVCallVtblPtr</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-&gt;<a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()));</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#aceb17dfbe137658625e16291127267d1">hasValueNode</a>(vtbl));</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vtblId = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(vtbl);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#ac9f54859eabff4c1e1f5785d57a0c818">resolveCPPIndCalls</a>(cs, <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(vtblId), newEdges);</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; <span class="keywordflow">else</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a40738643202ca6301671f51da3fc1137">resolveIndCalls</a>(iter-&gt;first,<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(iter-&gt;second),newEdges);</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;}</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;</div><div class="line"><a name="l00402"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a2026cffd7043208333083ed1a6603e7b"> 402</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a2026cffd7043208333083ed1a6603e7b">BVDataPTAImpl::normalizePointsTo</a>() {</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#ab6abb822445c9b3f5cb2b7206042e940">SVFIR::MemObjToFieldsMap</a> &amp;memToFieldsMap = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a6f46446d667258b32ddc1ccab48f651c">getMemToFieldsMap</a>();</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#aa5b08d987b37d35e73de88da10a97bc4">SVFIR::NodeLocationSetMap</a> &amp;GepObjNodeMap = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77e3c407ea3990413e371589aa468963">getGepObjNodeMap</a>();</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="comment">// collect each gep node whose base node has been set as field-insensitive</span></div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> dropNodes;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> t: memToFieldsMap){</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = t.first;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* memObj = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(base);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(memObj &amp;&amp; <span class="stringliteral">&quot;Invalid memobj in memToFieldsMap&quot;</span>);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">if</span> (memObj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">isFieldInsensitive</a>()) {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> : t.second) {</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;GepObjPN&gt;(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>))) {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; dropNodes.set(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; } <span class="keywordflow">else</span></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="keywordtype">id</span> == base &amp;&amp; <span class="stringliteral">&quot;Not a GepObj Node or a baseObj Node?&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; }</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; <span class="comment">// remove the collected redundant gep nodes in each pointers&#39;s pts</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nIter != <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nIter) {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = nIter-&gt;first;</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;tmpPts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(n);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj : tmpPts) {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">if</span> (!dropNodes.test(obj))</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseObj = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a4720426ab75f8d07e780995ffad7d51a">getBaseObjNode</a>(obj);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a3f78f60e1947a6d6fbcd3a0ee11e262a">clearPts</a>(n, obj);</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(n, baseObj);</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;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="comment">// clear GepObjNodeMap and memToFieldsMap for redundant gepnodes</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="comment">// and remove those nodes from pag</span></div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n: dropNodes) {</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a4720426ab75f8d07e780995ffad7d51a">getBaseObjNode</a>(n);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <a class="code" href="classSVF_1_1GepObjPN.html">GepObjPN</a> *gepNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1GepObjPN.html">GepObjPN</a>&gt;(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(n));</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> ls = gepNode-&gt;<a class="code" href="classSVF_1_1GepObjPN.html#aeb05e3a512e89c7af36c675e0efeec7e">getLocationSet</a>();</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; GepObjNodeMap.erase(std::make_pair(base, ls));</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; memToFieldsMap[base].reset(n);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a1817b65e76052f11e36a67d6b9efd915">removeGNode</a>(gepNode);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; }</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;}</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;</div><div class="line"><a name="l00452"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac"> 452</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">BVDataPTAImpl::alias</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a339bbddac9d9dffd5ef602200d34c403">MemoryLocation</a> &amp;LocA,</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a339bbddac9d9dffd5ef602200d34c403">MemoryLocation</a> &amp;LocB)</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;{</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">alias</a>(LocA.Ptr, LocB.Ptr);</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;}</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;</div><div class="line"><a name="l00461"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#adaba5a41a60e32d18d964bdb8ae5b2df"> 461</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">BVDataPTAImpl::alias</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V1,</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V2)</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;{</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">alias</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V1),<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V2));</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;}</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;</div><div class="line"><a name="l00470"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a949533e5c99698c7f9862aae5de23687"> 470</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">BVDataPTAImpl::alias</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node2)</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;{</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">alias</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(node1),<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(node2));</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;</div><div class="line"><a name="l00478"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a25720f154731a8c745da10aa76ab8517"> 478</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">BVDataPTAImpl::alias</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; p1, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; p2)</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;{</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts1;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(p1,pts1);</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts2;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(p2,pts2);</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="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a56368369bc37e37b13f19e5eb1890063">containBlackHoleNode</a>(pts1) || <a class="code" href="classSVF_1_1PointerAnalysis.html#a56368369bc37e37b13f19e5eb1890063">containBlackHoleNode</a>(pts2) || pts1.<a class="code" href="classSVF_1_1PointsTo.html#ad78e4109c839914c4f7e37ca78046f1d">intersects</a>(pts2))</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">return</span> llvm::AliasResult::MayAlias;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">return</span> llvm::AliasResult::NoAlias;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIR_html_aa5b08d987b37d35e73de88da10a97bc4"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa5b08d987b37d35e73de88da10a97bc4">SVF::SVFIR::NodeLocationSetMap</a></div><div class="ttdeci">Map&lt; NodeLocationSet, NodeID &gt; NodeLocationSetMap</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00076">SVFIR.h:76</a></div></div>
69
+ <a href="PointerAnalysisImpl_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * PointerAnalysisImpl.cpp</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Created on: 28Mar.,2020</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Author: yulei</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointerAnalysisImpl_8h.html">MemoryModel/PointerAnalysisImpl.h</a>&quot;</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CPPUtil_8h.html">SVF-FE/CPPUtil.h</a>&quot;</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="DCHG_8h.html">SVF-FE/DCHG.h</a>&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="IRAnnotator_8h.html">Util/IRAnnotator.h</a>&quot;</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;fstream&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacecppUtil.html">cppUtil</a>;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ab0e1242aadfe1e16a2bd1445658a5476"> 25</a></span>&#160;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab0e1242aadfe1e16a2bd1445658a5476">BVDataPTAImpl::BVDataPTAImpl</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* p, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PointerAnalysis::PTATY</a> type, <span class="keywordtype">bool</span> alias_check) :</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>(p, type, alias_check), ptCache()</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">if</span> (type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a9a25374fb6d2218c6c59de0482548f49">Andersen_BASE</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ab68615784a520e39856be5237930e6a6">Andersen_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">AndersenWaveDiff_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a46f5e74d5f4b0a2d134e68d262079c3f">AndersenHCD_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a99d50c1712075e4c3278fc4fa4c9cd2f">AndersenHLCD_WPA</a></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac7c033efd59e2b5fcded79fc3ebdb9d4">AndersenLCD_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85acc2e7cbdd04a614a3b6189d2f01042f3">TypeCPP_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85aa43c83e2f0df003c158d4b1325b50b18">FlowS_DDA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac581e279a4bd69c059b0e5987f839a1f">AndersenWaveDiffWithType_WPA</a></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a6c06b12c95a4aa57edc6bef57514a7e1">AndersenSCD_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85accfa4ed42d3a3ac5e4abc403e738427b">AndersenSFR_WPA</a>)</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="comment">// Only maintain reverse points-to when the analysis is field-sensitive, as objects turning</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="comment">// field-insensitive is all it is used for.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">bool</span> maintainRevPts = <a class="code" href="classSVF_1_1Options.html#adfc1a5c6098d3867e29fc65ca9ffa1cc">Options::MaxFieldLimit</a> != 0;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac4e74e6dfee9d08198e0f7e3d76a0646">MutDiffPTDataTy</a>(maintainRevPts);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a1342c0953d7bb9bf0f6f676bd564350e">PersDiffPTDataTy</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(), maintainRevPts);</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; }</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad24ef5326c26db858c73432aa7e67a0a">Steensgaard_WPA</a>)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">// Steensgaard is only field-insensitive (for now?), so no reverse points-to.</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac4e74e6dfee9d08198e0f7e3d76a0646">MutDiffPTDataTy</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a1342c0953d7bb9bf0f6f676bd564350e">PersDiffPTDataTy</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; }</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad6ccf1ce66083278349c5c3111172d78">FSSPARSE_WPA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a088dda60195ab259693977af8414f203">FSTBHC_WPA</a>)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a5896e2aaf59305441a74ede0dfb85845">Options::INCDFPTData</a>)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a639446e6bf9712afa439d089b94aefae">MutIncDFPTDataTy</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a29172b3e8b3891a5d946a493cfcde2e7">PersIncDFPTDataTy</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac130bf326911b8e5396f57daa78566e7">MutDFPTDataTy</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a7087f9d5a1a5b3576173bd6a7fd72163">PersDFPTDataTy</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a412254a7738029bf3ee96f5c15a6bec9">VFS_WPA</a>)</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Mutable) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a7fde3e9b189e988cd0a24d567b136e13">MutVersionedPTDataTy</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae028ae29bdc799f35777b82a39faf5e8">PersVersionedPTDataTy</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;BVDataPTAImpl::BVDataPTAImpl: unexpected points-to backing type!&quot;</span>);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">else</span> <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;no points-to data available&quot;</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a5d3c3094e263bf16a4f312a118c1bd36">ptaImplTy</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#ac0c0855918cb2cdc3d8ebc175acfbd4da84705167ea3a7162ecb9470a8a77b5d8">BVDataImpl</a>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;}</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a57ff2bf45ede7a730a8adaba8e61179d"> 72</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a57ff2bf45ede7a730a8adaba8e61179d">BVDataPTAImpl::finalize</a>()</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;{</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a2026cffd7043208333083ed1a6603e7b">normalizePointsTo</a>();</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a118dabc50024b5cd91095814ade47166">PointerAnalysis::finalize</a>();</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a9ec1d22e20b655e364fea03ba7d923a2">Options::ptDataBacking</a> == PTBackingType::Persistent &amp;&amp; <a class="code" href="classSVF_1_1Options.html#a498a1a05a08be1ffd845aefeb0672bcb">Options::PStat</a>) <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">ptCache</a>.printStats(<span class="stringliteral">&quot;bv-finalize&quot;</span>);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;}</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721"> 82</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">BVDataPTAImpl::expandFIObjs</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; expandedPts)</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;{</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; expandedPts = pts;;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> pit = pts.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), epit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>(); pit!=epit; ++pit)</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a4720426ab75f8d07e780995ffad7d51a">getBaseObjNode</a>(*pit) == *pit || <a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(*pit))</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; {</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; expandedPts |= <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a5a635bc1142c388da1db87d9172c03ab">getAllFieldsObjNode</a>(*pit);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;}</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#aa6a7186152037452599406a74b05d0e1"> 94</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">BVDataPTAImpl::expandFIObjs</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; pts, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; expandedPts)</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;{</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; expandedPts = pts;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a4720426ab75f8d07e780995ffad7d51a">getBaseObjNode</a>(o) == o || <a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(o))</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; expandedPts |= <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a5a635bc1142c388da1db87d9172c03ab">getAllFieldsObjNode</a>(o);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;}</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a7a87ca1a439e871896f92e4342befa2c"> 106</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a7a87ca1a439e871896f92e4342befa2c">BVDataPTAImpl::remapPointsToSets</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;{</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>()-&gt;<a class="code" href="classSVF_1_1PTData.html#af2f176027169e18730848c7a583aed93">remapAllPts</a>();</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;}</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a25c68f9d2b88437778e854ff0d741d1b"> 116</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a25c68f9d2b88437778e854ff0d741d1b">BVDataPTAImpl::writeToFile</a>(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; filename)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;{</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aa0ca07204a31004fb876c6e18d1ac1ca">writeToModule</a>();</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Storing pointer analysis results to &#39;&quot;</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">&quot;&#39;...&quot;</span>;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; error_code err;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="namespaceSVF.html#acde6a1d496f1b655088ccbe023820277">ToolOutputFile</a> F(filename.c_str(), err, llvm::sys::fs::OF_None);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">if</span> (err)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; error opening file for writing!\n&quot;</span>;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; F.os().clear_error();</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="comment">// Write analysis results to file</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), ie = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != ie; ++it) {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> var = it-&gt;first;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;pts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(var);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; stringstream ss;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; F.os() &lt;&lt; var &lt;&lt; <span class="stringliteral">&quot; -&gt; { &quot;</span>;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</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="l00139"></a><span class="lineno"> 139</span>&#160; F.os() &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n: pts) {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; F.os() &lt;&lt; n &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; F.os() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">// Write GepPAGNodes to file</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), ie = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != ie; ++it)</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode = it-&gt;second;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepObjPN.html">GepObjPN</a> *gepObjPN = SVFUtil::dyn_cast&lt;GepObjPN&gt;(pagNode))</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; F.os() &lt;&lt; it-&gt;first &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; F.os() &lt;&lt; <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a4720426ab75f8d07e780995ffad7d51a">getBaseObjNode</a>(it-&gt;first) &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; F.os() &lt;&lt; gepObjPN-&gt;getLocationSet().getOffset() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; F.os() &lt;&lt; <span class="stringliteral">&quot;------\n&quot;</span>;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="comment">// Write BaseNodes insensitivity to file</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> NodeIDs;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), ie = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it != ie; ++it)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode = it-&gt;second;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">if</span> (!isa&lt;ObjPN&gt;(pagNode)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a4720426ab75f8d07e780995ffad7d51a">getBaseObjNode</a>(it-&gt;first);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">if</span> (NodeIDs.test(n)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; F.os() &lt;&lt; n &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; F.os() &lt;&lt; <a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(n) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; NodeIDs.set(n);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; }</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="comment">// Job finish and close file</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; F.os().close();</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">if</span> (!F.os().has_error())</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; F.keep();</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;}</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a290501006cb700db0e07dc577429c928"> 190</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a290501006cb700db0e07dc577429c928">BVDataPTAImpl::readFromFile</a>(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; filename)</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;{</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="comment">// If the module annotations are available, read from there instead</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keyword">auto</span> mainModule = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a9fe3fa15a6a0ec25864cb8439a45596e">getMainLLVMModule</a>();</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">if</span> (mainModule-&gt;getNamedMetadata(<span class="stringliteral">&quot;SVFIR-Annotated&quot;</span>) != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a857cdacfc8cafdeb1431bdfa077ef9b5">readFromModule</a>();</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Loading pointer analysis results from &#39;&quot;</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">&quot;&#39;...&quot;</span>;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; ifstream F(filename.c_str());</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">if</span> (!F.is_open())</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; error opening file for reading!\n&quot;</span>;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; }</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="comment">// Read analysis results from file</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="classSVF_1_1PTData.html">PTDataTy</a> *<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>();</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordtype">string</span> line;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="comment">// Read points-to sets</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordtype">string</span> delimiter1 = <span class="stringliteral">&quot; -&gt; { &quot;</span>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordtype">string</span> delimiter2 = <span class="stringliteral">&quot; }&quot;</span>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; map&lt;NodeID, string&gt; nodePtsMap;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; map&lt;string, PointsTo&gt; strPtsMap;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">while</span> (F.good())</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; <span class="comment">// Parse a single line in the form of &quot;var -&gt; { obj1 obj2 obj3 }&quot;</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; getline(F, line);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordtype">size_t</span> pos = line.find(delimiter1);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">if</span> (pos == string::npos) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">if</span> (line.back() != <span class="charliteral">&#39;}&#39;</span>) <span class="keywordflow">break</span>;</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="comment">// var</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> var = atoi(line.substr(0, pos).c_str());</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="comment">// objs</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; pos = pos + delimiter1.length();</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordtype">size_t</span> len = line.length() - pos - delimiter2.length();</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordtype">string</span> objs = line.substr(pos, len);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> dstPts;</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; <span class="keywordflow">if</span> (!objs.empty())</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="comment">// map the variable ID to its unique string pointer set</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; nodePtsMap[var] = objs;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">if</span> (strPtsMap.count(objs)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; istringstream ss(objs);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">while</span> (ss.good())</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; {</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; ss &gt;&gt; obj;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; dstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(obj);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// map the string pointer set to the parsed PointsTo set</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; strPtsMap[objs] = dstPts;</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; }</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="comment">// map the variable ID to its pointer set</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> t: nodePtsMap)</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; ptD-&gt;<a class="code" href="classSVF_1_1PTData.html#af7aa22f11558c12ff16612174e2221dd">unionPts</a>(t.first, strPtsMap[t.second]);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// Read SVFIR offset nodes</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">while</span> (F.good())</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">if</span> (line == <span class="stringliteral">&quot;------&quot;</span>) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="comment">// Parse a single line in the form of &quot;ID baseNodeID offset&quot;</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; istringstream ss(line);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordtype">size_t</span> offset;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; ss &gt;&gt; <span class="keywordtype">id</span> &gt;&gt; base &gt;&gt; offset;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2b80cf884eedb51f77a5e84def7d8793">getGepObjNode</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(base), <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(offset));</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keywordtype">id</span> == n &amp;&amp; <span class="stringliteral">&quot;Error adding GepObjNode into SVFIR!&quot;</span>);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; getline(F, line);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; }</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// Read BaseNode insensitivity</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">while</span> (F.good())</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; getline(F, line);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="comment">// Parse a single line in the form of &quot;baseNodeID insensitive&quot;</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; istringstream ss(line);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordtype">bool</span> insensitive;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; ss &gt;&gt; base &gt;&gt; insensitive;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">if</span> (insensitive)</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#ac5683fe2e24b393ccc5cb6d8bc92cf2b">setObjFieldInsensitive</a>(base);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="comment">// Update callgraph</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aa534e475fa34fa322c567bc376a3da70">updateCallGraph</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2d2131128ceb3362b5dc89317cfd88a0">getIndirectCallsites</a>());</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; F.close();</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;}</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;</div><div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#aa0ca07204a31004fb876c6e18d1ac1ca"> 302</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aa0ca07204a31004fb876c6e18d1ac1ca">BVDataPTAImpl::writeToModule</a>()</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;{</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keyword">auto</span> irAnnotator = std::make_unique&lt;IRAnnotator&gt;();</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">auto</span> mainModule = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a9fe3fa15a6a0ec25864cb8439a45596e">getMainLLVMModule</a>();</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; irAnnotator-&gt;processAndersenResults(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>, <span class="keyword">this</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;}</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a857cdacfc8cafdeb1431bdfa077ef9b5"> 315</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a857cdacfc8cafdeb1431bdfa077ef9b5">BVDataPTAImpl::readFromModule</a>()</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;{</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keyword">auto</span> irAnnotator = std::make_unique&lt;IRAnnotator&gt;();</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; irAnnotator-&gt;processAndersenResults(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>, <span class="keyword">this</span>, <span class="keyword">false</span>);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</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;</div><div class="line"><a name="l00325"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a8d6cea841b6ded0f80ef2b5784e9b752"> 325</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a8d6cea841b6ded0f80ef2b5784e9b752">BVDataPTAImpl::dumpTopLevelPtsTo</a>()</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;{</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</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="l00328"></a><span class="lineno"> 328</span>&#160; nIter != this-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().end(); ++nIter)</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; {</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(*nIter);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;isValidTopLevelPtr(node))</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; {</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</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_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</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="l00335"></a><span class="lineno"> 335</span>&#160;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</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="l00337"></a><span class="lineno"> 337</span>&#160; {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</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="l00339"></a><span class="lineno"> 339</span>&#160; }</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; {</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</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="l00343"></a><span class="lineno"> 343</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="l00344"></a><span class="lineno"> 344</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</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="l00346"></a><span class="lineno"> 346</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="l00347"></a><span class="lineno"> 347</span>&#160; }</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; }</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; }</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>().flush();</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;}</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;</div><div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a97705b60d294b87ee075a69f04a35d22"> 358</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a97705b60d294b87ee075a69f04a35d22">BVDataPTAImpl::dumpAllPts</a>()</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; <a class="code" href="namespaceSVF.html#a3c2bd95727ec0d9c55c631b6617026c8">OrderedNodeSet</a> pagNodes;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it!=eit; it++)</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; {</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; pagNodes.insert(it-&gt;first);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; }</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n : pagNodes)</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; {</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;----------------------------------------------\n&quot;</span>;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a1a6cee7e690ccb3e53cdc4c3e67b386d">dumpPts</a>(n, this-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(n));</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; }</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;----------------------------------------------\n&quot;</span>;</div><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;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a9830d4676fd424b633f8e4d918734296"> 381</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a9830d4676fd424b633f8e4d918734296">BVDataPTAImpl::onTheFlyCallGraphSolve</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">CallSiteToFunPtrMap</a>&amp; callsites, <a class="code" href="classSVF_1_1PointerAnalysis.html#aa9661d26d1ae9c829a9296d1b6d874f4">CallEdgeMap</a>&amp; newEdges)</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; <span class="keywordflow">for</span>(CallSiteToFunPtrMap::const_iterator iter = callsites.begin(), eiter = callsites.end(); iter!=eiter; ++iter)</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = iter-&gt;first;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#aca6465c72effcaddeb34f55da4555754">isVirtualCallSite</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-&gt;<a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>())))</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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vtbl = <a class="code" href="namespaceSVF_1_1cppUtil.html#a3b00cc9770022f124958513bf1e52a05">getVCallVtblPtr</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(cs-&gt;<a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()));</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#aceb17dfbe137658625e16291127267d1">hasValueNode</a>(vtbl));</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vtblId = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(vtbl);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#ac9f54859eabff4c1e1f5785d57a0c818">resolveCPPIndCalls</a>(cs, <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(vtblId), newEdges);</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; <span class="keywordflow">else</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a40738643202ca6301671f51da3fc1137">resolveIndCalls</a>(iter-&gt;first,<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(iter-&gt;second),newEdges);</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;}</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;</div><div class="line"><a name="l00402"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a2026cffd7043208333083ed1a6603e7b"> 402</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a2026cffd7043208333083ed1a6603e7b">BVDataPTAImpl::normalizePointsTo</a>() {</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#ab6abb822445c9b3f5cb2b7206042e940">SVFIR::MemObjToFieldsMap</a> &amp;memToFieldsMap = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a6f46446d667258b32ddc1ccab48f651c">getMemToFieldsMap</a>();</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#aa5b08d987b37d35e73de88da10a97bc4">SVFIR::NodeLocationSetMap</a> &amp;GepObjNodeMap = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77e3c407ea3990413e371589aa468963">getGepObjNodeMap</a>();</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="comment">// collect each gep node whose base node has been set as field-insensitive</span></div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> dropNodes;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> t: memToFieldsMap){</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = t.first;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* memObj = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(base);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(memObj &amp;&amp; <span class="stringliteral">&quot;Invalid memobj in memToFieldsMap&quot;</span>);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">if</span> (memObj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">isFieldInsensitive</a>()) {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> : t.second) {</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;GepObjPN&gt;(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>))) {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; dropNodes.set(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; } <span class="keywordflow">else</span></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="keywordtype">id</span> == base &amp;&amp; <span class="stringliteral">&quot;Not a GepObj Node or a baseObj Node?&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; }</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; <span class="comment">// remove the collected redundant gep nodes in each pointers&#39;s pts</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nIter != <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nIter) {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = nIter-&gt;first;</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;tmpPts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(n);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj : tmpPts) {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">if</span> (!dropNodes.test(obj))</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseObj = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a4720426ab75f8d07e780995ffad7d51a">getBaseObjNode</a>(obj);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a3f78f60e1947a6d6fbcd3a0ee11e262a">clearPts</a>(n, obj);</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(n, baseObj);</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;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="comment">// clear GepObjNodeMap and memToFieldsMap for redundant gepnodes</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="comment">// and remove those nodes from pag</span></div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n: dropNodes) {</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a4720426ab75f8d07e780995ffad7d51a">getBaseObjNode</a>(n);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <a class="code" href="classSVF_1_1GepObjPN.html">GepObjPN</a> *gepNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1GepObjPN.html">GepObjPN</a>&gt;(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(n));</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> ls = gepNode-&gt;<a class="code" href="classSVF_1_1GepObjPN.html#aeb05e3a512e89c7af36c675e0efeec7e">getLocationSet</a>();</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; GepObjNodeMap.erase(std::make_pair(base, ls));</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; memToFieldsMap[base].reset(n);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a1817b65e76052f11e36a67d6b9efd915">removeGNode</a>(gepNode);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; }</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;}</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;</div><div class="line"><a name="l00452"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac"> 452</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">BVDataPTAImpl::alias</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a339bbddac9d9dffd5ef602200d34c403">MemoryLocation</a> &amp;LocA,</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a339bbddac9d9dffd5ef602200d34c403">MemoryLocation</a> &amp;LocB)</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;{</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">alias</a>(LocA.Ptr, LocB.Ptr);</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;}</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;</div><div class="line"><a name="l00461"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#adaba5a41a60e32d18d964bdb8ae5b2df"> 461</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">BVDataPTAImpl::alias</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V1,</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V2)</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;{</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">alias</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V1),<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V2));</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;}</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;</div><div class="line"><a name="l00470"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a949533e5c99698c7f9862aae5de23687"> 470</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">BVDataPTAImpl::alias</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node2)</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;{</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">alias</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(node1),<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(node2));</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;</div><div class="line"><a name="l00478"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a25720f154731a8c745da10aa76ab8517"> 478</a></span>&#160;<a class="code" href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">BVDataPTAImpl::alias</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; p1, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; p2)</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;{</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts1;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(p1,pts1);</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts2;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(p2,pts2);</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="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a56368369bc37e37b13f19e5eb1890063">containBlackHoleNode</a>(pts1) || <a class="code" href="classSVF_1_1PointerAnalysis.html#a56368369bc37e37b13f19e5eb1890063">containBlackHoleNode</a>(pts2) || pts1.<a class="code" href="classSVF_1_1PointsTo.html#ad78e4109c839914c4f7e37ca78046f1d">intersects</a>(pts2))</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">return</span> llvm::AliasResult::MayAlias;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">return</span> llvm::AliasResult::NoAlias;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIR_html_aa5b08d987b37d35e73de88da10a97bc4"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa5b08d987b37d35e73de88da10a97bc4">SVF::SVFIR::NodeLocationSetMap</a></div><div class="ttdeci">Map&lt; NodeLocationSet, NodeID &gt; NodeLocationSetMap</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00070">SVFIR.h:70</a></div></div>
70
70
  <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#l00361">GenericGraph.h:361</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a7a87ca1a439e871896f92e4342befa2c"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a7a87ca1a439e871896f92e4342befa2c">SVF::BVDataPTAImpl::remapPointsToSets</a></div><div class="ttdeci">void remapPointsToSets(void)</div><div class="ttdoc">Remap all points-to sets to use the current mapping. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00106">PointerAnalysisImpl.cpp:106</a></div></div>
72
- <div class="ttc" id="classSVF_1_1SVFIR_html_a6f46446d667258b32ddc1ccab48f651c"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a6f46446d667258b32ddc1ccab48f651c">SVF::SVFIR::getMemToFieldsMap</a></div><div class="ttdeci">MemObjToFieldsMap &amp; getMemToFieldsMap()</div><div class="ttdoc">Return memToFieldsMap. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00132">SVFIR.h:132</a></div></div>
72
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a6f46446d667258b32ddc1ccab48f651c"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a6f46446d667258b32ddc1ccab48f651c">SVF::SVFIR::getMemToFieldsMap</a></div><div class="ttdeci">MemObjToFieldsMap &amp; getMemToFieldsMap()</div><div class="ttdoc">Return memToFieldsMap. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00123">SVFIR.h:123</a></div></div>
73
73
  <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#l00162">PointerAnalysisImpl.h:162</a></div></div>
74
74
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a56368369bc37e37b13f19e5eb1890063"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a56368369bc37e37b13f19e5eb1890063">SVF::PointerAnalysis::containBlackHoleNode</a></div><div class="ttdeci">bool containBlackHoleNode(const PointsTo &amp;pts)</div><div class="ttdoc">Determine whether a points-to contains a black hole or constant node. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00308">PointerAnalysis.h:308</a></div></div>
75
75
  <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>
@@ -97,18 +97,18 @@ $(function() {
97
97
  <div class="ttc" id="namespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div></div>
98
98
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a25c68f9d2b88437778e854ff0d741d1b"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a25c68f9d2b88437778e854ff0d741d1b">SVF::BVDataPTAImpl::writeToFile</a></div><div class="ttdeci">virtual void writeToFile(const std::string &amp;filename)</div><div class="ttdoc">Interface for analysis result storage on filesystem. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00116">PointerAnalysisImpl.cpp:116</a></div></div>
99
99
  <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>
100
- <div class="ttc" id="classSVF_1_1IRGraph_html_abffddd41cc308b9b3bd5ad4a7f8f1624"><div class="ttname"><a href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">SVF::IRGraph::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00129">IRGraph.h:129</a></div></div>
100
+ <div class="ttc" id="classSVF_1_1IRGraph_html_abffddd41cc308b9b3bd5ad4a7f8f1624"><div class="ttname"><a href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">SVF::IRGraph::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00120">IRGraph.h:120</a></div></div>
101
101
  <div class="ttc" id="classSVF_1_1LLVMModuleSet_html_a9fe3fa15a6a0ec25864cb8439a45596e"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a9fe3fa15a6a0ec25864cb8439a45596e">SVF::LLVMModuleSet::getMainLLVMModule</a></div><div class="ttdeci">Module * getMainLLVMModule() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00193">LLVMModule.h:193</a></div></div>
102
102
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85a412254a7738029bf3ee96f5c15a6bec9"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a412254a7738029bf3ee96f5c15a6bec9">SVF::PointerAnalysis::VFS_WPA</a></div><div class="ttdoc">Versioned sparse flow-sensitive WPA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00080">PointerAnalysis.h:80</a></div></div>
103
103
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85ad24ef5326c26db858c73432aa7e67a0a"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ad24ef5326c26db858c73432aa7e67a0a">SVF::PointerAnalysis::Steensgaard_WPA</a></div><div class="ttdoc">Steensgaard PTA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00074">PointerAnalysis.h:74</a></div></div>
104
104
  <div class="ttc" id="classSVF_1_1PTData_html"><div class="ttname"><a href="classSVF_1_1PTData.html">SVF::PTData</a></div><div class="ttdef"><b>Definition:</b> <a href="AbstractPointsToDS_8h_source.html#l00040">AbstractPointsToDS.h:40</a></div></div>
105
105
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a118dabc50024b5cd91095814ade47166"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a118dabc50024b5cd91095814ade47166">SVF::PointerAnalysis::finalize</a></div><div class="ttdeci">virtual void finalize()</div><div class="ttdoc">Finalization of a pointer analysis, including checking alias correctness. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00218">PointerAnalysis.cpp:218</a></div></div>
106
- <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a1a6cee7e690ccb3e53cdc4c3e67b386d"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a1a6cee7e690ccb3e53cdc4c3e67b386d">SVF::PointerAnalysis::dumpPts</a></div><div class="ttdeci">virtual void dumpPts(NodeID ptr, const PointsTo &amp;pts)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00312">PointerAnalysis.cpp:312</a></div></div>
106
+ <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a1a6cee7e690ccb3e53cdc4c3e67b386d"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a1a6cee7e690ccb3e53cdc4c3e67b386d">SVF::PointerAnalysis::dumpPts</a></div><div class="ttdeci">virtual void dumpPts(NodeID ptr, const PointsTo &amp;pts)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00310">PointerAnalysis.cpp:310</a></div></div>
107
107
  <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#l00365">GenericGraph.h:365</a></div></div>
108
108
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ac130bf326911b8e5396f57daa78566e7"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ac130bf326911b8e5396f57daa78566e7">SVF::BVDataPTAImpl::MutDFPTDataTy</a></div><div class="ttdeci">MutableDFPTData&lt; NodeID, NodeSet, NodeID, PointsTo &gt; MutDFPTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00053">PointerAnalysisImpl.h:53</a></div></div>
109
109
  <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>
110
110
  <div class="ttc" id="classSVF_1_1Options_html_a5896e2aaf59305441a74ede0dfb85845"><div class="ttname"><a href="classSVF_1_1Options.html#a5896e2aaf59305441a74ede0dfb85845">SVF::Options::INCDFPTData</a></div><div class="ttdeci">static const llvm::cl::opt&lt; bool &gt; INCDFPTData</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00145">Options.h:145</a></div></div>
111
- <div class="ttc" id="classSVF_1_1SVFIR_html_a5a635bc1142c388da1db87d9172c03ab"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a5a635bc1142c388da1db87d9172c03ab">SVF::SVFIR::getAllFieldsObjNode</a></div><div class="ttdeci">NodeBS &amp; getAllFieldsObjNode(const MemObj *obj)</div><div class="ttdoc">Get all fields of an object. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00402">SVFIR.cpp:402</a></div></div>
111
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a5a635bc1142c388da1db87d9172c03ab"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a5a635bc1142c388da1db87d9172c03ab">SVF::SVFIR::getAllFieldsObjNode</a></div><div class="ttdeci">NodeBS &amp; getAllFieldsObjNode(const MemObj *obj)</div><div class="ttdoc">Get all fields of an object. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00458">SVFIR.cpp:458</a></div></div>
112
112
  <div class="ttc" id="classSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph&lt; SVFVar, SVFStmt &gt;::iterator</a></div><div class="ttdeci">IDToNodeMapTy::iterator iterator</div><div class="ttdoc">Node Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00338">GenericGraph.h:338</a></div></div>
113
113
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a97705b60d294b87ee075a69f04a35d22"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a97705b60d294b87ee075a69f04a35d22">SVF::BVDataPTAImpl::dumpAllPts</a></div><div class="ttdeci">virtual void dumpAllPts()</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00358">PointerAnalysisImpl.cpp:358</a></div></div>
114
114
  <div class="ttc" id="classSVF_1_1SVFIR_html_ab6abb822445c9b3f5cb2b7206042e940"><div class="ttname"><a href="classSVF_1_1SVFIR.html#ab6abb822445c9b3f5cb2b7206042e940">SVF::SVFIR::MemObjToFieldsMap</a></div><div class="ttdeci">Map&lt; NodeID, NodeBS &gt; MemObjToFieldsMap</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00055">SVFIR.h:55</a></div></div>
@@ -124,7 +124,7 @@ $(function() {
124
124
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85a99d50c1712075e4c3278fc4fa4c9cd2f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a99d50c1712075e4c3278fc4fa4c9cd2f">SVF::PointerAnalysis::AndersenHLCD_WPA</a></div><div class="ttdoc">Hybird lazy cycle detection andersen-style WPA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00069">PointerAnalysis.h:69</a></div></div>
125
125
  <div class="ttc" id="classSVF_1_1PointsTo_html_ad78e4109c839914c4f7e37ca78046f1d"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ad78e4109c839914c4f7e37ca78046f1d">SVF::PointsTo::intersects</a></div><div class="ttdeci">bool intersects(const PointsTo &amp;rhs) const</div><div class="ttdoc">Returns true if this set and rhs share any elements. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00180">PointsTo.cpp:180</a></div></div>
126
126
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a1342c0953d7bb9bf0f6f676bd564350e"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a1342c0953d7bb9bf0f6f676bd564350e">SVF::BVDataPTAImpl::PersDiffPTDataTy</a></div><div class="ttdeci">PersistentDiffPTData&lt; NodeID, NodeSet, NodeID, PointsTo &gt; PersDiffPTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00058">PointerAnalysisImpl.h:58</a></div></div>
127
- <div class="ttc" id="classSVF_1_1IRGraph_html_aceb17dfbe137658625e16291127267d1"><div class="ttname"><a href="classSVF_1_1IRGraph.html#aceb17dfbe137658625e16291127267d1">SVF::IRGraph::hasValueNode</a></div><div class="ttdeci">bool hasValueNode(const Value *V)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00133">IRGraph.h:133</a></div></div>
127
+ <div class="ttc" id="classSVF_1_1IRGraph_html_aceb17dfbe137658625e16291127267d1"><div class="ttname"><a href="classSVF_1_1IRGraph.html#aceb17dfbe137658625e16291127267d1">SVF::IRGraph::hasValueNode</a></div><div class="ttdeci">bool hasValueNode(const Value *V)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00124">IRGraph.h:124</a></div></div>
128
128
  <div class="ttc" id="namespaceSVF_html_acde6a1d496f1b655088ccbe023820277"><div class="ttname"><a href="namespaceSVF.html#acde6a1d496f1b655088ccbe023820277">SVF::ToolOutputFile</a></div><div class="ttdeci">llvm::ToolOutputFile ToolOutputFile</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00103">BasicTypes.h:103</a></div></div>
129
129
  <div class="ttc" id="classSVF_1_1PTData_html_af2f176027169e18730848c7a583aed93"><div class="ttname"><a href="classSVF_1_1PTData.html#af2f176027169e18730848c7a583aed93">SVF::PTData::remapAllPts</a></div><div class="ttdeci">virtual void remapAllPts(void)=0</div><div class="ttdoc">Remaps all points-to sets to use the current mapping. </div></div>
130
130
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ae028ae29bdc799f35777b82a39faf5e8"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ae028ae29bdc799f35777b82a39faf5e8">SVF::BVDataPTAImpl::PersVersionedPTDataTy</a></div><div class="ttdeci">PersistentVersionedPTData&lt; NodeID, NodeSet, NodeID, PointsTo, VersionedVar, Set&lt; VersionedVar &gt; &gt; PersVersionedPTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00061">PointerAnalysisImpl.h:61</a></div></div>
@@ -134,7 +134,7 @@ $(function() {
134
134
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85abf2f61ee9a5f6228db6587a8182ec9f2">SVF::PointerAnalysis::AndersenWaveDiff_WPA</a></div><div class="ttdoc">Diff wave propagation andersen-style WPA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00072">PointerAnalysis.h:72</a></div></div>
135
135
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a85ab6b592fefc45a0674d3295e01638f"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVF::SVFUtil::outs</a></div><div class="ttdeci">raw_ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
136
136
  <div class="ttc" id="PointerAnalysisImpl_8h_html"><div class="ttname"><a href="PointerAnalysisImpl_8h.html">PointerAnalysisImpl.h</a></div></div>
137
- <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a40738643202ca6301671f51da3fc1137"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a40738643202ca6301671f51da3fc1137">SVF::PointerAnalysis::resolveIndCalls</a></div><div class="ttdeci">virtual void resolveIndCalls(const CallBlockNode *cs, const PointsTo &amp;target, CallEdgeMap &amp;newEdges, LLVMCallGraph *callgraph=nullptr)</div><div class="ttdoc">Resolve indirect call edges. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00435">PointerAnalysis.cpp:435</a></div></div>
137
+ <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a40738643202ca6301671f51da3fc1137"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a40738643202ca6301671f51da3fc1137">SVF::PointerAnalysis::resolveIndCalls</a></div><div class="ttdeci">virtual void resolveIndCalls(const CallBlockNode *cs, const PointsTo &amp;target, CallEdgeMap &amp;newEdges, LLVMCallGraph *callgraph=nullptr)</div><div class="ttdoc">Resolve indirect call edges. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00433">PointerAnalysis.cpp:433</a></div></div>
138
138
  <div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
139
139
  <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>
140
140
  <div class="ttc" id="namespaceSVF_1_1cppUtil_html_a3b00cc9770022f124958513bf1e52a05"><div class="ttname"><a href="namespaceSVF_1_1cppUtil.html#a3b00cc9770022f124958513bf1e52a05">SVF::cppUtil::getVCallVtblPtr</a></div><div class="ttdeci">const Value * getVCallVtblPtr(CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="CPPUtil_8cpp_source.html#l00379">CPPUtil.cpp:379</a></div></div>
@@ -147,9 +147,9 @@ $(function() {
147
147
  <div class="ttc" id="classSVF_1_1LLVMModuleSet_html_acf40310917909e4234282c0695a43160"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a></div><div class="ttdeci">static LLVMModuleSet * getLLVMModuleSet()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00069">LLVMModule.h:69</a></div></div>
148
148
  <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>
149
149
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_aee07488c4d53551826439d79b28e2e6d"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">PTDataTy * ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00215">PointerAnalysisImpl.h:215</a></div></div>
150
- <div class="ttc" id="classSVF_1_1SVFIR_html_a77e3c407ea3990413e371589aa468963"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a77e3c407ea3990413e371589aa468963">SVF::SVFIR::getGepObjNodeMap</a></div><div class="ttdeci">NodeLocationSetMap &amp; getGepObjNodeMap()</div><div class="ttdoc">Return GepObjNodeMap. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00137">SVFIR.h:137</a></div></div>
150
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a77e3c407ea3990413e371589aa468963"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a77e3c407ea3990413e371589aa468963">SVF::SVFIR::getGepObjNodeMap</a></div><div class="ttdeci">NodeLocationSetMap &amp; getGepObjNodeMap()</div><div class="ttdoc">Return GepObjNodeMap. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00128">SVFIR.h:128</a></div></div>
151
151
  <div class="ttc" id="classSVF_1_1MemObj_html_a41d85883d44ad77832b020455951c6fc"><div class="ttname"><a href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">SVF::MemObj::isFieldInsensitive</a></div><div class="ttdeci">bool isFieldInsensitive() const</div><div class="ttdoc">Return true if its field limit is 0. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00817">SymbolTableInfo.cpp:817</a></div></div>
152
- <div class="ttc" id="classSVF_1_1SVFIR_html_a2b80cf884eedb51f77a5e84def7d8793"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2b80cf884eedb51f77a5e84def7d8793">SVF::SVFIR::getGepObjNode</a></div><div class="ttdeci">NodeID getGepObjNode(const MemObj *obj, const LocationSet &amp;ls)</div><div class="ttdoc">Get a field SVFIR Object node according to base mem obj and offset. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00349">SVFIR.cpp:349</a></div></div>
152
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a2b80cf884eedb51f77a5e84def7d8793"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2b80cf884eedb51f77a5e84def7d8793">SVF::SVFIR::getGepObjNode</a></div><div class="ttdeci">NodeID getGepObjNode(const MemObj *obj, const LocationSet &amp;ls)</div><div class="ttdoc">Get a field SVFIR Object node according to base mem obj and offset. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00405">SVFIR.cpp:405</a></div></div>
153
153
  <div class="ttc" id="classSVF_1_1CallBlockNode_html_ad3d50024efcfa94b1246c982b43aff2f"><div class="ttname"><a href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">SVF::CallBlockNode::getCallSite</a></div><div class="ttdeci">const Instruction * getCallSite() const</div><div class="ttdoc">Return callsite. </div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00381">ICFGNode.h:381</a></div></div>
154
154
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a94acf249e50ad56f966ddad6843c18f8"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">SVF::BVDataPTAImpl::ptCache</a></div><div class="ttdeci">PersistentPointsToCache&lt; PointsTo &gt; ptCache</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00217">PointerAnalysisImpl.h:217</a></div></div>
155
155
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85ac581e279a4bd69c059b0e5987f839a1f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85ac581e279a4bd69c059b0e5987f839a1f">SVF::PointerAnalysis::AndersenWaveDiffWithType_WPA</a></div><div class="ttdoc">Diff wave propagation with type info andersen-style WPA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00073">PointerAnalysis.h:73</a></div></div>
@@ -175,7 +175,7 @@ $(function() {
175
175
  <div class="ttc" id="classSVF_1_1CallBlockNode_html"><div class="ttname"><a href="classSVF_1_1CallBlockNode.html">SVF::CallBlockNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00364">ICFGNode.h:364</a></div></div>
176
176
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a43c9c773bfa17abf481c33073e30d01b"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">SVF::GenericGraph::getGNode</a></div><div class="ttdeci">NodeType * getGNode(NodeID id) const</div><div class="ttdoc">Get a node. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00387">GenericGraph.h:387</a></div></div>
177
177
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85a6c06b12c95a4aa57edc6bef57514a7e1"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a6c06b12c95a4aa57edc6bef57514a7e1">SVF::PointerAnalysis::AndersenSCD_WPA</a></div><div class="ttdoc">Selective cycle detection andersen-style WPA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00070">PointerAnalysis.h:70</a></div></div>
178
- <div class="ttc" id="classSVF_1_1SVFIR_html_a2d2131128ceb3362b5dc89317cfd88a0"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2d2131128ceb3362b5dc89317cfd88a0">SVF::SVFIR::getIndirectCallsites</a></div><div class="ttdeci">const CallSiteToFunPtrMap &amp; getIndirectCallsites() const</div><div class="ttdoc">Add/get indirect callsites. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00438">SVFIR.h:438</a></div></div>
178
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a2d2131128ceb3362b5dc89317cfd88a0"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2d2131128ceb3362b5dc89317cfd88a0">SVF::SVFIR::getIndirectCallsites</a></div><div class="ttdeci">const CallSiteToFunPtrMap &amp; getIndirectCallsites() const</div><div class="ttdoc">Add/get indirect callsites. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00313">SVFIR.h:313</a></div></div>
179
179
  <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>
180
180
  <div class="ttc" id="classSVF_1_1SVFIR_html"><div class="ttname"><a href="classSVF_1_1SVFIR.html">SVF::SVFIR</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00043">SVFIR.h:43</a></div></div>
181
181
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85acc2e7cbdd04a614a3b6189d2f01042f3"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85acc2e7cbdd04a614a3b6189d2f01042f3">SVF::PointerAnalysis::TypeCPP_WPA</a></div><div class="ttdoc">Type-based analysis for C++. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00085">PointerAnalysis.h:85</a></div></div>
@@ -183,12 +183,12 @@ $(function() {
183
183
  <div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
184
184
  <div class="ttc" id="classSVF_1_1PointsTo_html_a8f741cdffbf3c5fe0f602cdca677dee6"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">SVF::PointsTo::end</a></div><div class="ttdeci">const_iterator end(void) const</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00128">PointsTo.h:128</a></div></div>
185
185
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ad06fbd9a51499c668662b533eeb2e4ac"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">SVF::BVDataPTAImpl::alias</a></div><div class="ttdeci">virtual AliasResult alias(const MemoryLocation &amp;LocA, const MemoryLocation &amp;LocB)</div><div class="ttdoc">Interface expose to users of our pointer analysis, given Location infos. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00452">PointerAnalysisImpl.cpp:452</a></div></div>
186
- <div class="ttc" id="classSVF_1_1SVFIR_html_a4720426ab75f8d07e780995ffad7d51a"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a4720426ab75f8d07e780995ffad7d51a">SVF::SVFIR::getBaseObjNode</a></div><div class="ttdeci">NodeID getBaseObjNode(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00568">SVFIR.h:568</a></div></div>
186
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a4720426ab75f8d07e780995ffad7d51a"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a4720426ab75f8d07e780995ffad7d51a">SVF::SVFIR::getBaseObjNode</a></div><div class="ttdeci">NodeID getBaseObjNode(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00443">SVFIR.h:443</a></div></div>
187
187
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_aa534e475fa34fa322c567bc376a3da70"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#aa534e475fa34fa322c567bc376a3da70">SVF::BVDataPTAImpl::updateCallGraph</a></div><div class="ttdeci">virtual bool updateCallGraph(const CallSiteToFunPtrMap &amp;)</div><div class="ttdoc">Update callgraph. This should be implemented by its subclass. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00172">PointerAnalysisImpl.h:172</a></div></div>
188
- <div class="ttc" id="classSVF_1_1PointerAnalysis_html_ac9f54859eabff4c1e1f5785d57a0c818"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ac9f54859eabff4c1e1f5785d57a0c818">SVF::PointerAnalysis::resolveCPPIndCalls</a></div><div class="ttdeci">virtual void resolveCPPIndCalls(const CallBlockNode *cs, const PointsTo &amp;target, CallEdgeMap &amp;newEdges)</div><div class="ttdoc">Resolve cpp indirect call edges. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00551">PointerAnalysis.cpp:551</a></div></div>
188
+ <div class="ttc" id="classSVF_1_1PointerAnalysis_html_ac9f54859eabff4c1e1f5785d57a0c818"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ac9f54859eabff4c1e1f5785d57a0c818">SVF::PointerAnalysis::resolveCPPIndCalls</a></div><div class="ttdeci">virtual void resolveCPPIndCalls(const CallBlockNode *cs, const PointsTo &amp;target, CallEdgeMap &amp;newEdges)</div><div class="ttdoc">Resolve cpp indirect call edges. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00549">PointerAnalysis.cpp:549</a></div></div>
189
189
  <div class="ttc" id="namespaceSVF_html_ae941b2925716d8ebe14bf190aa8dfd06"><div class="ttname"><a href="namespaceSVF.html#ae941b2925716d8ebe14bf190aa8dfd06">SVF::AliasResult</a></div><div class="ttdeci">llvm::AliasResult AliasResult</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00135">BasicTypes.h:135</a></div></div>
190
190
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html">SVF::PointerAnalysis</a></div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00057">PointerAnalysis.h:57</a></div></div>
191
- <div class="ttc" id="classSVF_1_1SVFIR_html_a2dd4d5f704906270af13e7a07f900eb1"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">SVF::SVFIR::getObject</a></div><div class="ttdeci">const MemObj * getObject(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00483">SVFIR.h:483</a></div></div>
191
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a2dd4d5f704906270af13e7a07f900eb1"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">SVF::SVFIR::getObject</a></div><div class="ttdeci">const MemObj * getObject(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00358">SVFIR.h:358</a></div></div>
192
192
  </div><!-- fragment --></div><!-- contents -->
193
193
  <!-- start footer part -->
194
194
  <hr class="footer"/><address class="footer"><small>