svf-tools 1.0.282 → 1.0.286

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 (434) hide show
  1. package/Dockerfile +8 -5
  2. package/LICENSE.TXT +6 -4
  3. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +1 -1
  4. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +2 -2
  5. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +8 -8
  6. package/SVF-doxygen/html/html/Andersen_8h_source.html +5 -5
  7. package/SVF-doxygen/html/html/BasicTypes_8h_source.html +2 -2
  8. package/SVF-doxygen/html/html/CHG_8cpp_source.html +5 -5
  9. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +2 -2
  10. package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +1 -1
  11. package/SVF-doxygen/html/html/Conditions_8cpp_source.html +1 -1
  12. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
  13. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
  14. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +4 -4
  15. package/SVF-doxygen/html/html/CxtStmt_8h_source.html +1 -1
  16. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +1 -1
  17. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +3 -3
  18. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +3 -3
  19. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +1 -1
  20. package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +2 -2
  21. package/SVF-doxygen/html/html/ExternalPAG_8cpp_source.html +1 -1
  22. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +2 -2
  23. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
  24. package/SVF-doxygen/html/html/FileChecker_8cpp_source.html +3 -3
  25. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +1 -1
  26. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +3 -3
  27. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +1 -1
  28. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +5 -5
  29. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +9 -9
  30. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +8 -8
  31. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +1 -1
  32. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +5 -5
  33. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
  34. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +1 -1
  35. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +6 -6
  36. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +2 -2
  37. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +4 -4
  38. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +1 -1
  39. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +7 -7
  40. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +3 -3
  41. package/SVF-doxygen/html/html/LocationSet_8h_source.html +3 -3
  42. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +2 -2
  43. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +7 -7
  44. package/SVF-doxygen/html/html/MHP_8cpp_source.html +3 -3
  45. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +5 -5
  46. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
  47. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +1 -1
  48. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +7 -7
  49. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +5 -5
  50. package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
  51. package/SVF-doxygen/html/html/MemModel_8cpp_source.html +1 -1
  52. package/SVF-doxygen/html/html/MemPartition_8cpp_source.html +15 -15
  53. package/SVF-doxygen/html/html/MemPartition_8h_source.html +11 -11
  54. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +103 -34
  55. package/SVF-doxygen/html/html/MemRegion_8h.html +3 -3
  56. package/SVF-doxygen/html/html/MemRegion_8h_source.html +97 -109
  57. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +43 -42
  58. package/SVF-doxygen/html/html/MemSSA_8h_source.html +46 -47
  59. package/SVF-doxygen/html/html/MutablePointsToDS_8h_source.html +3 -3
  60. package/SVF-doxygen/html/html/PAGBuilder_8cpp_source.html +5 -5
  61. package/SVF-doxygen/html/html/PAG_8cpp_source.html +3 -3
  62. package/SVF-doxygen/html/html/PCG_8cpp_source.html +2 -2
  63. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +2 -2
  64. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +1 -1
  65. package/SVF-doxygen/html/html/PersistentPointsToCache_8h_source.html +29 -29
  66. package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +7 -7
  67. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp.html +2 -2
  68. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +19 -21
  69. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +81 -81
  70. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +8 -8
  71. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +1 -1
  72. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +8 -8
  73. package/SVF-doxygen/html/html/SVFGBuilder_8h.html +2 -1
  74. package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +20 -19
  75. package/SVF-doxygen/html/html/SVFGEdge_8h_source.html +3 -3
  76. package/SVF-doxygen/html/html/SVFGNode_8h_source.html +3 -3
  77. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +7 -7
  78. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +3 -4
  79. package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +21 -21
  80. package/SVF-doxygen/html/html/SVFG_8cpp.html +1 -0
  81. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +46 -45
  82. package/SVF-doxygen/html/html/SVFG_8h_source.html +12 -13
  83. package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +1 -1
  84. package/SVF-doxygen/html/html/SVFUtil_8cpp.html +9 -8
  85. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +34 -33
  86. package/SVF-doxygen/html/html/SVFUtil_8h.html +14 -2
  87. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +43 -36
  88. package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +1 -1
  89. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +3 -3
  90. package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +2 -2
  91. package/SVF-doxygen/html/html/Steensgaard_8h_source.html +1 -1
  92. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +6 -6
  93. package/SVF-doxygen/html/html/TCT_8cpp_source.html +2 -2
  94. package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +2 -2
  95. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +2 -2
  96. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +1 -1
  97. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +9 -9
  98. package/SVF-doxygen/html/html/VFG_8cpp_source.html +3 -3
  99. package/SVF-doxygen/html/html/VFG_8h_source.html +1 -1
  100. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
  101. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +3 -3
  102. package/SVF-doxygen/html/html/annotated.html +16 -16
  103. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +5 -5
  104. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +4 -4
  105. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
  106. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +1 -1
  107. package/SVF-doxygen/html/html/classSVF_1_1AddrPE.html +1 -1
  108. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +58 -59
  109. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +19 -22
  110. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +48 -49
  111. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +9 -12
  112. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +60 -61
  113. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +2 -5
  114. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +63 -64
  115. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +2 -5
  116. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +59 -60
  117. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +2 -5
  118. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +63 -64
  119. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +5 -8
  120. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +67 -68
  121. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +2 -5
  122. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +3 -3
  123. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +58 -59
  124. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +2 -5
  125. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType-members.html +64 -65
  126. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType.html +4 -7
  127. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +2 -2
  128. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +2 -2
  129. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +135 -138
  130. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.html +1 -1
  131. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +3 -3
  132. package/SVF-doxygen/html/html/classSVF_1_1BranchCondManager.html +2 -2
  133. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +6 -6
  134. package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode.html +2 -2
  135. package/SVF-doxygen/html/html/classSVF_1_1CallCHI.html +2 -2
  136. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +2 -2
  137. package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +2 -2
  138. package/SVF-doxygen/html/html/classSVF_1_1CallMU.html +2 -2
  139. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  140. package/SVF-doxygen/html/html/classSVF_1_1CmpPE.html +1 -1
  141. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +3 -3
  142. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +115 -115
  143. package/SVF-doxygen/html/html/classSVF_1_1CondPointsToSet.html +1 -1
  144. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +10 -10
  145. package/SVF-doxygen/html/html/classSVF_1_1CopyPE.html +1 -1
  146. package/SVF-doxygen/html/html/classSVF_1_1CxtStmt.html +1 -1
  147. package/SVF-doxygen/html/html/classSVF_1_1CxtThread.html +1 -1
  148. package/SVF-doxygen/html/html/classSVF_1_1CxtThreadStmt.html +1 -1
  149. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +1 -1
  150. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +1 -1
  151. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +3 -3
  152. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG-members.html +63 -62
  153. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +94 -92
  154. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +2 -2
  155. package/SVF-doxygen/html/html/classSVF_1_1EntryCHI.html +2 -2
  156. package/SVF-doxygen/html/html/classSVF_1_1ExternalPAG.html +1 -1
  157. package/SVF-doxygen/html/html/classSVF_1_1FIObjPN.html +1 -1
  158. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +65 -66
  159. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +2 -5
  160. package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +4 -4
  161. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +51 -52
  162. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +10 -13
  163. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +62 -63
  164. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +55 -53
  165. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +5 -5
  166. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +74 -75
  167. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +17 -20
  168. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +3 -3
  169. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +5 -5
  170. package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode.html +1 -1
  171. package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode.html +1 -1
  172. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +2 -2
  173. package/SVF-doxygen/html/html/classSVF_1_1GepObjPN.html +1 -1
  174. package/SVF-doxygen/html/html/classSVF_1_1GepPE.html +1 -1
  175. package/SVF-doxygen/html/html/classSVF_1_1GepValPN.html +1 -1
  176. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +7 -7
  177. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +7 -7
  178. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +1 -1
  179. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +3 -3
  180. package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +2 -2
  181. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG-members.html +71 -70
  182. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +88 -86
  183. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +3 -3
  184. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  185. package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode.html +1 -1
  186. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG-members.html +71 -70
  187. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +126 -124
  188. package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +2 -2
  189. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +3 -3
  190. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  191. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +13 -13
  192. package/SVF-doxygen/html/html/classSVF_1_1LoadMU.html +2 -2
  193. package/SVF-doxygen/html/html/classSVF_1_1LoadPE.html +1 -1
  194. package/SVF-doxygen/html/html/classSVF_1_1LocSymTableInfo.html +1 -1
  195. package/SVF-doxygen/html/html/classSVF_1_1LocationSet-members.html +1 -1
  196. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +11 -11
  197. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +3 -3
  198. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +8 -8
  199. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +5 -5
  200. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator-members.html +76 -75
  201. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +515 -506
  202. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +2 -2
  203. package/SVF-doxygen/html/html/classSVF_1_1MSSACHI.html +2 -2
  204. package/SVF-doxygen/html/html/classSVF_1_1MSSADEF.html +1 -1
  205. package/SVF-doxygen/html/html/classSVF_1_1MSSAMU.html +2 -2
  206. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHI.html +1 -1
  207. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +5 -5
  208. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +2 -2
  209. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +4 -4
  210. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +14 -14
  211. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +14 -14
  212. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +3 -3
  213. package/SVF-doxygen/html/html/classSVF_1_1MemRegion-members.html +9 -10
  214. package/SVF-doxygen/html/html/classSVF_1_1MemRegion.html +38 -56
  215. package/SVF-doxygen/html/html/classSVF_1_1MemSSA-members.html +1 -1
  216. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +132 -132
  217. package/SVF-doxygen/html/html/classSVF_1_1MemSSADF.html +5 -5
  218. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +21 -21
  219. package/SVF-doxygen/html/html/classSVF_1_1MutableDFPTData.html +1 -1
  220. package/SVF-doxygen/html/html/classSVF_1_1MutablePTData.html +2 -2
  221. package/SVF-doxygen/html/html/classSVF_1_1NormalGepPE.html +1 -1
  222. package/SVF-doxygen/html/html/classSVF_1_1ObjPN.html +1 -1
  223. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilder.html +6 -6
  224. package/SVF-doxygen/html/html/classSVF_1_1PAGNode.html +1 -1
  225. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +2 -2
  226. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +3 -3
  227. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +1 -1
  228. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +2 -2
  229. package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +1 -1
  230. package/SVF-doxygen/html/html/classSVF_1_1PersistentDFPTData.html +3 -3
  231. package/SVF-doxygen/html/html/classSVF_1_1PersistentDiffPTData.html +4 -4
  232. package/SVF-doxygen/html/html/classSVF_1_1PersistentIncDFPTData.html +2 -2
  233. package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +9 -9
  234. package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache-members.html +28 -27
  235. package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache.html +144 -111
  236. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +21 -21
  237. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +1 -1
  238. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +5 -5
  239. package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode.html +1 -1
  240. package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +2 -2
  241. package/SVF-doxygen/html/html/classSVF_1_1RetMU.html +2 -2
  242. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  243. package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +4 -4
  244. package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +4 -4
  245. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +62 -62
  246. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +37 -37
  247. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +6 -6
  248. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +49 -49
  249. package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +1 -1
  250. package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +4 -4
  251. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +15 -15
  252. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +1 -1
  253. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +52 -53
  254. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +6 -9
  255. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +2 -2
  256. package/SVF-doxygen/html/html/classSVF_1_1StoreCHI.html +2 -2
  257. package/SVF-doxygen/html/html/classSVF_1_1StorePE.html +1 -1
  258. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +5 -5
  259. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +2 -2
  260. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
  261. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
  262. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +3 -3
  263. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +2 -2
  264. package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +2 -2
  265. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +51 -52
  266. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +3 -6
  267. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +10 -10
  268. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE.html +1 -1
  269. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  270. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +2 -2
  271. package/SVF-doxygen/html/html/classSVF_1_1ValPN.html +1 -1
  272. package/SVF-doxygen/html/html/classSVF_1_1VariantGepPE.html +1 -1
  273. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +82 -83
  274. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +5 -8
  275. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +1 -1
  276. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +7 -7
  277. package/SVF-doxygen/html/html/classes.html +2 -2
  278. package/SVF-doxygen/html/html/dir_63dba4c559aa5986900c35e27974bafc.html +83 -0
  279. package/SVF-doxygen/html/html/dir_97aefd0d527b934f1d99a682da8fe6a9.html +2 -0
  280. package/SVF-doxygen/html/html/dir_d1b325ac671111a54e189ae033ba710d.html +87 -0
  281. package/SVF-doxygen/html/html/dir_d44c64559bbebec7f509842c48db8b23.html +2 -0
  282. package/SVF-doxygen/html/html/fastcluster_8cpp.html +263 -0
  283. package/SVF-doxygen/html/html/fastcluster_8cpp_source.html +88 -0
  284. package/SVF-doxygen/html/html/fastcluster_8h.html +278 -0
  285. package/SVF-doxygen/html/html/fastcluster_8h_source.html +86 -0
  286. package/SVF-doxygen/html/html/fastcluster__R__dm_8cpp_8inc.html +79 -0
  287. package/SVF-doxygen/html/html/fastcluster__R__dm_8cpp_8inc_source.html +77 -0
  288. package/SVF-doxygen/html/html/fastcluster__dm_8cpp_8inc.html +89 -0
  289. package/SVF-doxygen/html/html/fastcluster__dm_8cpp_8inc_source.html +80 -0
  290. package/SVF-doxygen/html/html/files.html +220 -214
  291. package/SVF-doxygen/html/html/functions_a.html +10 -10
  292. package/SVF-doxygen/html/html/functions_c.html +11 -11
  293. package/SVF-doxygen/html/html/functions_e.html +4 -7
  294. package/SVF-doxygen/html/html/functions_f.html +17 -14
  295. package/SVF-doxygen/html/html/functions_func.html +10 -10
  296. package/SVF-doxygen/html/html/functions_func_c.html +5 -5
  297. package/SVF-doxygen/html/html/functions_func_g.html +33 -30
  298. package/SVF-doxygen/html/html/functions_func_h.html +1 -1
  299. package/SVF-doxygen/html/html/functions_func_i.html +1 -1
  300. package/SVF-doxygen/html/html/functions_func_m.html +2 -2
  301. package/SVF-doxygen/html/html/functions_func_o.html +3 -3
  302. package/SVF-doxygen/html/html/functions_func_p.html +1 -1
  303. package/SVF-doxygen/html/html/functions_func_s.html +1 -1
  304. package/SVF-doxygen/html/html/functions_g.html +30 -27
  305. package/SVF-doxygen/html/html/functions_h.html +1 -1
  306. package/SVF-doxygen/html/html/functions_i.html +7 -7
  307. package/SVF-doxygen/html/html/functions_l.html +4 -4
  308. package/SVF-doxygen/html/html/functions_m.html +2 -2
  309. package/SVF-doxygen/html/html/functions_o.html +7 -9
  310. package/SVF-doxygen/html/html/functions_p.html +17 -13
  311. package/SVF-doxygen/html/html/functions_r.html +8 -4
  312. package/SVF-doxygen/html/html/functions_s.html +7 -7
  313. package/SVF-doxygen/html/html/functions_t.html +3 -3
  314. package/SVF-doxygen/html/html/functions_type_c.html +1 -1
  315. package/SVF-doxygen/html/html/functions_type_e.html +0 -3
  316. package/SVF-doxygen/html/html/functions_type_f.html +4 -1
  317. package/SVF-doxygen/html/html/functions_type_l.html +1 -1
  318. package/SVF-doxygen/html/html/functions_type_p.html +3 -3
  319. package/SVF-doxygen/html/html/functions_type_s.html +1 -1
  320. package/SVF-doxygen/html/html/functions_vars_c.html +5 -5
  321. package/SVF-doxygen/html/html/functions_vars_f.html +3 -3
  322. package/SVF-doxygen/html/html/functions_vars_i.html +1 -1
  323. package/SVF-doxygen/html/html/functions_vars_p.html +1 -1
  324. package/SVF-doxygen/html/html/globals_c.html +82 -74
  325. package/SVF-doxygen/html/html/globals_enum.html +3 -0
  326. package/SVF-doxygen/html/html/globals_eval.html +19 -0
  327. package/SVF-doxygen/html/html/globals_f.html +6 -3
  328. package/SVF-doxygen/html/html/globals_func_c.html +46 -38
  329. package/SVF-doxygen/html/html/globals_func_f.html +3 -0
  330. package/SVF-doxygen/html/html/globals_func_h.html +4 -0
  331. package/SVF-doxygen/html/html/globals_h.html +22 -0
  332. package/SVF-doxygen/html/html/globals_r.html +3 -3
  333. package/SVF-doxygen/html/html/globals_s.html +4 -6
  334. package/SVF-doxygen/html/html/hierarchy.html +2 -2
  335. package/SVF-doxygen/html/html/menudata.js +2 -0
  336. package/SVF-doxygen/html/html/namespaceSVF.html +3 -3
  337. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +250 -122
  338. package/SVF-doxygen/html/html/namespacemembers_c.html +3 -0
  339. package/SVF-doxygen/html/html/namespacemembers_e.html +3 -0
  340. package/SVF-doxygen/html/html/namespacemembers_func.html +23 -10
  341. package/SVF-doxygen/html/html/namespacemembers_m.html +3 -0
  342. package/SVF-doxygen/html/html/namespacemembers_p.html +4 -1
  343. package/SVF-doxygen/html/html/namespacemembers_type_e.html +3 -0
  344. package/SVF-doxygen/html/html/namespacemembers_type_p.html +1 -1
  345. package/SVF-doxygen/html/html/search/all_1.js +10 -10
  346. package/SVF-doxygen/html/html/search/all_10.js +12 -11
  347. package/SVF-doxygen/html/html/search/all_12.js +3 -3
  348. package/SVF-doxygen/html/html/search/all_13.js +9 -9
  349. package/SVF-doxygen/html/html/search/all_14.js +4 -4
  350. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  351. package/SVF-doxygen/html/html/search/all_3.js +14 -11
  352. package/SVF-doxygen/html/html/search/all_5.js +2 -1
  353. package/SVF-doxygen/html/html/search/all_6.js +9 -3
  354. package/SVF-doxygen/html/html/search/all_7.js +14 -13
  355. package/SVF-doxygen/html/html/search/all_8.js +8 -1
  356. package/SVF-doxygen/html/html/search/all_9.js +4 -4
  357. package/SVF-doxygen/html/html/search/all_c.js +2 -2
  358. package/SVF-doxygen/html/html/search/all_d.js +5 -4
  359. package/SVF-doxygen/html/html/search/all_e.js +2 -2
  360. package/SVF-doxygen/html/html/search/all_f.js +3 -3
  361. package/SVF-doxygen/html/html/search/classes_4.js +2 -1
  362. package/SVF-doxygen/html/html/search/enums_4.js +1 -2
  363. package/SVF-doxygen/html/html/search/enums_5.js +2 -2
  364. package/SVF-doxygen/html/html/search/enums_6.js +2 -3
  365. package/SVF-doxygen/html/html/search/enums_7.js +3 -6
  366. package/SVF-doxygen/html/html/search/enums_8.js +6 -1
  367. package/SVF-doxygen/html/html/search/enums_9.js +1 -5
  368. package/SVF-doxygen/html/html/search/enums_a.js +5 -1
  369. package/SVF-doxygen/html/html/search/enums_b.js +1 -4
  370. package/SVF-doxygen/html/html/search/enums_c.html +26 -0
  371. package/SVF-doxygen/html/html/search/enums_c.js +7 -0
  372. package/SVF-doxygen/html/html/search/enumvalues_7.js +5 -0
  373. package/SVF-doxygen/html/html/search/files_5.js +4 -0
  374. package/SVF-doxygen/html/html/search/functions_0.js +10 -10
  375. package/SVF-doxygen/html/html/search/functions_10.js +2 -2
  376. package/SVF-doxygen/html/html/search/functions_2.js +8 -5
  377. package/SVF-doxygen/html/html/search/functions_5.js +1 -0
  378. package/SVF-doxygen/html/html/search/functions_6.js +14 -13
  379. package/SVF-doxygen/html/html/search/functions_7.js +2 -1
  380. package/SVF-doxygen/html/html/search/functions_8.js +1 -1
  381. package/SVF-doxygen/html/html/search/functions_b.js +3 -2
  382. package/SVF-doxygen/html/html/search/functions_d.js +1 -1
  383. package/SVF-doxygen/html/html/search/functions_e.js +2 -1
  384. package/SVF-doxygen/html/html/search/searchdata.js +1 -1
  385. package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
  386. package/SVF-doxygen/html/html/search/typedefs_2.js +1 -1
  387. package/SVF-doxygen/html/html/search/typedefs_4.js +2 -1
  388. package/SVF-doxygen/html/html/search/typedefs_5.js +2 -1
  389. package/SVF-doxygen/html/html/search/typedefs_b.js +1 -1
  390. package/SVF-doxygen/html/html/search/typedefs_f.js +3 -3
  391. package/SVF-doxygen/html/html/search/variables_10.js +1 -1
  392. package/SVF-doxygen/html/html/search/variables_14.js +2 -2
  393. package/SVF-doxygen/html/html/search/variables_15.js +1 -1
  394. package/SVF-doxygen/html/html/search/variables_3.js +5 -5
  395. package/SVF-doxygen/html/html/search/variables_6.js +3 -3
  396. package/SVF-doxygen/html/html/search/variables_9.js +1 -1
  397. package/SVF-doxygen/html/html/search/variables_d.js +1 -1
  398. package/SVF-doxygen/html/html/search/variables_e.js +2 -2
  399. package/SVF-doxygen/html/html/structSVF_1_1MemRegion_1_1equalMemRegion.html +3 -3
  400. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1equalNodeBS-members.html +81 -0
  401. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1equalNodeBS.html +134 -0
  402. package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1equalPointsTo.html +3 -3
  403. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  404. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +1 -1
  405. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PAG_01_5_01_4.html +1 -1
  406. package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
  407. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
  408. package/include/FastCluster/LICENSE.TXT +13 -0
  409. package/include/FastCluster/fastcluster.h +79 -0
  410. package/include/Graphs/SVFG.h +4 -4
  411. package/include/Graphs/SVFGOPT.h +4 -4
  412. package/include/MSSA/MemPartition.h +10 -10
  413. package/include/MSSA/MemRegion.h +40 -64
  414. package/include/MSSA/MemSSA.h +1 -4
  415. package/include/MSSA/SVFGBuilder.h +1 -0
  416. package/include/MemoryModel/LocationSet.h +3 -3
  417. package/include/MemoryModel/PersistentPointsToCache.h +19 -8
  418. package/include/MemoryModel/PointerAnalysisImpl.h +3 -4
  419. package/include/Util/SVFUtil.h +44 -1
  420. package/lib/CMakeLists.txt +4 -1
  421. package/lib/FastCluster/LICENSE.TXT +13 -0
  422. package/lib/FastCluster/fastcluster.cpp +170 -0
  423. package/lib/FastCluster/fastcluster_R_dm.cpp.inc +115 -0
  424. package/lib/FastCluster/fastcluster_dm.cpp.inc +1795 -0
  425. package/lib/Graphs/SVFG.cpp +12 -12
  426. package/lib/Graphs/SVFGOPT.cpp +6 -6
  427. package/lib/MSSA/MemPartition.cpp +31 -31
  428. package/lib/MSSA/MemRegion.cpp +59 -35
  429. package/lib/MSSA/MemSSA.cpp +5 -0
  430. package/lib/MemoryModel/LocationSet.cpp +2 -2
  431. package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -4
  432. package/lib/Util/SVFUtil.cpp +3 -2
  433. package/lib/WPA/FlowSensitive.cpp +34 -0
  434. package/package.json +1 -1
@@ -66,7 +66,7 @@ $(function() {
66
66
  <div class="title">FlowSensitive.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="FlowSensitive_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">//===- FlowSensitive.cpp -- Sparse flow-sensitive pointer analysis------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * FlowSensitive.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: Oct 28, 2013</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="DCHG_8h.html">SVF-FE/DCHG.h</a>&quot;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>&quot;</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="TypeBasedHeapCloning_8h.html">Util/TypeBasedHeapCloning.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="WPAStat_8h.html">WPA/WPAStat.h</a>&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="FlowSensitive_8h.html">WPA/FlowSensitive.h</a>&quot;</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<a class="code" href="classSVF_1_1FlowSensitive.html">FlowSensitive</a>* <a class="code" href="classSVF_1_1FlowSensitive.html#a4ad2095dc708df07602de25e4a004776">FlowSensitive::fspta</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#ad6243c1317503bed39411dab47c83da7"> 47</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#ad6243c1317503bed39411dab47c83da7">FlowSensitive::initialize</a>()</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;{</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a431ec4f85eb0f029e5740b92fd9ceb32">PointerAnalysis::initialize</a>();</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; stat = <span class="keyword">new</span> <a class="code" href="classSVF_1_1FlowSensitiveStat.html">FlowSensitiveStat</a>(<span class="keyword">this</span>);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; ander = <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a74134978db1c0d9c71122bc63f4b73c1">AndersenWaveDiff::createAndersenWaveDiff</a>(getPAG());</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="comment">// When evaluating ctir aliases, we want the whole SVFG.</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a7704ff30e6fc5043313adf5c655bcd4a">Options::OPTSVFG</a>)</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; svfg = <a class="code" href="classSVF_1_1Options.html#ad148549070b042aeddafca39ee949c77">Options::CTirAliasEval</a> ? memSSA.buildFullSVFG(ander) : memSSA.buildPTROnlySVFG(ander);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; svfg = memSSA.buildPTROnlySVFGWithoutOPT(ander);</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; setGraph(svfg);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="comment">//AndersenWaveDiff::releaseAndersenWaveDiff();</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;}</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a267f7198600dde3054feb40def7a6681"> 67</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a267f7198600dde3054feb40def7a6681">FlowSensitive::analyze</a>()</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; <span class="keywordtype">bool</span> limitTimerSet = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a757815a2c758695176120509ceb0ce70">SVFUtil::startAnalysisLimitTimer</a>(<a class="code" href="classSVF_1_1Options.html#ad03c4697dd4da2b6adde112e3ee1884b">Options::FsTimeLimit</a>);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; initialize();</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; <span class="keywordtype">double</span> start = stat-&gt;getClk(<span class="keyword">true</span>);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot;Start Solving Constraints\n&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; <span class="keywordflow">do</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; numOfIteration++;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">if</span>(0 == numOfIteration % OnTheFlyIterBudgetForStat)</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; dumpStat();</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; callGraphSCC-&gt;find();</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; initWorklist();</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; solveWorklist();</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">while</span> (updateCallGraph(getIndirectCallsites()));</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; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot;Finish Solving Constraints\n&quot;</span>));</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"> 94</span>&#160; <span class="comment">// Reset the time-up alarm; analysis is done.</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a168f7f7a3a8c70dbf2b5b4269cd4c7c5">SVFUtil::stopAnalysisLimitTimer</a>(limitTimerSet);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk(<span class="keyword">true</span>);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; solveTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ad148549070b042aeddafca39ee949c77">Options::CTirAliasEval</a>)</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; printCTirAliasStats();</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="l00106"></a><span class="lineno"> 106</span>&#160; finalize();</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;</div><div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#afed358369102f01f6fe88b1433e704c3"> 112</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#afed358369102f01f6fe88b1433e704c3">FlowSensitive::finalize</a>()</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;{</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a3061c75f7491dd737222b1b877721070">Options::DumpVFG</a>)</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; svfg-&gt;dump(<span class="stringliteral">&quot;fs_solved&quot;</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; nodeStack = <a class="code" href="classSVF_1_1WPASolver.html#aaa932894d00b69cfa741f9987a9cc6b8">WPASolver&lt;SVFG*&gt;::SCCDetect</a>();</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">while</span> (nodeStack.empty() == <span class="keyword">false</span>)</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.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rep = nodeStack.top();</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; nodeStack.pop();</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; subNodes = getSCCDetector()-&gt;subNodes(rep);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">if</span> (subNodes.count() &gt; maxSCCSize)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; maxSCCSize = subNodes.count();</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">if</span> (subNodes.count() &gt; 1)</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; numOfNodesInSCC += subNodes.count();</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; numOfSCC++;</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;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a118dabc50024b5cd91095814ade47166">PointerAnalysis::finalize</a>();</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;}</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div><div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a5f8a1493f7550a3f7a295e25d87bce12"> 138</a></span>&#160;<a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; <a class="code" href="classSVF_1_1FlowSensitive.html#a5f8a1493f7550a3f7a295e25d87bce12">FlowSensitive::SCCDetect</a>()</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;{</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; nodeStack = <a class="code" href="classSVF_1_1WPAFSSolver.html#a2d4cfae34bd4a55f1fe03881c87f8708">WPASVFGFSSolver::SCCDetect</a>();</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; sccTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">return</span> nodeStack;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;}</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a16f594356ea565eb1fed2acea516a16b"> 150</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a16f594356ea565eb1fed2acea516a16b">FlowSensitive::processNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</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_1VFGNode.html">SVFGNode</a>* node = svfg-&gt;getSVFGNode(nodeId);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">if</span> (processSVFGNode(node))</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; propagate(&amp;node);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; clearAllDFOutVarFlag(node);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;}</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a979f89495966d71f9b470d832384ebd6"> 162</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a979f89495966d71f9b470d832384ebd6">FlowSensitive::processSVFGNode</a>(<a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node)</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;{</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1AddrVFGNode.html">AddrSVFGNode</a>* addr = SVFUtil::dyn_cast&lt;AddrSVFGNode&gt;(node))</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; numOfProcessedAddr++;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">if</span>(processAddr(addr))</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; }</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1CopyVFGNode.html">CopySVFGNode</a>* copy = SVFUtil::dyn_cast&lt;CopySVFGNode&gt;(node))</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; numOfProcessedCopy++;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">if</span>(processCopy(copy))</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1GepVFGNode.html">GepSVFGNode</a>* gep = SVFUtil::dyn_cast&lt;GepSVFGNode&gt;(node))</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; numOfProcessedGep++;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">if</span>(processGep(gep))</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; }</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1LoadVFGNode.html">LoadSVFGNode</a>* load = SVFUtil::dyn_cast&lt;LoadSVFGNode&gt;(node))</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; numOfProcessedLoad++;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">if</span>(processLoad(load))</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; }</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* store = SVFUtil::dyn_cast&lt;StoreSVFGNode&gt;(node))</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; numOfProcessedStore++;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">if</span>(processStore(store))</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; changed = <span class="keyword">true</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">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PHIVFGNode.html">PHISVFGNode</a>* phi = SVFUtil::dyn_cast&lt;PHISVFGNode&gt;(node))</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; numOfProcessedPhi++;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">if</span> (processPhi(phi))</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;MSSAPHISVFGNode&gt;(node) || SVFUtil::isa&lt;FormalINSVFGNode&gt;(node)</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; || SVFUtil::isa&lt;FormalOUTSVFGNode&gt;(node) || SVFUtil::isa&lt;ActualINSVFGNode&gt;(node)</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; || SVFUtil::isa&lt;ActualOUTSVFGNode&gt;(node))</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; {</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; numOfProcessedMSSANode++;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;ActualParmSVFGNode&gt;(node) || SVFUtil::isa&lt;FormalParmSVFGNode&gt;(node)</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; || SVFUtil::isa&lt;ActualRetSVFGNode&gt;(node) || SVFUtil::isa&lt;FormalRetSVFGNode&gt;(node)</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; || SVFUtil::isa&lt;NullPtrSVFGNode&gt;(node))</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;CmpVFGNode&gt;(node) || SVFUtil::isa&lt;BinaryOPVFGNode&gt;(node) || SVFUtil::dyn_cast&lt;UnaryOPVFGNode&gt;(node))</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; }</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;unexpected kind of SVFG nodes&quot;</span>);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; processTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;}</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#af849ab5a07049cb08e6b0d8023577862"> 236</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#af849ab5a07049cb08e6b0d8023577862">FlowSensitive::propFromSrcToDst</a>(<a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge)</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;{</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</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; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DirectSVFGEdge.html">DirectSVFGEdge</a>* dirEdge = SVFUtil::dyn_cast&lt;DirectSVFGEdge&gt;(edge))</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; changed = propAlongDirectEdge(dirEdge);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* indEdge = SVFUtil::dyn_cast&lt;IndirectSVFGEdge&gt;(edge))</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; changed = propAlongIndirectEdge(indEdge);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;new kind of svfg edge?&quot;</span>);</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="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; propagationTime += (end - start) /<a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">return</span> changed;</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="l00256"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#ad3518931d3b8a0671cbeb975f853b956"> 256</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#ad3518931d3b8a0671cbeb975f853b956">FlowSensitive::propAlongDirectEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1DirectSVFGEdge.html">DirectSVFGEdge</a>* edge)</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;{</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>();</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="comment">// If this is an actual-param or formal-ret, top-level pointer&#39;s pts must be</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="comment">// propagated from src to dst.</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmSVFGNode</a>* ap = SVFUtil::dyn_cast&lt;ActualParmSVFGNode&gt;(src))</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; changed = propagateFromAPToFP(ap, dst);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetSVFGNode</a>* fp = SVFUtil::dyn_cast&lt;FormalRetSVFGNode&gt;(src))</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; changed = propagateFromFRToAR(fp, dst);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">else</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; <span class="comment">// Direct SVFG edge links between def and use of a top-level pointer.</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="comment">// There&#39;s no points-to information propagated along direct edge.</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="comment">// Since the top-level pointer&#39;s value has been changed at src node,</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// return TRUE to put dst node into the work list.</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; directPropaTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;}</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a3574977acd161925cadcb05de6d3247d"> 287</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a3574977acd161925cadcb05de6d3247d">FlowSensitive::propagateFromAPToFP</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmSVFGNode</a>* ap, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst)</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;{</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmSVFGNode</a>* fp = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmSVFGNode</a>&gt;(dst);</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(fp &amp;&amp; <span class="stringliteral">&quot;expecting a formal param node&quot;</span>);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> pagDst = fp-&gt;<a class="code" href="classSVF_1_1FormalParmVFGNode.html#ab1a9031c1fc5102e072b5035151c131c">getParam</a>()-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a> &amp;srcCPts = getPts(ap-&gt;<a class="code" href="classSVF_1_1ActualParmVFGNode.html#a8932b197a076ab3069a9fe8b73e7fc32">getParam</a>()-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordtype">bool</span> changed = unionPts(pagDst, srcCPts);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;}</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;</div><div class="line"><a name="l00303"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a3abffe1434386b1ce349fbed0cfe0967"> 303</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a3abffe1434386b1ce349fbed0cfe0967">FlowSensitive::propagateFromFRToAR</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetSVFGNode</a>* fr, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst)</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;{</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetSVFGNode</a>* ar = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetSVFGNode</a>&gt;(dst);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(ar &amp;&amp; <span class="stringliteral">&quot;expecting an actual return node&quot;</span>);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> pagDst = ar-&gt;<a class="code" href="classSVF_1_1ActualRetVFGNode.html#a4bcfddf05da46729c670b4f450f9d606">getRev</a>()-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a> &amp; srcCPts = getPts(fr-&gt;<a class="code" href="classSVF_1_1FormalRetVFGNode.html#a62a894e71fcf7a3db19c0488d96a7262">getRet</a>()-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordtype">bool</span> changed = unionPts(pagDst, srcCPts);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;}</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;</div><div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#aeb1e002519123a67f8d18f78cda04bac"> 318</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#aeb1e002519123a67f8d18f78cda04bac">FlowSensitive::propAlongIndirectEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* edge)</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;{</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>();</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</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="comment">// Get points-to targets may be used by next SVFG node.</span></div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="comment">// Propagate points-to set for node used in dst.</span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a>&amp; pts = edge-&gt;<a class="code" href="classSVF_1_1IndirectSVFGEdge.html#abfabfa0478515d18e43ae47214e38cc6">getPointsTo</a>();</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">for</span> (PointsTo::iterator ptdIt = pts.begin(), ptdEit = pts.end(); ptdIt != ptdEit; ++ptdIt)</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = *ptdIt;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">if</span> (propVarPtsFromSrcToDst(ptd, src, dst))</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">if</span> (isFieldInsensitive(ptd))</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; {</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; allFields = getAllFieldsObjNode(ptd);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator fieldIt = allFields.begin(), fieldEit = allFields.end();</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; fieldIt != fieldEit; ++fieldIt)</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; {</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">if</span> (propVarPtsFromSrcToDst(*fieldIt, src, dst))</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</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; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; indirectPropaTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">return</span> changed;</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_1FlowSensitive.html#ae571767cc5936cf631a44976d8277e91"> 358</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#ae571767cc5936cf631a44976d8277e91">FlowSensitive::propVarPtsFromSrcToDst</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> var, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst)</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;{</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StoreSVFGNode&gt;(src))</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; <span class="keywordflow">if</span> (updateInFromOut(src, var, dst, var))</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; changed = <span class="keyword">true</span>;</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">else</span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; {</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">if</span> (updateInFromIn(src, var, dst, var))</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; changed = <span class="keyword">true</span>;</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; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;}</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;</div><div class="line"><a name="l00377"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#abb37c5e4e6fa4742e8dbcf397aea086e"> 377</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#abb37c5e4e6fa4742e8dbcf397aea086e">FlowSensitive::processAddr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrVFGNode.html">AddrSVFGNode</a>* addr)</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;{</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcID = addr-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>();</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">if</span> (isFieldInsensitive(srcID))</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; srcID = getFIObjNode(srcID);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordtype">bool</span> changed = addPts(addr-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), srcID);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; addrTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;}</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;</div><div class="line"><a name="l00394"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#aa401cc90de4e1c6842f08a43a28c5aa1"> 394</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#aa401cc90de4e1c6842f08a43a28c5aa1">FlowSensitive::processCopy</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyVFGNode.html">CopySVFGNode</a>* copy)</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;{</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordtype">bool</span> changed = unionPts(copy-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), copy-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>());</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; copyTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;}</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;</div><div class="line"><a name="l00406"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#aa36fd1387e948e83107431179d819067"> 406</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#aa36fd1387e948e83107431179d819067">FlowSensitive::processPhi</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PHIVFGNode.html">PHISVFGNode</a>* phi)</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;{</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> pagDst = phi-&gt;<a class="code" href="classSVF_1_1PHIVFGNode.html#abd54e567a0826bbec277302e0c4f78a2">getRes</a>()-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericNode.html#ab6dc1ae41ae23b383f8add474caa7429">PHISVFGNode::OPVers::const_iterator</a> it = phi-&gt;<a class="code" href="classSVF_1_1PHIVFGNode.html#a2e00f6d582aa4ac9aa116cc6d5c79369">opVerBegin</a>(), eit = phi-&gt;<a class="code" href="classSVF_1_1PHIVFGNode.html#add18c60773871744123d12a037e78e20">opVerEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = it-&gt;second-&gt;getId();</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a>&amp; srcPts = getPts(src);</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordflow">if</span> (unionPts(pagDst, srcPts))</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; }</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; phiTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;}</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;</div><div class="line"><a name="l00427"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#ae017c39ac471727d06868e0eacafd791"> 427</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#ae017c39ac471727d06868e0eacafd791">FlowSensitive::processGep</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepVFGNode.html">GepSVFGNode</a>* edge)</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;{</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a>&amp; srcPts = getPts(edge-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>());</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a> tmpDstPts;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;VariantGepPE&gt;(edge-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a4dd7615f42971da9b6ec1dc04f0ec4e6">getPAGEdge</a>()))</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="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : srcPts)</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">if</span> (isBlkObjOrConstantObj(o))</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; {</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; tmpDstPts.set(o);</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; }</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; setObjFieldInsensitive(o);</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; tmpDstPts.set(getFIObjNode(o));</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1NormalGepPE.html">NormalGepPE</a>* normalGep = SVFUtil::dyn_cast&lt;NormalGepPE&gt;(edge-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a4dd7615f42971da9b6ec1dc04f0ec4e6">getPAGEdge</a>()))</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; {</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : srcPts)</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; {</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">if</span> (isBlkObjOrConstantObj(o))</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; tmpDstPts.set(o);</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">continue</span>;</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="l00458"></a><span class="lineno"> 458</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fieldSrcPtdNode = getGepObjNode(o, normalGep-&gt;getLocationSet());</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; tmpDstPts.set(fieldSrcPtdNode);</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; }</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; }</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordflow">else</span></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; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;FlowSensitive::processGep: New type GEP edge type?&quot;</span>);</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="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">if</span> (unionPts(edge-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), tmpDstPts))</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; gepTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keywordflow">return</span> changed;</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="l00475"></a><span class="lineno"> 475</span>&#160;</div><div class="line"><a name="l00482"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a9968530b3dee876f55e6659530decf27"> 482</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a9968530b3dee876f55e6659530decf27">FlowSensitive::processLoad</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadVFGNode.html">LoadSVFGNode</a>* load)</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;{</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstVar = load-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>();</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a>&amp; srcPts = getPts(load-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>());</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">for</span> (PointsTo::iterator ptdIt = srcPts.begin(); ptdIt != srcPts.end(); ++ptdIt)</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; {</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = *ptdIt;</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordflow">if</span> (pag-&gt;isConstantObj(ptd) || pag-&gt;isNonPointerObj(ptd))</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keywordflow">if</span> (unionPtsFromIn(load, ptd, dstVar))</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">if</span> (isFieldInsensitive(ptd))</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; {</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; allFields = getAllFieldsObjNode(ptd);</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator fieldIt = allFields.begin(), fieldEit = allFields.end();</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; fieldIt != fieldEit; ++fieldIt)</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keywordflow">if</span> (unionPtsFromIn(load, *fieldIt, dstVar))</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; }</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; }</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; }</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; loadTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;}</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;</div><div class="line"><a name="l00525"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#aa37d591d2d4f65957e840bef4d142a6a"> 525</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#aa37d591d2d4f65957e840bef4d142a6a">FlowSensitive::processStore</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* store)</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;{</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a> &amp; dstPts = getPts(store-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">if</span> (dstPts.empty())</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">if</span>(getPts(store-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>()).<a class="code" href="cuddInt_8c.html#a5beb39637a978181c7c17714ac96672e">empty</a>() == <span class="keyword">false</span>)</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; {</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordflow">for</span> (PointsTo::iterator it = dstPts.begin(), eit = dstPts.end(); it != eit; ++it)</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; {</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = *it;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keywordflow">if</span> (pag-&gt;isConstantObj(ptd) || pag-&gt;isNonPointerObj(ptd))</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">if</span> (unionPtsFromTop(store, store-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>(), ptd))</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; }</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; storeTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="keywordtype">double</span> updateStart = stat-&gt;getClk();</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="comment">// also merge the DFInSet to DFOutSet.</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;<span class="comment"></span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> singleton;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordtype">bool</span> isSU = isStrongUpdate(store, singleton);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">if</span> (isSU)</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; {</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; svfgHasSU.set(store-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordflow">if</span> (strongUpdateOutFromIn(store, singleton))</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; }</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; {</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; svfgHasSU.reset(store-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordflow">if</span> (weakUpdateOutFromIn(store))</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; }</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keywordtype">double</span> updateEnd = stat-&gt;getClk();</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; updateTime += (updateEnd - updateStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160;</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160;}</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;</div><div class="line"><a name="l00585"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a42a7e39e0e15576742f8ba7c32579ea2"> 585</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a42a7e39e0e15576742f8ba7c32579ea2">FlowSensitive::isStrongUpdate</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>&amp; singleton)</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;{</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordtype">bool</span> isSU = <span class="keyword">false</span>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* store = SVFUtil::dyn_cast&lt;StoreSVFGNode&gt;(node))</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; {</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a>&amp; dstCPSet = getPts(store-&gt;getPAGDstNodeID());</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keywordflow">if</span> (dstCPSet.count() == 1)</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; {</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; PointsTo::iterator it = dstCPSet.begin();</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; singleton = *it;</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="comment">// Strong update can be made if this points-to target is not heap, array or field-insensitive.</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keywordflow">if</span> (!isHeapMemObj(singleton) &amp;&amp; !isArrayMemObj(singleton)</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; &amp;&amp; pag-&gt;getBaseObj(singleton)-&gt;isFieldInsensitive() == <span class="keyword">false</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; &amp;&amp; !isLocalVarInRecursiveFun(singleton))</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; {</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; isSU = <span class="keyword">true</span>;</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; }</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; }</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; }</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keywordflow">return</span> isSU;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;}</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;</div><div class="line"><a name="l00612"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a9d81537ec20196315a9a2541477ec5bf"> 612</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a9d81537ec20196315a9a2541477ec5bf">FlowSensitive::updateCallGraph</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#afc2e412fe96c1fad268ba0255a2042e7">CallSiteToFunPtrMap</a>&amp; callsites)</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;{</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#aa9661d26d1ae9c829a9296d1b6d874f4">CallEdgeMap</a> newEdges;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; onTheFlyCallGraphSolve(callsites, newEdges);</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <a class="code" href="classSVF_1_1FlowSensitive.html#a69289c48fa91f850da90de080b9d26e5">SVFGEdgeSetTy</a> svfgEdges;</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; connectCallerAndCallee(newEdges, svfgEdges);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; updateConnectedNodes(svfgEdges);</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; updateCallGraphTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keywordflow">return</span> (!newEdges.empty());</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;}</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;</div><div class="line"><a name="l00631"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#ad7640ada31b5cb542e492e27ab4fe1af"> 631</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#ad7640ada31b5cb542e492e27ab4fe1af">FlowSensitive::connectCallerAndCallee</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#aa9661d26d1ae9c829a9296d1b6d874f4">CallEdgeMap</a>&amp; newEdges, <a class="code" href="classSVF_1_1FlowSensitive.html#a69289c48fa91f850da90de080b9d26e5">SVFGEdgeSetTy</a>&amp; edges)</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160;{</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; CallEdgeMap::const_iterator iter = newEdges.begin();</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; CallEdgeMap::const_iterator eiter = newEdges.end();</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">for</span> (; iter != eiter; iter++)</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; {</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <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="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ac1422cd8b449fdb4a1f7c539364e4c41">FunctionSet</a> &amp; functions = iter-&gt;second;</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="keywordflow">for</span> (FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; {</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = *func_iter;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; svfg-&gt;connectCallerAndCallee(cs, func, edges);</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; }</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; }</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160;}</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160;</div><div class="line"><a name="l00651"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a1886b4964efa92cfff761493d12768b8"> 651</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a1886b4964efa92cfff761493d12768b8">FlowSensitive::updateConnectedNodes</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a69289c48fa91f850da90de080b9d26e5">SVFGEdgeSetTy</a>&amp; edges)</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160;{</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keywordflow">for</span> (SVFGEdgeSetTy::const_iterator it = edges.begin(), eit = edges.end();</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; {</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *it;</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dstNode = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;PHISVFGNode&gt;(dstNode))</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; {</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; pushIntoWorklist(dstNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; }</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;FormalINSVFGNode&gt;(dstNode) || SVFUtil::isa&lt;ActualOUTSVFGNode&gt;(dstNode))</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; {</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160;</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* srcNode = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>();</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a>&amp; pts = SVFUtil::cast&lt;IndirectSVFGEdge&gt;(edge)-&gt;getPointsTo();</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="keywordflow">for</span> (PointsTo::iterator ptdIt = pts.begin(), ptdEit = pts.end(); ptdIt != ptdEit; ++ptdIt)</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; {</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = *ptdIt;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160;</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">if</span> (propVarPtsAfterCGUpdated(ptd, srcNode, dstNode))</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <span class="keywordflow">if</span> (isFieldInsensitive(ptd))</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; {</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; allFields = getAllFieldsObjNode(ptd);</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator fieldIt = allFields.begin(), fieldEit = allFields.end();</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; fieldIt != fieldEit; ++fieldIt)</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; {</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="keywordflow">if</span> (propVarPtsAfterCGUpdated(*fieldIt, srcNode, dstNode))</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; }</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; }</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; }</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="keywordflow">if</span> (changed)</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; pushIntoWorklist(dstNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; }</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160;}</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160;</div><div class="line"><a name="l00703"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a9e7fbc4c1d056fbef07498de8cbb1cd9"> 703</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a9e7fbc4c1d056fbef07498de8cbb1cd9">FlowSensitive::propVarPtsAfterCGUpdated</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> var, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst)</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;{</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StoreSVFGNode&gt;(src))</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; {</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keywordflow">if</span> (propDFOutToIn(src, var, dst, var))</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; }</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; {</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keywordflow">if</span> (propDFInToIn(src, var, dst, var))</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; }</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160;}</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160;</div><div class="line"><a name="l00718"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a023d0b492deaba40c593332cf1b2e3f6"> 718</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a023d0b492deaba40c593332cf1b2e3f6">FlowSensitive::printCTirAliasStats</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;{</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html">DCHGraph</a> *dchg = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1DCHGraph.html">DCHGraph</a>&gt;(chgraph);</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(dchg &amp;&amp; <span class="stringliteral">&quot;eval-ctir-aliases needs DCHG.&quot;</span>);</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="comment">// &lt; SVFG node ID (loc), PAG node of interest (top-level pointer) &gt;.</span></div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;std::pair&lt;NodeID, NodeID&gt;</a>&gt; cmpLocs;</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFG::iterator</a> npair = svfg-&gt;begin(); npair != svfg-&gt;end(); ++npair)</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; {</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> loc = npair-&gt;first;</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *node = npair-&gt;second;</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="comment">// Only care about loads, stores, and GEPs.</span></div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a> *stmt = SVFUtil::dyn_cast&lt;StmtSVFGNode&gt;(node))</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; {</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;LoadSVFGNode&gt;(stmt) &amp;&amp; !SVFUtil::isa&lt;StoreSVFGNode&gt;(stmt)</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; &amp;&amp; !SVFUtil::isa&lt;GepSVFGNode&gt;(stmt))</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; {</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; }</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160;</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a21d2fd8bbef0c6f6ddddb5387569a7fa">TypeBasedHeapCloning::getRawCTirMetadata</a>(stmt-&gt;getInst() ? stmt-&gt;getInst() : stmt-&gt;getPAGEdge()-&gt;getValue()))</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; {</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; }</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160;</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = 0;</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;LoadSVFGNode&gt;(stmt))</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; {</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; p = stmt-&gt;getPAGSrcNodeID();</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; }</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;StoreSVFGNode&gt;(stmt))</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; {</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; p = stmt-&gt;getPAGDstNodeID();</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; }</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;GepSVFGNode&gt;(stmt))</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; {</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; p = stmt-&gt;getPAGSrcNodeID();</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; }</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; {</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="comment">// Not interested.</span></div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; }</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160;</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; cmpLocs.insert(std::make_pair(loc, p));</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; }</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; }</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160;</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <span class="keywordtype">unsigned</span> mayAliases = 0, noAliases = 0;</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; countAliases(cmpLocs, &amp;mayAliases, &amp;noAliases);</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <span class="keywordtype">unsigned</span> total = mayAliases + noAliases;</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">llvm::outs</a>() &lt;&lt; <span class="stringliteral">&quot;eval-ctir-aliases &quot;</span></div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; &lt;&lt; total &lt;&lt; <span class="stringliteral">&quot; &quot;</span></div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; &lt;&lt; mayAliases &lt;&lt; <span class="stringliteral">&quot; &quot;</span></div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; &lt;&lt; noAliases &lt;&lt; <span class="stringliteral">&quot; &quot;</span></div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">llvm::outs</a>() &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;TOTAL : &quot;</span> &lt;&lt; total &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;MAY : &quot;</span> &lt;&lt; mayAliases &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;MAY % : &quot;</span> &lt;&lt; 100 * ((double)mayAliases/(<span class="keywordtype">double</span>)(total)) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;NO : &quot;</span> &lt;&lt; noAliases &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;NO % : &quot;</span> &lt;&lt; 100 * ((double)noAliases/(<span class="keywordtype">double</span>)(total)) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160;}</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160;</div><div class="line"><a name="l00783"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a94dc671f524ed3ed00f5a54b13f18e18"> 783</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a94dc671f524ed3ed00f5a54b13f18e18">FlowSensitive::countAliases</a>(<a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt;std::pair&lt;NodeID, NodeID&gt;&gt; cmp, <span class="keywordtype">unsigned</span> *mayAliases, <span class="keywordtype">unsigned</span> *noAliases)</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160;{</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <span class="keywordflow">for</span> (std::pair&lt;NodeID, NodeID&gt; locPA : cmp)</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; {</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <span class="comment">// loc doesn&#39;t make a difference for FSPTA.</span></div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = locPA.second;</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="keywordflow">for</span> (std::pair&lt;NodeID, NodeID&gt; locPB : cmp)</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; {</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keywordflow">if</span> (locPB == locPA) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160;</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> q = locPB.second;</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160;</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordflow">switch</span> (alias(p, q))</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; {</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="keywordflow">case</span> llvm::NoAlias:</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; ++(*noAliases);</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <span class="keywordflow">case</span> llvm::MayAlias:</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; ++(*mayAliases);</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="stringliteral">&quot;Not May/NoAlias?&quot;</span>);</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; }</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; }</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; }</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160;}</div><div class="ttc" id="Andersen_8h_html"><div class="ttname"><a href="Andersen_8h.html">Andersen.h</a></div></div>
69
+ <a href="FlowSensitive_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">//===- FlowSensitive.cpp -- Sparse flow-sensitive pointer analysis------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * FlowSensitive.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: Oct 28, 2013</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="DCHG_8h.html">SVF-FE/DCHG.h</a>&quot;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>&quot;</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="TypeBasedHeapCloning_8h.html">Util/TypeBasedHeapCloning.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="WPAStat_8h.html">WPA/WPAStat.h</a>&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="FlowSensitive_8h.html">WPA/FlowSensitive.h</a>&quot;</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<a class="code" href="classSVF_1_1FlowSensitive.html">FlowSensitive</a>* <a class="code" href="classSVF_1_1FlowSensitive.html#a4ad2095dc708df07602de25e4a004776">FlowSensitive::fspta</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#ad6243c1317503bed39411dab47c83da7"> 47</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#ad6243c1317503bed39411dab47c83da7">FlowSensitive::initialize</a>()</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;{</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a431ec4f85eb0f029e5740b92fd9ceb32">PointerAnalysis::initialize</a>();</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; stat = <span class="keyword">new</span> <a class="code" href="classSVF_1_1FlowSensitiveStat.html">FlowSensitiveStat</a>(<span class="keyword">this</span>);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; ander = <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a74134978db1c0d9c71122bc63f4b73c1">AndersenWaveDiff::createAndersenWaveDiff</a>(getPAG());</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="comment">// When evaluating ctir aliases, we want the whole SVFG.</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a7704ff30e6fc5043313adf5c655bcd4a">Options::OPTSVFG</a>)</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; svfg = <a class="code" href="classSVF_1_1Options.html#ad148549070b042aeddafca39ee949c77">Options::CTirAliasEval</a> ? memSSA.buildFullSVFG(ander) : memSSA.buildPTROnlySVFG(ander);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; svfg = memSSA.buildPTROnlySVFGWithoutOPT(ander);</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; setGraph(svfg);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="comment">//AndersenWaveDiff::releaseAndersenWaveDiff();</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;}</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a267f7198600dde3054feb40def7a6681"> 67</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a267f7198600dde3054feb40def7a6681">FlowSensitive::analyze</a>()</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; <span class="keywordtype">bool</span> limitTimerSet = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a757815a2c758695176120509ceb0ce70">SVFUtil::startAnalysisLimitTimer</a>(<a class="code" href="classSVF_1_1Options.html#ad03c4697dd4da2b6adde112e3ee1884b">Options::FsTimeLimit</a>);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; initialize();</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; <span class="keywordtype">double</span> start = stat-&gt;getClk(<span class="keyword">true</span>);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot;Start Solving Constraints\n&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; <span class="keywordflow">do</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; numOfIteration++;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">if</span>(0 == numOfIteration % OnTheFlyIterBudgetForStat)</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; dumpStat();</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; callGraphSCC-&gt;find();</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; initWorklist();</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; solveWorklist();</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">while</span> (updateCallGraph(getIndirectCallsites()));</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; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVFUtil::pasMsg</a>(<span class="stringliteral">&quot;Finish Solving Constraints\n&quot;</span>));</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"> 94</span>&#160; <span class="comment">// Reset the time-up alarm; analysis is done.</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a168f7f7a3a8c70dbf2b5b4269cd4c7c5">SVFUtil::stopAnalysisLimitTimer</a>(limitTimerSet);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk(<span class="keyword">true</span>);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; solveTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ad148549070b042aeddafca39ee949c77">Options::CTirAliasEval</a>)</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; printCTirAliasStats();</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="l00106"></a><span class="lineno"> 106</span>&#160; finalize();</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;</div><div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#afed358369102f01f6fe88b1433e704c3"> 112</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#afed358369102f01f6fe88b1433e704c3">FlowSensitive::finalize</a>()</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;{</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a3061c75f7491dd737222b1b877721070">Options::DumpVFG</a>)</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; svfg-&gt;dump(<span class="stringliteral">&quot;fs_solved&quot;</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; nodeStack = <a class="code" href="classSVF_1_1WPASolver.html#aaa932894d00b69cfa741f9987a9cc6b8">WPASolver&lt;SVFG*&gt;::SCCDetect</a>();</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">while</span> (nodeStack.empty() == <span class="keyword">false</span>)</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.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rep = nodeStack.top();</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; nodeStack.pop();</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; subNodes = getSCCDetector()-&gt;subNodes(rep);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">if</span> (subNodes.count() &gt; maxSCCSize)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; maxSCCSize = subNodes.count();</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">if</span> (subNodes.count() &gt; 1)</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; numOfNodesInSCC += subNodes.count();</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; numOfSCC++;</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;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#a118dabc50024b5cd91095814ade47166">PointerAnalysis::finalize</a>();</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;}</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div><div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a5f8a1493f7550a3f7a295e25d87bce12"> 138</a></span>&#160;<a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; <a class="code" href="classSVF_1_1FlowSensitive.html#a5f8a1493f7550a3f7a295e25d87bce12">FlowSensitive::SCCDetect</a>()</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;{</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; nodeStack = <a class="code" href="classSVF_1_1WPAFSSolver.html#a2d4cfae34bd4a55f1fe03881c87f8708">WPASVFGFSSolver::SCCDetect</a>();</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; sccTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">return</span> nodeStack;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;}</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a16f594356ea565eb1fed2acea516a16b"> 150</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a16f594356ea565eb1fed2acea516a16b">FlowSensitive::processNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</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_1VFGNode.html">SVFGNode</a>* node = svfg-&gt;getSVFGNode(nodeId);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">if</span> (processSVFGNode(node))</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; propagate(&amp;node);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; clearAllDFOutVarFlag(node);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;}</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a979f89495966d71f9b470d832384ebd6"> 162</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a979f89495966d71f9b470d832384ebd6">FlowSensitive::processSVFGNode</a>(<a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node)</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;{</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1AddrVFGNode.html">AddrSVFGNode</a>* addr = SVFUtil::dyn_cast&lt;AddrSVFGNode&gt;(node))</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; numOfProcessedAddr++;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">if</span>(processAddr(addr))</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; }</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1CopyVFGNode.html">CopySVFGNode</a>* copy = SVFUtil::dyn_cast&lt;CopySVFGNode&gt;(node))</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; numOfProcessedCopy++;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">if</span>(processCopy(copy))</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1GepVFGNode.html">GepSVFGNode</a>* gep = SVFUtil::dyn_cast&lt;GepSVFGNode&gt;(node))</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; numOfProcessedGep++;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">if</span>(processGep(gep))</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; }</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1LoadVFGNode.html">LoadSVFGNode</a>* load = SVFUtil::dyn_cast&lt;LoadSVFGNode&gt;(node))</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; numOfProcessedLoad++;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">if</span>(processLoad(load))</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; }</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* store = SVFUtil::dyn_cast&lt;StoreSVFGNode&gt;(node))</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; numOfProcessedStore++;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">if</span>(processStore(store))</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; changed = <span class="keyword">true</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">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PHIVFGNode.html">PHISVFGNode</a>* phi = SVFUtil::dyn_cast&lt;PHISVFGNode&gt;(node))</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; numOfProcessedPhi++;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">if</span> (processPhi(phi))</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;MSSAPHISVFGNode&gt;(node) || SVFUtil::isa&lt;FormalINSVFGNode&gt;(node)</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; || SVFUtil::isa&lt;FormalOUTSVFGNode&gt;(node) || SVFUtil::isa&lt;ActualINSVFGNode&gt;(node)</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; || SVFUtil::isa&lt;ActualOUTSVFGNode&gt;(node))</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; {</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; numOfProcessedMSSANode++;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;ActualParmSVFGNode&gt;(node) || SVFUtil::isa&lt;FormalParmSVFGNode&gt;(node)</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; || SVFUtil::isa&lt;ActualRetSVFGNode&gt;(node) || SVFUtil::isa&lt;FormalRetSVFGNode&gt;(node)</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; || SVFUtil::isa&lt;NullPtrSVFGNode&gt;(node))</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;CmpVFGNode&gt;(node) || SVFUtil::isa&lt;BinaryOPVFGNode&gt;(node) || SVFUtil::dyn_cast&lt;UnaryOPVFGNode&gt;(node))</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; }</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;unexpected kind of SVFG nodes&quot;</span>);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; processTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;}</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#af849ab5a07049cb08e6b0d8023577862"> 236</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#af849ab5a07049cb08e6b0d8023577862">FlowSensitive::propFromSrcToDst</a>(<a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge)</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;{</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</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; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DirectSVFGEdge.html">DirectSVFGEdge</a>* dirEdge = SVFUtil::dyn_cast&lt;DirectSVFGEdge&gt;(edge))</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; changed = propAlongDirectEdge(dirEdge);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* indEdge = SVFUtil::dyn_cast&lt;IndirectSVFGEdge&gt;(edge))</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; changed = propAlongIndirectEdge(indEdge);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;new kind of svfg edge?&quot;</span>);</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="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; propagationTime += (end - start) /<a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">return</span> changed;</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="l00256"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#ad3518931d3b8a0671cbeb975f853b956"> 256</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#ad3518931d3b8a0671cbeb975f853b956">FlowSensitive::propAlongDirectEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1DirectSVFGEdge.html">DirectSVFGEdge</a>* edge)</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;{</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>();</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="comment">// If this is an actual-param or formal-ret, top-level pointer&#39;s pts must be</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="comment">// propagated from src to dst.</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmSVFGNode</a>* ap = SVFUtil::dyn_cast&lt;ActualParmSVFGNode&gt;(src))</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; changed = propagateFromAPToFP(ap, dst);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetSVFGNode</a>* fp = SVFUtil::dyn_cast&lt;FormalRetSVFGNode&gt;(src))</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; changed = propagateFromFRToAR(fp, dst);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">else</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; <span class="comment">// Direct SVFG edge links between def and use of a top-level pointer.</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="comment">// There&#39;s no points-to information propagated along direct edge.</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="comment">// Since the top-level pointer&#39;s value has been changed at src node,</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// return TRUE to put dst node into the work list.</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; directPropaTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;}</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a3574977acd161925cadcb05de6d3247d"> 287</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a3574977acd161925cadcb05de6d3247d">FlowSensitive::propagateFromAPToFP</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmSVFGNode</a>* ap, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst)</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;{</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmSVFGNode</a>* fp = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmSVFGNode</a>&gt;(dst);</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(fp &amp;&amp; <span class="stringliteral">&quot;expecting a formal param node&quot;</span>);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> pagDst = fp-&gt;<a class="code" href="classSVF_1_1FormalParmVFGNode.html#ab1a9031c1fc5102e072b5035151c131c">getParam</a>()-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a> &amp;srcCPts = getPts(ap-&gt;<a class="code" href="classSVF_1_1ActualParmVFGNode.html#a8932b197a076ab3069a9fe8b73e7fc32">getParam</a>()-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordtype">bool</span> changed = unionPts(pagDst, srcCPts);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;}</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;</div><div class="line"><a name="l00303"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a3abffe1434386b1ce349fbed0cfe0967"> 303</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a3abffe1434386b1ce349fbed0cfe0967">FlowSensitive::propagateFromFRToAR</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetSVFGNode</a>* fr, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst)</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;{</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetSVFGNode</a>* ar = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetSVFGNode</a>&gt;(dst);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(ar &amp;&amp; <span class="stringliteral">&quot;expecting an actual return node&quot;</span>);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> pagDst = ar-&gt;<a class="code" href="classSVF_1_1ActualRetVFGNode.html#a4bcfddf05da46729c670b4f450f9d606">getRev</a>()-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a> &amp; srcCPts = getPts(fr-&gt;<a class="code" href="classSVF_1_1FormalRetVFGNode.html#a62a894e71fcf7a3db19c0488d96a7262">getRet</a>()-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordtype">bool</span> changed = unionPts(pagDst, srcCPts);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;}</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;</div><div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#aeb1e002519123a67f8d18f78cda04bac"> 318</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#aeb1e002519123a67f8d18f78cda04bac">FlowSensitive::propAlongIndirectEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* edge)</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;{</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>();</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</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="comment">// Get points-to targets may be used by next SVFG node.</span></div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="comment">// Propagate points-to set for node used in dst.</span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a>&amp; pts = edge-&gt;<a class="code" href="classSVF_1_1IndirectSVFGEdge.html#abfabfa0478515d18e43ae47214e38cc6">getPointsTo</a>();</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">for</span> (PointsTo::iterator ptdIt = pts.begin(), ptdEit = pts.end(); ptdIt != ptdEit; ++ptdIt)</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = *ptdIt;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">if</span> (propVarPtsFromSrcToDst(ptd, src, dst))</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">if</span> (isFieldInsensitive(ptd))</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; {</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; allFields = getAllFieldsObjNode(ptd);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator fieldIt = allFields.begin(), fieldEit = allFields.end();</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; fieldIt != fieldEit; ++fieldIt)</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; {</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">if</span> (propVarPtsFromSrcToDst(*fieldIt, src, dst))</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</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; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; indirectPropaTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">return</span> changed;</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_1FlowSensitive.html#ae571767cc5936cf631a44976d8277e91"> 358</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#ae571767cc5936cf631a44976d8277e91">FlowSensitive::propVarPtsFromSrcToDst</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> var, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst)</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;{</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StoreSVFGNode&gt;(src))</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; <span class="keywordflow">if</span> (updateInFromOut(src, var, dst, var))</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; changed = <span class="keyword">true</span>;</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">else</span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; {</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">if</span> (updateInFromIn(src, var, dst, var))</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; changed = <span class="keyword">true</span>;</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; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;}</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;</div><div class="line"><a name="l00377"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#abb37c5e4e6fa4742e8dbcf397aea086e"> 377</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#abb37c5e4e6fa4742e8dbcf397aea086e">FlowSensitive::processAddr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrVFGNode.html">AddrSVFGNode</a>* addr)</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;{</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcID = addr-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>();</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">if</span> (isFieldInsensitive(srcID))</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; srcID = getFIObjNode(srcID);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordtype">bool</span> changed = addPts(addr-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), srcID);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; addrTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;}</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;</div><div class="line"><a name="l00394"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#aa401cc90de4e1c6842f08a43a28c5aa1"> 394</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#aa401cc90de4e1c6842f08a43a28c5aa1">FlowSensitive::processCopy</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyVFGNode.html">CopySVFGNode</a>* copy)</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;{</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordtype">bool</span> changed = unionPts(copy-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), copy-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>());</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; copyTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;}</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;</div><div class="line"><a name="l00406"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#aa36fd1387e948e83107431179d819067"> 406</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#aa36fd1387e948e83107431179d819067">FlowSensitive::processPhi</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PHIVFGNode.html">PHISVFGNode</a>* phi)</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;{</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> pagDst = phi-&gt;<a class="code" href="classSVF_1_1PHIVFGNode.html#abd54e567a0826bbec277302e0c4f78a2">getRes</a>()-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericNode.html#ab6dc1ae41ae23b383f8add474caa7429">PHISVFGNode::OPVers::const_iterator</a> it = phi-&gt;<a class="code" href="classSVF_1_1PHIVFGNode.html#a2e00f6d582aa4ac9aa116cc6d5c79369">opVerBegin</a>(), eit = phi-&gt;<a class="code" href="classSVF_1_1PHIVFGNode.html#add18c60773871744123d12a037e78e20">opVerEnd</a>(); it != eit; ++it)</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = it-&gt;second-&gt;getId();</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a>&amp; srcPts = getPts(src);</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordflow">if</span> (unionPts(pagDst, srcPts))</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; }</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; phiTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;}</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;</div><div class="line"><a name="l00427"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#ae017c39ac471727d06868e0eacafd791"> 427</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#ae017c39ac471727d06868e0eacafd791">FlowSensitive::processGep</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepVFGNode.html">GepSVFGNode</a>* edge)</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;{</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a>&amp; srcPts = getPts(edge-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>());</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a> tmpDstPts;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;VariantGepPE&gt;(edge-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a4dd7615f42971da9b6ec1dc04f0ec4e6">getPAGEdge</a>()))</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="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : srcPts)</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">if</span> (isBlkObjOrConstantObj(o))</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; {</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; tmpDstPts.set(o);</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; }</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; setObjFieldInsensitive(o);</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; tmpDstPts.set(getFIObjNode(o));</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1NormalGepPE.html">NormalGepPE</a>* normalGep = SVFUtil::dyn_cast&lt;NormalGepPE&gt;(edge-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a4dd7615f42971da9b6ec1dc04f0ec4e6">getPAGEdge</a>()))</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; {</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : srcPts)</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; {</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">if</span> (isBlkObjOrConstantObj(o))</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; tmpDstPts.set(o);</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">continue</span>;</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="l00458"></a><span class="lineno"> 458</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fieldSrcPtdNode = getGepObjNode(o, normalGep-&gt;getLocationSet());</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; tmpDstPts.set(fieldSrcPtdNode);</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; }</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; }</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordflow">else</span></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; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;FlowSensitive::processGep: New type GEP edge type?&quot;</span>);</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="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">if</span> (unionPts(edge-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), tmpDstPts))</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; gepTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keywordflow">return</span> changed;</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="l00475"></a><span class="lineno"> 475</span>&#160;</div><div class="line"><a name="l00482"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a9968530b3dee876f55e6659530decf27"> 482</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a9968530b3dee876f55e6659530decf27">FlowSensitive::processLoad</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadVFGNode.html">LoadSVFGNode</a>* load)</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;{</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstVar = load-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>();</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a>&amp; srcPts = getPts(load-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>());</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">for</span> (PointsTo::iterator ptdIt = srcPts.begin(); ptdIt != srcPts.end(); ++ptdIt)</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; {</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = *ptdIt;</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordflow">if</span> (pag-&gt;isConstantObj(ptd) || pag-&gt;isNonPointerObj(ptd))</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keywordflow">if</span> (unionPtsFromIn(load, ptd, dstVar))</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">if</span> (isFieldInsensitive(ptd))</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; {</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; allFields = getAllFieldsObjNode(ptd);</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator fieldIt = allFields.begin(), fieldEit = allFields.end();</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; fieldIt != fieldEit; ++fieldIt)</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keywordflow">if</span> (unionPtsFromIn(load, *fieldIt, dstVar))</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; }</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; }</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; }</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; loadTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;}</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;</div><div class="line"><a name="l00525"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#aa37d591d2d4f65957e840bef4d142a6a"> 525</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#aa37d591d2d4f65957e840bef4d142a6a">FlowSensitive::processStore</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* store)</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;{</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a> &amp; dstPts = getPts(store-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">if</span> (dstPts.empty())</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">if</span>(getPts(store-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>()).<a class="code" href="cuddInt_8c.html#a5beb39637a978181c7c17714ac96672e">empty</a>() == <span class="keyword">false</span>)</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; {</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordflow">for</span> (PointsTo::iterator it = dstPts.begin(), eit = dstPts.end(); it != eit; ++it)</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; {</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = *it;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keywordflow">if</span> (pag-&gt;isConstantObj(ptd) || pag-&gt;isNonPointerObj(ptd))</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">if</span> (unionPtsFromTop(store, store-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>(), ptd))</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; }</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; storeTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="keywordtype">double</span> updateStart = stat-&gt;getClk();</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="comment">// also merge the DFInSet to DFOutSet.</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;<span class="comment"></span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> singleton;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordtype">bool</span> isSU = isStrongUpdate(store, singleton);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">if</span> (isSU)</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; {</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; svfgHasSU.set(store-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordflow">if</span> (strongUpdateOutFromIn(store, singleton))</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; }</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; {</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; svfgHasSU.reset(store-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordflow">if</span> (weakUpdateOutFromIn(store))</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; }</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keywordtype">double</span> updateEnd = stat-&gt;getClk();</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; updateTime += (updateEnd - updateStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160;</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160;}</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;</div><div class="line"><a name="l00585"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a42a7e39e0e15576742f8ba7c32579ea2"> 585</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a42a7e39e0e15576742f8ba7c32579ea2">FlowSensitive::isStrongUpdate</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>&amp; singleton)</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;{</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordtype">bool</span> isSU = <span class="keyword">false</span>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* store = SVFUtil::dyn_cast&lt;StoreSVFGNode&gt;(node))</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; {</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a>&amp; dstCPSet = getPts(store-&gt;getPAGDstNodeID());</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keywordflow">if</span> (dstCPSet.count() == 1)</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; {</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; PointsTo::iterator it = dstCPSet.begin();</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; singleton = *it;</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="comment">// Strong update can be made if this points-to target is not heap, array or field-insensitive.</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keywordflow">if</span> (!isHeapMemObj(singleton) &amp;&amp; !isArrayMemObj(singleton)</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; &amp;&amp; pag-&gt;getBaseObj(singleton)-&gt;isFieldInsensitive() == <span class="keyword">false</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; &amp;&amp; !isLocalVarInRecursiveFun(singleton))</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; {</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; isSU = <span class="keyword">true</span>;</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; }</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; }</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; }</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keywordflow">return</span> isSU;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;}</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;</div><div class="line"><a name="l00612"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a9d81537ec20196315a9a2541477ec5bf"> 612</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a9d81537ec20196315a9a2541477ec5bf">FlowSensitive::updateCallGraph</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#afc2e412fe96c1fad268ba0255a2042e7">CallSiteToFunPtrMap</a>&amp; callsites)</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;{</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordtype">double</span> start = stat-&gt;getClk();</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#aa9661d26d1ae9c829a9296d1b6d874f4">CallEdgeMap</a> newEdges;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; onTheFlyCallGraphSolve(callsites, newEdges);</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="comment">// Bound the new edges by the Andersen&#39;s call graph.</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="comment">// TODO: we want this to be an assertion eventually.</span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#aa9661d26d1ae9c829a9296d1b6d874f4">CallEdgeMap</a> &amp;andersCallEdgeMap = ander-&gt;getIndCallMap();</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">typename</span> CallEdgeMap::value_type &amp;csfs : newEdges)</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; {</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a> *potentialCallSite = csfs.first;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <a class="code" href="classSVF_1_1PointerAnalysis.html#ac1422cd8b449fdb4a1f7c539364e4c41">FunctionSet</a> &amp;potentialFunctionSet = csfs.second;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="comment">// Check this callsite even calls anything per Andersen&#39;s.</span></div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keyword">typename</span> CallEdgeMap::const_iterator andersFunctionSetIt</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; = andersCallEdgeMap.find(potentialCallSite);</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="keywordflow">if</span> (andersFunctionSetIt == andersCallEdgeMap.end())</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; {</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; potentialFunctionSet.clear();</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; }</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160;</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ac1422cd8b449fdb4a1f7c539364e4c41">FunctionSet</a> &amp;andersFunctionSet = andersFunctionSetIt-&gt;second;</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">for</span> (FunctionSet::iterator potentialFunctionIt = potentialFunctionSet.begin();</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; potentialFunctionIt != potentialFunctionSet.end(); )</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; {</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *potentialFunction = *potentialFunctionIt;</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="keywordflow">if</span> (andersFunctionSet.find(potentialFunction) == andersFunctionSet.end())</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; {</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="comment">// potentialFunction is not in the Andersen&#39;s call graph -- remove it.</span></div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; potentialFunctionIt = potentialFunctionSet.erase(potentialFunctionIt);</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; }</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; {</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="comment">// potentialFunction is in the Andersen&#39;s call graph -- keep it..</span></div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; ++potentialFunctionIt;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; }</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; }</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; }</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <a class="code" href="classSVF_1_1FlowSensitive.html#a69289c48fa91f850da90de080b9d26e5">SVFGEdgeSetTy</a> svfgEdges;</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; connectCallerAndCallee(newEdges, svfgEdges);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; updateConnectedNodes(svfgEdges);</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160;</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="keywordtype">double</span> end = stat-&gt;getClk();</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; updateCallGraphTime += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keywordflow">return</span> (!newEdges.empty());</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;}</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160;</div><div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#ad7640ada31b5cb542e492e27ab4fe1af"> 665</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#ad7640ada31b5cb542e492e27ab4fe1af">FlowSensitive::connectCallerAndCallee</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#aa9661d26d1ae9c829a9296d1b6d874f4">CallEdgeMap</a>&amp; newEdges, <a class="code" href="classSVF_1_1FlowSensitive.html#a69289c48fa91f850da90de080b9d26e5">SVFGEdgeSetTy</a>&amp; edges)</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160;{</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; CallEdgeMap::const_iterator iter = newEdges.begin();</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; CallEdgeMap::const_iterator eiter = newEdges.end();</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="keywordflow">for</span> (; iter != eiter; iter++)</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; {</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</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="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ac1422cd8b449fdb4a1f7c539364e4c41">FunctionSet</a> &amp; functions = iter-&gt;second;</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="keywordflow">for</span> (FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; {</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = *func_iter;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; svfg-&gt;connectCallerAndCallee(cs, func, edges);</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; }</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; }</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;}</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160;</div><div class="line"><a name="l00685"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a1886b4964efa92cfff761493d12768b8"> 685</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a1886b4964efa92cfff761493d12768b8">FlowSensitive::updateConnectedNodes</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a69289c48fa91f850da90de080b9d26e5">SVFGEdgeSetTy</a>&amp; edges)</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160;{</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="keywordflow">for</span> (SVFGEdgeSetTy::const_iterator it = edges.begin(), eit = edges.end();</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; {</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *it;</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dstNode = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;PHISVFGNode&gt;(dstNode))</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; {</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; pushIntoWorklist(dstNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; }</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;FormalINSVFGNode&gt;(dstNode) || SVFUtil::isa&lt;ActualOUTSVFGNode&gt;(dstNode))</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; {</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160;</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* srcNode = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>();</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a>&amp; pts = SVFUtil::cast&lt;IndirectSVFGEdge&gt;(edge)-&gt;getPointsTo();</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keywordflow">for</span> (PointsTo::iterator ptdIt = pts.begin(), ptdEit = pts.end(); ptdIt != ptdEit; ++ptdIt)</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; {</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd = *ptdIt;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160;</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <span class="keywordflow">if</span> (propVarPtsAfterCGUpdated(ptd, srcNode, dstNode))</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160;</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="keywordflow">if</span> (isFieldInsensitive(ptd))</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; {</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; allFields = getAllFieldsObjNode(ptd);</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator fieldIt = allFields.begin(), fieldEit = allFields.end();</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; fieldIt != fieldEit; ++fieldIt)</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; {</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keywordflow">if</span> (propVarPtsAfterCGUpdated(*fieldIt, srcNode, dstNode))</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; }</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; }</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; }</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160;</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keywordflow">if</span> (changed)</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; pushIntoWorklist(dstNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; }</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; }</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160;}</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160;</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160;</div><div class="line"><a name="l00737"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a9e7fbc4c1d056fbef07498de8cbb1cd9"> 737</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a9e7fbc4c1d056fbef07498de8cbb1cd9">FlowSensitive::propVarPtsAfterCGUpdated</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> var, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst)</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160;{</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StoreSVFGNode&gt;(src))</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; {</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordflow">if</span> (propDFOutToIn(src, var, dst, var))</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; }</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; {</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keywordflow">if</span> (propDFInToIn(src, var, dst, var))</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; }</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;}</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160;</div><div class="line"><a name="l00752"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a023d0b492deaba40c593332cf1b2e3f6"> 752</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a023d0b492deaba40c593332cf1b2e3f6">FlowSensitive::printCTirAliasStats</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160;{</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <a class="code" href="classSVF_1_1DCHGraph.html">DCHGraph</a> *dchg = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1DCHGraph.html">DCHGraph</a>&gt;(chgraph);</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(dchg &amp;&amp; <span class="stringliteral">&quot;eval-ctir-aliases needs DCHG.&quot;</span>);</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160;</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="comment">// &lt; SVFG node ID (loc), PAG node of interest (top-level pointer) &gt;.</span></div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;std::pair&lt;NodeID, NodeID&gt;</a>&gt; cmpLocs;</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFG::iterator</a> npair = svfg-&gt;begin(); npair != svfg-&gt;end(); ++npair)</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; {</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> loc = npair-&gt;first;</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *node = npair-&gt;second;</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160;</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <span class="comment">// Only care about loads, stores, and GEPs.</span></div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a> *stmt = SVFUtil::dyn_cast&lt;StmtSVFGNode&gt;(node))</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; {</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;LoadSVFGNode&gt;(stmt) &amp;&amp; !SVFUtil::isa&lt;StoreSVFGNode&gt;(stmt)</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; &amp;&amp; !SVFUtil::isa&lt;GepSVFGNode&gt;(stmt))</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; {</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; }</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160;</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a21d2fd8bbef0c6f6ddddb5387569a7fa">TypeBasedHeapCloning::getRawCTirMetadata</a>(stmt-&gt;getInst() ? stmt-&gt;getInst() : stmt-&gt;getPAGEdge()-&gt;getValue()))</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; {</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; }</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160;</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = 0;</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;LoadSVFGNode&gt;(stmt))</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; {</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; p = stmt-&gt;getPAGSrcNodeID();</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; }</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;StoreSVFGNode&gt;(stmt))</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; {</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; p = stmt-&gt;getPAGDstNodeID();</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; }</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;GepSVFGNode&gt;(stmt))</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; {</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; p = stmt-&gt;getPAGSrcNodeID();</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; }</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; {</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="comment">// Not interested.</span></div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; }</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160;</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; cmpLocs.insert(std::make_pair(loc, p));</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; }</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; }</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160;</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="keywordtype">unsigned</span> mayAliases = 0, noAliases = 0;</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; countAliases(cmpLocs, &amp;mayAliases, &amp;noAliases);</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordtype">unsigned</span> total = mayAliases + noAliases;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">llvm::outs</a>() &lt;&lt; <span class="stringliteral">&quot;eval-ctir-aliases &quot;</span></div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; &lt;&lt; total &lt;&lt; <span class="stringliteral">&quot; &quot;</span></div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; &lt;&lt; mayAliases &lt;&lt; <span class="stringliteral">&quot; &quot;</span></div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; &lt;&lt; noAliases &lt;&lt; <span class="stringliteral">&quot; &quot;</span></div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">llvm::outs</a>() &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;TOTAL : &quot;</span> &lt;&lt; total &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;MAY : &quot;</span> &lt;&lt; mayAliases &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;MAY % : &quot;</span> &lt;&lt; 100 * ((double)mayAliases/(<span class="keywordtype">double</span>)(total)) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;NO : &quot;</span> &lt;&lt; noAliases &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;NO % : &quot;</span> &lt;&lt; 100 * ((double)noAliases/(<span class="keywordtype">double</span>)(total)) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160;}</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160;</div><div class="line"><a name="l00817"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitive.html#a94dc671f524ed3ed00f5a54b13f18e18"> 817</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a94dc671f524ed3ed00f5a54b13f18e18">FlowSensitive::countAliases</a>(<a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt;std::pair&lt;NodeID, NodeID&gt;&gt; cmp, <span class="keywordtype">unsigned</span> *mayAliases, <span class="keywordtype">unsigned</span> *noAliases)</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160;{</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="keywordflow">for</span> (std::pair&lt;NodeID, NodeID&gt; locPA : cmp)</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; {</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; <span class="comment">// loc doesn&#39;t make a difference for FSPTA.</span></div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = locPA.second;</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="keywordflow">for</span> (std::pair&lt;NodeID, NodeID&gt; locPB : cmp)</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; {</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <span class="keywordflow">if</span> (locPB == locPA) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160;</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> q = locPB.second;</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160;</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="keywordflow">switch</span> (alias(p, q))</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; {</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <span class="keywordflow">case</span> llvm::NoAlias:</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; ++(*noAliases);</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <span class="keywordflow">case</span> llvm::MayAlias:</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; ++(*mayAliases);</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="stringliteral">&quot;Not May/NoAlias?&quot;</span>);</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; }</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; }</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; }</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160;</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160;}</div><div class="ttc" id="Andersen_8h_html"><div class="ttname"><a href="Andersen_8h.html">Andersen.h</a></div></div>
70
70
  <div class="ttc" id="classSVF_1_1Options_html_ad03c4697dd4da2b6adde112e3ee1884b"><div class="ttname"><a href="classSVF_1_1Options.html#ad03c4697dd4da2b6adde112e3ee1884b">SVF::Options::FsTimeLimit</a></div><div class="ttdeci">static const llvm::cl::opt&lt; unsigned &gt; FsTimeLimit</div><div class="ttdoc">Time limit for the main phase (i.e., the actual solving) of FS analyses. </div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00039">Options.h:39</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1StoreVFGNode_html"><div class="ttname"><a href="classSVF_1_1StoreVFGNode.html">SVF::StoreVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00237">VFGNode.h:237</a></div></div>
72
72
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_a3574977acd161925cadcb05de6d3247d"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a3574977acd161925cadcb05de6d3247d">SVF::FlowSensitive::propagateFromAPToFP</a></div><div class="ttdeci">virtual bool propagateFromAPToFP(const ActualParmSVFGNode *ap, const SVFGNode *dst)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00287">FlowSensitive.cpp:287</a></div></div>
@@ -78,11 +78,11 @@ $(function() {
78
78
  <div class="ttc" id="classSVF_1_1FormalParmVFGNode_html_ab1a9031c1fc5102e072b5035151c131c"><div class="ttname"><a href="classSVF_1_1FormalParmVFGNode.html#ab1a9031c1fc5102e072b5035151c131c">SVF::FormalParmVFGNode::getParam</a></div><div class="ttdeci">const PAGNode * getParam() const</div><div class="ttdoc">Return parameter. </div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00844">VFGNode.h:844</a></div></div>
79
79
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_aeb1e002519123a67f8d18f78cda04bac"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aeb1e002519123a67f8d18f78cda04bac">SVF::FlowSensitive::propAlongIndirectEdge</a></div><div class="ttdeci">virtual bool propAlongIndirectEdge(const IndirectSVFGEdge *edge)</div><div class="ttdoc">Propagate points-to information along an INDIRECT SVFG edge. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00318">FlowSensitive.cpp:318</a></div></div>
80
80
  <div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
81
- <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a609eea630a8f88fe9eaba15ce7e48738"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVF::SVFUtil::pasMsg</a></div><div class="ttdeci">std::string pasMsg(std::string msg)</div><div class="ttdoc">Print each pass/phase message by converting a string into blue string output. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00098">SVFUtil.cpp:98</a></div></div>
82
- <div class="ttc" id="classSVF_1_1FlowSensitive_html_a1886b4964efa92cfff761493d12768b8"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a1886b4964efa92cfff761493d12768b8">SVF::FlowSensitive::updateConnectedNodes</a></div><div class="ttdeci">virtual void updateConnectedNodes(const SVFGEdgeSetTy &amp;edges)</div><div class="ttdoc">Update nodes connected during updating call graph. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00651">FlowSensitive.cpp:651</a></div></div>
81
+ <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a609eea630a8f88fe9eaba15ce7e48738"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVF::SVFUtil::pasMsg</a></div><div class="ttdeci">std::string pasMsg(std::string msg)</div><div class="ttdoc">Print each pass/phase message by converting a string into blue string output. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00100">SVFUtil.cpp:100</a></div></div>
82
+ <div class="ttc" id="classSVF_1_1FlowSensitive_html_a1886b4964efa92cfff761493d12768b8"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a1886b4964efa92cfff761493d12768b8">SVF::FlowSensitive::updateConnectedNodes</a></div><div class="ttdeci">virtual void updateConnectedNodes(const SVFGEdgeSetTy &amp;edges)</div><div class="ttdoc">Update nodes connected during updating call graph. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00685">FlowSensitive.cpp:685</a></div></div>
83
83
  <div class="ttc" id="namespaceSVF_html_a1811127aebdb9c926e39d155e20b3dc0"><div class="ttname"><a href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">SVF::NodeStack</a></div><div class="ttdeci">std::stack&lt; NodeID &gt; NodeStack</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00119">SVFBasicTypes.h:119</a></div></div>
84
84
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_aa401cc90de4e1c6842f08a43a28c5aa1"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aa401cc90de4e1c6842f08a43a28c5aa1">SVF::FlowSensitive::processCopy</a></div><div class="ttdeci">virtual bool processCopy(const CopySVFGNode *copy)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00394">FlowSensitive.cpp:394</a></div></div>
85
- <div class="ttc" id="classSVF_1_1FlowSensitive_html_a023d0b492deaba40c593332cf1b2e3f6"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a023d0b492deaba40c593332cf1b2e3f6">SVF::FlowSensitive::printCTirAliasStats</a></div><div class="ttdeci">virtual void printCTirAliasStats(void)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00718">FlowSensitive.cpp:718</a></div></div>
85
+ <div class="ttc" id="classSVF_1_1FlowSensitive_html_a023d0b492deaba40c593332cf1b2e3f6"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a023d0b492deaba40c593332cf1b2e3f6">SVF::FlowSensitive::printCTirAliasStats</a></div><div class="ttdeci">virtual void printCTirAliasStats(void)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00752">FlowSensitive.cpp:752</a></div></div>
86
86
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
87
87
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_a16f594356ea565eb1fed2acea516a16b"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a16f594356ea565eb1fed2acea516a16b">SVF::FlowSensitive::processNode</a></div><div class="ttdeci">virtual void processNode(NodeID nodeId)</div><div class="ttdoc">Handle various constraints. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00150">FlowSensitive.cpp:150</a></div></div>
88
88
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_a42a7e39e0e15576742f8ba7c32579ea2"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a42a7e39e0e15576742f8ba7c32579ea2">SVF::FlowSensitive::isStrongUpdate</a></div><div class="ttdeci">bool isStrongUpdate(const SVFGNode *node, NodeID &amp;singleton)</div><div class="ttdoc">Return TRUE if this is a strong update STORE statement. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00585">FlowSensitive.cpp:585</a></div></div>
@@ -113,7 +113,7 @@ $(function() {
113
113
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_a5f8a1493f7550a3f7a295e25d87bce12"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a5f8a1493f7550a3f7a295e25d87bce12">SVF::FlowSensitive::SCCDetect</a></div><div class="ttdeci">virtual NodeStack &amp; SCCDetect()</div><div class="ttdoc">SCC detection. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00138">FlowSensitive.cpp:138</a></div></div>
114
114
  <div class="ttc" id="classSVF_1_1PHIVFGNode_html_a2e00f6d582aa4ac9aa116cc6d5c79369"><div class="ttname"><a href="classSVF_1_1PHIVFGNode.html#a2e00f6d582aa4ac9aa116cc6d5c79369">SVF::PHIVFGNode::opVerBegin</a></div><div class="ttdeci">OPVers::const_iterator opVerBegin() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00612">VFGNode.h:612</a></div></div>
115
115
  <div class="ttc" id="namespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set&lt; Key, Hash, KeyEqual, Allocator &gt; Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00094">SVFBasicTypes.h:94</a></div></div>
116
- <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a757815a2c758695176120509ceb0ce70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a757815a2c758695176120509ceb0ce70">SVF::SVFUtil::startAnalysisLimitTimer</a></div><div class="ttdeci">bool startAnalysisLimitTimer(unsigned timeLimit)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00393">SVFUtil.cpp:393</a></div></div>
116
+ <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a757815a2c758695176120509ceb0ce70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a757815a2c758695176120509ceb0ce70">SVF::SVFUtil::startAnalysisLimitTimer</a></div><div class="ttdeci">bool startAnalysisLimitTimer(unsigned timeLimit)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00394">SVFUtil.cpp:394</a></div></div>
117
117
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_abb37c5e4e6fa4742e8dbcf397aea086e"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#abb37c5e4e6fa4742e8dbcf397aea086e">SVF::FlowSensitive::processAddr</a></div><div class="ttdeci">virtual bool processAddr(const AddrSVFGNode *addr)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00377">FlowSensitive.cpp:377</a></div></div>
118
118
  <div class="ttc" id="classSVF_1_1ActualParmVFGNode_html_a8932b197a076ab3069a9fe8b73e7fc32"><div class="ttname"><a href="classSVF_1_1ActualParmVFGNode.html#a8932b197a076ab3069a9fe8b73e7fc32">SVF::ActualParmVFGNode::getParam</a></div><div class="ttdeci">const PAGNode * getParam() const</div><div class="ttdoc">Return parameter. </div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00798">VFGNode.h:798</a></div></div>
119
119
  <div class="ttc" id="classSVF_1_1NormalGepPE_html"><div class="ttname"><a href="classSVF_1_1NormalGepPE.html">SVF::NormalGepPE</a></div><div class="ttdef"><b>Definition:</b> <a href="PAGEdge_8h_source.html#l00472">PAGEdge.h:472</a></div></div>
@@ -148,22 +148,22 @@ $(function() {
148
148
  <div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00164">GenericGraph.h:164</a></div></div>
149
149
  <div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00087">SVFBasicTypes.h:87</a></div></div>
150
150
  <div class="ttc" id="classSVF_1_1StmtVFGNode_html"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html">SVF::StmtVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00115">VFGNode.h:115</a></div></div>
151
- <div class="ttc" id="classSVF_1_1FlowSensitive_html_a9e7fbc4c1d056fbef07498de8cbb1cd9"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a9e7fbc4c1d056fbef07498de8cbb1cd9">SVF::FlowSensitive::propVarPtsAfterCGUpdated</a></div><div class="ttdeci">bool propVarPtsAfterCGUpdated(NodeID var, const SVFGNode *src, const SVFGNode *dst)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00703">FlowSensitive.cpp:703</a></div></div>
151
+ <div class="ttc" id="classSVF_1_1FlowSensitive_html_a9e7fbc4c1d056fbef07498de8cbb1cd9"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a9e7fbc4c1d056fbef07498de8cbb1cd9">SVF::FlowSensitive::propVarPtsAfterCGUpdated</a></div><div class="ttdeci">bool propVarPtsAfterCGUpdated(NodeID var, const SVFGNode *src, const SVFGNode *dst)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00737">FlowSensitive.cpp:737</a></div></div>
152
152
  <div class="ttc" id="SVFModule_8h_html"><div class="ttname"><a href="SVFModule_8h.html">SVFModule.h</a></div></div>
153
153
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
154
154
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_a69289c48fa91f850da90de080b9d26e5"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a69289c48fa91f850da90de080b9d26e5">SVF::FlowSensitive::SVFGEdgeSetTy</a></div><div class="ttdeci">SVFG::SVFGEdgeSetTy SVFGEdgeSetTy</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00051">FlowSensitive.h:51</a></div></div>
155
155
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_ae571767cc5936cf631a44976d8277e91"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#ae571767cc5936cf631a44976d8277e91">SVF::FlowSensitive::propVarPtsFromSrcToDst</a></div><div class="ttdeci">virtual bool propVarPtsFromSrcToDst(NodeID var, const SVFGNode *src, const SVFGNode *dst)</div><div class="ttdoc">Propagate points-to information of a certain variable from src to dst. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00358">FlowSensitive.cpp:358</a></div></div>
156
156
  <div class="ttc" id="classSVF_1_1FormalParmVFGNode_html"><div class="ttname"><a href="classSVF_1_1FormalParmVFGNode.html">SVF::FormalParmVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00830">VFGNode.h:830</a></div></div>
157
157
  <div class="ttc" id="classSVF_1_1PHIVFGNode_html_add18c60773871744123d12a037e78e20"><div class="ttname"><a href="classSVF_1_1PHIVFGNode.html#add18c60773871744123d12a037e78e20">SVF::PHIVFGNode::opVerEnd</a></div><div class="ttdeci">OPVers::const_iterator opVerEnd() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00616">VFGNode.h:616</a></div></div>
158
- <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a168f7f7a3a8c70dbf2b5b4269cd4c7c5"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a168f7f7a3a8c70dbf2b5b4269cd4c7c5">SVF::SVFUtil::stopAnalysisLimitTimer</a></div><div class="ttdeci">void stopAnalysisLimitTimer(bool limitTimerSet)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00414">SVFUtil.cpp:414</a></div></div>
158
+ <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a168f7f7a3a8c70dbf2b5b4269cd4c7c5"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a168f7f7a3a8c70dbf2b5b4269cd4c7c5">SVF::SVFUtil::stopAnalysisLimitTimer</a></div><div class="ttdeci">void stopAnalysisLimitTimer(bool limitTimerSet)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00415">SVFUtil.cpp:415</a></div></div>
159
159
  <div class="ttc" id="classSVF_1_1IndirectSVFGEdge_html"><div class="ttname"><a href="classSVF_1_1IndirectSVFGEdge.html">SVF::IndirectSVFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGEdge_8h_source.html#l00042">SVFGEdge.h:42</a></div></div>
160
160
  <div class="ttc" id="classSVF_1_1FormalRetVFGNode_html"><div class="ttname"><a href="classSVF_1_1FormalRetVFGNode.html">SVF::FormalRetVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00953">VFGNode.h:953</a></div></div>
161
- <div class="ttc" id="classSVF_1_1FlowSensitive_html_ad7640ada31b5cb542e492e27ab4fe1af"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#ad7640ada31b5cb542e492e27ab4fe1af">SVF::FlowSensitive::connectCallerAndCallee</a></div><div class="ttdeci">void connectCallerAndCallee(const CallEdgeMap &amp;newEdges, SVFGEdgeSetTy &amp;edges)</div><div class="ttdoc">Connect nodes in SVFG. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00631">FlowSensitive.cpp:631</a></div></div>
161
+ <div class="ttc" id="classSVF_1_1FlowSensitive_html_ad7640ada31b5cb542e492e27ab4fe1af"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#ad7640ada31b5cb542e492e27ab4fe1af">SVF::FlowSensitive::connectCallerAndCallee</a></div><div class="ttdeci">void connectCallerAndCallee(const CallEdgeMap &amp;newEdges, SVFGEdgeSetTy &amp;edges)</div><div class="ttdoc">Connect nodes in SVFG. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00665">FlowSensitive.cpp:665</a></div></div>
162
162
  <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>
163
163
  <div class="ttc" id="SVFBasicTypes_8h_html_a173ce1b9b505fdadf5613b663749d3b0"><div class="ttname"><a href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a></div><div class="ttdeci">#define DBOUT(TYPE, X)</div><div class="ttdoc">LLVM debug macros, define type of your DEBUG model of each pass. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00142">SVFBasicTypes.h:142</a></div></div>
164
164
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a431ec4f85eb0f029e5740b92fd9ceb32"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a431ec4f85eb0f029e5740b92fd9ceb32">SVF::PointerAnalysis::initialize</a></div><div class="ttdeci">virtual void initialize()</div><div class="ttdoc">Initialization of a pointer analysis, including building symbol table and PAG etc. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00116">PointerAnalysis.cpp:116</a></div></div>
165
165
  <div class="ttc" id="namespaceSVF_html_a0c6594b4bae7924369bb61943c1da4fb"><div class="ttname"><a href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">SVF::PointsTo</a></div><div class="ttdeci">NodeBS PointsTo</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00088">SVFBasicTypes.h:88</a></div></div>
166
- <div class="ttc" id="classSVF_1_1FlowSensitive_html_a94dc671f524ed3ed00f5a54b13f18e18"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a94dc671f524ed3ed00f5a54b13f18e18">SVF::FlowSensitive::countAliases</a></div><div class="ttdeci">virtual void countAliases(Set&lt; std::pair&lt; NodeID, NodeID &gt;&gt; cmp, unsigned *mayAliases, unsigned *noAliases)</div><div class="ttdoc">Fills may/noAliases for the location/pointer pairs in cmp. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00783">FlowSensitive.cpp:783</a></div></div>
166
+ <div class="ttc" id="classSVF_1_1FlowSensitive_html_a94dc671f524ed3ed00f5a54b13f18e18"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a94dc671f524ed3ed00f5a54b13f18e18">SVF::FlowSensitive::countAliases</a></div><div class="ttdeci">virtual void countAliases(Set&lt; std::pair&lt; NodeID, NodeID &gt;&gt; cmp, unsigned *mayAliases, unsigned *noAliases)</div><div class="ttdoc">Fills may/noAliases for the location/pointer pairs in cmp. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00817">FlowSensitive.cpp:817</a></div></div>
167
167
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_a3abffe1434386b1ce349fbed0cfe0967"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a3abffe1434386b1ce349fbed0cfe0967">SVF::FlowSensitive::propagateFromFRToAR</a></div><div class="ttdeci">virtual bool propagateFromFRToAR(const FormalRetSVFGNode *fr, const SVFGNode *dst)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00303">FlowSensitive.cpp:303</a></div></div>
168
168
  <div class="ttc" id="classSVF_1_1VFGNode_html"><div class="ttname"><a href="classSVF_1_1VFGNode.html">SVF::VFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00048">VFGNode.h:48</a></div></div>
169
169
  </div><!-- fragment --></div><!-- contents -->