svf-tools 1.0.340 → 1.0.344

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 (487) hide show
  1. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +2 -2
  2. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +6 -6
  3. package/SVF-doxygen/html/html/BasicTypes_8h_source.html +2 -2
  4. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +9 -9
  5. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +2 -2
  6. package/SVF-doxygen/html/html/ConsG_8h_source.html +2 -2
  7. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
  8. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +7 -7
  9. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +5 -5
  10. package/SVF-doxygen/html/html/DDAClient_8h_source.html +3 -3
  11. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +7 -7
  12. package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +3 -3
  13. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +3 -3
  14. package/SVF-doxygen/html/html/FileChecker_8cpp_source.html +3 -3
  15. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +3 -3
  16. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +7 -7
  17. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +6 -6
  18. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +2 -2
  19. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +6 -6
  20. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +11 -11
  21. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +15 -15
  22. package/SVF-doxygen/html/html/ICFGEdge_8h_source.html +1 -1
  23. package/SVF-doxygen/html/html/ICFGNode_8h.html +7 -7
  24. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +69 -69
  25. package/SVF-doxygen/html/html/ICFGStat_8h_source.html +1 -1
  26. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +64 -61
  27. package/SVF-doxygen/html/html/ICFG_8h_source.html +46 -46
  28. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +9 -9
  29. package/SVF-doxygen/html/html/LeakChecker_8h_source.html +6 -6
  30. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +1 -1
  31. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +2 -2
  32. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
  33. package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +5 -5
  34. package/SVF-doxygen/html/html/MHP_8cpp_source.html +9 -9
  35. package/SVF-doxygen/html/html/MHP_8h_source.html +6 -6
  36. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +9 -9
  37. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +2 -2
  38. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +5 -5
  39. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +27 -27
  40. package/SVF-doxygen/html/html/MemRegion_8h_source.html +18 -18
  41. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +9 -9
  42. package/SVF-doxygen/html/html/MemSSA_8h_source.html +12 -12
  43. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +1 -1
  44. package/SVF-doxygen/html/html/Options_8cpp_source.html +2 -2
  45. package/SVF-doxygen/html/html/Options_8h_source.html +2 -2
  46. package/SVF-doxygen/html/html/PCG_8cpp_source.html +2 -2
  47. package/SVF-doxygen/html/html/PCG_8h_source.html +4 -4
  48. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +10 -10
  49. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +17 -17
  50. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +5 -5
  51. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +6 -6
  52. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +2 -2
  53. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +18 -18
  54. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +17 -17
  55. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +4 -4
  56. package/SVF-doxygen/html/html/ProgSlice_8h_source.html +4 -4
  57. package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +3 -3
  58. package/SVF-doxygen/html/html/SVFGNode_8h_source.html +17 -17
  59. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +2 -2
  60. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +9 -9
  61. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +32 -32
  62. package/SVF-doxygen/html/html/SVFG_8h_source.html +27 -27
  63. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +3 -3
  64. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +13 -13
  65. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +9 -9
  66. package/SVF-doxygen/html/html/SVFIR_8h_source.html +32 -32
  67. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +20 -20
  68. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +14 -14
  69. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +8 -8
  70. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +5 -5
  71. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +3 -3
  72. package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +7 -7
  73. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +2 -2
  74. package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +4 -4
  75. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +2 -2
  76. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +2 -2
  77. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +16 -15
  78. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +1 -1
  79. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +30 -28
  80. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +44 -42
  81. package/SVF-doxygen/html/html/TCT_8h_source.html +3 -3
  82. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +15 -15
  83. package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +20 -20
  84. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +5 -5
  85. package/SVF-doxygen/html/html/TypeAnalysis_8h_source.html +2 -2
  86. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +3 -3
  87. package/SVF-doxygen/html/html/VFGNode_8h_source.html +11 -11
  88. package/SVF-doxygen/html/html/VFG_8cpp_source.html +20 -20
  89. package/SVF-doxygen/html/html/VFG_8h_source.html +19 -19
  90. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +4 -4
  91. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +4 -4
  92. package/SVF-doxygen/html/html/annotated.html +17 -17
  93. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode-members.html +3 -3
  94. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +23 -23
  95. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode-members.html +3 -3
  96. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +23 -23
  97. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode-members.html +3 -3
  98. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +22 -22
  99. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode-members.html +3 -3
  100. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +24 -24
  101. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +3 -3
  102. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient-members.html +1 -1
  103. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +7 -7
  104. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +12 -12
  105. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +47 -47
  106. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +12 -12
  107. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +34 -34
  108. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +12 -12
  109. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +32 -32
  110. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +12 -12
  111. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +32 -32
  112. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +12 -12
  113. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +32 -32
  114. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +12 -12
  115. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +34 -34
  116. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +12 -12
  117. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +32 -32
  118. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +12 -12
  119. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +32 -32
  120. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +12 -12
  121. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +38 -38
  122. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +6 -5
  123. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
  124. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +15 -12
  125. package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode.html +5 -3
  126. package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +2 -2
  127. package/SVF-doxygen/html/html/classSVF_1_1CallCHI-members.html +3 -3
  128. package/SVF-doxygen/html/html/classSVF_1_1CallCHI.html +22 -22
  129. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +4 -4
  130. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode-members.html +158 -0
  131. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +852 -0
  132. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.png +0 -0
  133. package/SVF-doxygen/html/html/classSVF_1_1CallMU-members.html +3 -3
  134. package/SVF-doxygen/html/html/classSVF_1_1CallMU.html +22 -22
  135. package/SVF-doxygen/html/html/classSVF_1_1CallPE-members.html +4 -4
  136. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +31 -31
  137. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +6 -5
  138. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
  139. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl-members.html +12 -12
  140. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +31 -31
  141. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +3 -3
  142. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA-members.html +14 -14
  143. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +60 -60
  144. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +3 -3
  145. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver-members.html +1 -1
  146. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +16 -16
  147. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG-members.html +21 -21
  148. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +51 -51
  149. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker-members.html +5 -5
  150. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +16 -16
  151. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +3 -3
  152. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +12 -12
  153. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +33 -33
  154. package/SVF-doxygen/html/html/classSVF_1_1FileChecker-members.html +5 -5
  155. package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +20 -20
  156. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +11 -11
  157. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +52 -52
  158. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +12 -12
  159. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +43 -43
  160. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +12 -12
  161. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +33 -33
  162. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis-members.html +1 -1
  163. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +21 -21
  164. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode-members.html +3 -3
  165. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +19 -19
  166. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode-members.html +3 -3
  167. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +18 -18
  168. package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode.html +4 -2
  169. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode-members.html +150 -0
  170. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +618 -0
  171. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.png +0 -0
  172. package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode.html +4 -2
  173. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode-members.html +149 -0
  174. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +624 -0
  175. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.png +0 -0
  176. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient-members.html +1 -1
  177. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +12 -12
  178. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +3 -3
  179. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
  180. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +3 -3
  181. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +4 -4
  182. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +3 -3
  183. package/SVF-doxygen/html/html/classSVF_1_1GlobalBlockNode.html +3 -1
  184. package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode-members.html +144 -0
  185. package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.html +413 -0
  186. package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.png +0 -0
  187. package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge-members.html +3 -3
  188. package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge.html +11 -11
  189. package/SVF-doxygen/html/html/classSVF_1_1ICFG-members.html +22 -22
  190. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +224 -217
  191. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder-members.html +4 -4
  192. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +74 -71
  193. package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +2 -2
  194. package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +10 -10
  195. package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.png +0 -0
  196. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter-members.html +11 -11
  197. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +30 -30
  198. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +3 -3
  199. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG-members.html +21 -21
  200. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +51 -51
  201. package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode-members.html +144 -0
  202. package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode.html +399 -0
  203. package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode.png +0 -0
  204. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode-members.html +2 -2
  205. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +23 -23
  206. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode-members.html +2 -2
  207. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +21 -21
  208. package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode.html +7 -3
  209. package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +2 -2
  210. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG-members.html +21 -21
  211. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +51 -51
  212. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode-members.html +146 -0
  213. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +494 -0
  214. package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.png +0 -0
  215. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  216. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker-members.html +5 -5
  217. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +61 -61
  218. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +4 -4
  219. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +1 -1
  220. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +14 -14
  221. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator-members.html +1 -1
  222. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +11 -11
  223. package/SVF-doxygen/html/html/classSVF_1_1MHP-members.html +1 -1
  224. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +22 -22
  225. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator-members.html +24 -24
  226. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +198 -198
  227. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +8 -8
  228. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +6 -6
  229. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +5 -5
  230. package/SVF-doxygen/html/html/classSVF_1_1MemObj-members.html +23 -22
  231. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +70 -47
  232. package/SVF-doxygen/html/html/classSVF_1_1MemSSA-members.html +10 -10
  233. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +77 -77
  234. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +4 -4
  235. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +2 -2
  236. package/SVF-doxygen/html/html/classSVF_1_1NormalGepStmt.html +4 -4
  237. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo-members.html +17 -15
  238. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +141 -106
  239. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +3 -3
  240. package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +1 -1
  241. package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +27 -27
  242. package/SVF-doxygen/html/html/classSVF_1_1Options.html +26 -26
  243. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +2 -2
  244. package/SVF-doxygen/html/html/classSVF_1_1PCG-members.html +1 -1
  245. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +13 -13
  246. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
  247. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph-members.html +15 -15
  248. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +118 -118
  249. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge-members.html +3 -3
  250. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +32 -32
  251. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +5 -5
  252. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +6 -6
  253. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +12 -12
  254. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +109 -109
  255. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice-members.html +2 -2
  256. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +18 -18
  257. package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode.html +5 -3
  258. package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +2 -2
  259. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode-members.html +153 -0
  260. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +696 -0
  261. package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.png +0 -0
  262. package/SVF-doxygen/html/html/classSVF_1_1RetPE-members.html +4 -4
  263. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +30 -30
  264. package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +4 -4
  265. package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +24 -24
  266. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +160 -160
  267. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
  268. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +24 -24
  269. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +76 -76
  270. package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +19 -19
  271. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +133 -133
  272. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +4 -4
  273. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +62 -62
  274. package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +1 -1
  275. package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI-members.html +4 -4
  276. package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +20 -20
  277. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder-members.html +1 -1
  278. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +13 -13
  279. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA-members.html +1 -1
  280. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +7 -7
  281. package/SVF-doxygen/html/html/classSVF_1_1StInfo.html +24 -24
  282. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +12 -12
  283. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +32 -32
  284. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt-members.html +1 -1
  285. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +11 -11
  286. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +17 -16
  287. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +16 -16
  288. package/SVF-doxygen/html/html/classSVF_1_1TCT-members.html +1 -1
  289. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +22 -22
  290. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE-members.html +4 -4
  291. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +19 -19
  292. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +4 -4
  293. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +19 -19
  294. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph-members.html +40 -40
  295. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +220 -220
  296. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +10 -10
  297. package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge-members.html +3 -3
  298. package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +11 -11
  299. package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge-members.html +3 -3
  300. package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +11 -11
  301. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +12 -12
  302. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +42 -42
  303. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +3 -3
  304. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +10 -9
  305. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  306. package/SVF-doxygen/html/html/classSVF_1_1VFG-members.html +9 -9
  307. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +96 -96
  308. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +3 -3
  309. package/SVF-doxygen/html/html/classSVF_1_1VariantGepStmt.html +4 -4
  310. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +12 -12
  311. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +37 -37
  312. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +12 -12
  313. package/SVF-doxygen/html/html/classes.html +16 -16
  314. package/SVF-doxygen/html/html/functions_a.html +59 -59
  315. package/SVF-doxygen/html/html/functions_c.html +74 -71
  316. package/SVF-doxygen/html/html/functions_eval_c.html +5 -2
  317. package/SVF-doxygen/html/html/functions_f.html +14 -14
  318. package/SVF-doxygen/html/html/functions_func.html +56 -56
  319. package/SVF-doxygen/html/html/functions_func_c.html +28 -28
  320. package/SVF-doxygen/html/html/functions_func_f.html +6 -6
  321. package/SVF-doxygen/html/html/functions_func_g.html +88 -88
  322. package/SVF-doxygen/html/html/functions_func_h.html +17 -17
  323. package/SVF-doxygen/html/html/functions_func_i.html +31 -29
  324. package/SVF-doxygen/html/html/functions_func_m.html +1 -1
  325. package/SVF-doxygen/html/html/functions_func_p.html +1 -1
  326. package/SVF-doxygen/html/html/functions_func_r.html +6 -6
  327. package/SVF-doxygen/html/html/functions_func_s.html +1 -1
  328. package/SVF-doxygen/html/html/functions_func_t.html +7 -7
  329. package/SVF-doxygen/html/html/functions_func_u.html +3 -3
  330. package/SVF-doxygen/html/html/functions_g.html +88 -88
  331. package/SVF-doxygen/html/html/functions_h.html +16 -16
  332. package/SVF-doxygen/html/html/functions_i.html +37 -35
  333. package/SVF-doxygen/html/html/functions_m.html +2 -2
  334. package/SVF-doxygen/html/html/functions_n.html +3 -3
  335. package/SVF-doxygen/html/html/functions_o.html +10 -10
  336. package/SVF-doxygen/html/html/functions_p.html +21 -30
  337. package/SVF-doxygen/html/html/functions_r.html +6 -6
  338. package/SVF-doxygen/html/html/functions_s.html +15 -14
  339. package/SVF-doxygen/html/html/functions_t.html +13 -15
  340. package/SVF-doxygen/html/html/functions_type.html +1 -1
  341. package/SVF-doxygen/html/html/functions_type_c.html +24 -24
  342. package/SVF-doxygen/html/html/functions_type_f.html +3 -3
  343. package/SVF-doxygen/html/html/functions_type_i.html +2 -2
  344. package/SVF-doxygen/html/html/functions_type_p.html +1 -1
  345. package/SVF-doxygen/html/html/functions_type_s.html +1 -1
  346. package/SVF-doxygen/html/html/functions_type_v.html +2 -2
  347. package/SVF-doxygen/html/html/functions_u.html +3 -3
  348. package/SVF-doxygen/html/html/functions_v.html +5 -5
  349. package/SVF-doxygen/html/html/functions_vars_a.html +2 -2
  350. package/SVF-doxygen/html/html/functions_vars_c.html +11 -11
  351. package/SVF-doxygen/html/html/functions_vars_f.html +5 -5
  352. package/SVF-doxygen/html/html/functions_vars_g.html +1 -1
  353. package/SVF-doxygen/html/html/functions_vars_i.html +3 -3
  354. package/SVF-doxygen/html/html/functions_vars_p.html +0 -3
  355. package/SVF-doxygen/html/html/functions_vars_r.html +1 -1
  356. package/SVF-doxygen/html/html/functions_vars_s.html +3 -0
  357. package/SVF-doxygen/html/html/functions_w.html +5 -9
  358. package/SVF-doxygen/html/html/hierarchy.html +7 -7
  359. package/SVF-doxygen/html/html/namespaceSVF.html +11 -11
  360. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +11 -11
  361. package/SVF-doxygen/html/html/search/all_1.js +58 -58
  362. package/SVF-doxygen/html/html/search/all_10.js +13 -14
  363. package/SVF-doxygen/html/html/search/all_12.js +5 -5
  364. package/SVF-doxygen/html/html/search/all_13.js +9 -8
  365. package/SVF-doxygen/html/html/search/all_14.js +6 -6
  366. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  367. package/SVF-doxygen/html/html/search/all_16.js +3 -3
  368. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  369. package/SVF-doxygen/html/html/search/all_3.js +37 -35
  370. package/SVF-doxygen/html/html/search/all_6.js +12 -12
  371. package/SVF-doxygen/html/html/search/all_7.js +62 -61
  372. package/SVF-doxygen/html/html/search/all_8.js +17 -17
  373. package/SVF-doxygen/html/html/search/all_9.js +19 -19
  374. package/SVF-doxygen/html/html/search/all_c.js +1 -1
  375. package/SVF-doxygen/html/html/search/all_d.js +2 -2
  376. package/SVF-doxygen/html/html/search/all_e.js +1 -1
  377. package/SVF-doxygen/html/html/search/all_f.js +2 -2
  378. package/SVF-doxygen/html/html/search/classes_2.js +1 -1
  379. package/SVF-doxygen/html/html/search/classes_5.js +2 -2
  380. package/SVF-doxygen/html/html/search/classes_6.js +1 -1
  381. package/SVF-doxygen/html/html/search/classes_8.js +2 -2
  382. package/SVF-doxygen/html/html/search/classes_e.js +1 -1
  383. package/SVF-doxygen/html/html/search/enumvalues_2.js +2 -1
  384. package/SVF-doxygen/html/html/search/functions_0.js +55 -55
  385. package/SVF-doxygen/html/html/search/functions_10.js +2 -2
  386. package/SVF-doxygen/html/html/search/functions_11.js +4 -4
  387. package/SVF-doxygen/html/html/search/functions_12.js +1 -1
  388. package/SVF-doxygen/html/html/search/functions_2.js +10 -10
  389. package/SVF-doxygen/html/html/search/functions_5.js +4 -4
  390. package/SVF-doxygen/html/html/search/functions_6.js +61 -61
  391. package/SVF-doxygen/html/html/search/functions_7.js +17 -17
  392. package/SVF-doxygen/html/html/search/functions_8.js +16 -16
  393. package/SVF-doxygen/html/html/search/functions_b.js +1 -1
  394. package/SVF-doxygen/html/html/search/functions_e.js +2 -2
  395. package/SVF-doxygen/html/html/search/functions_f.js +4 -4
  396. package/SVF-doxygen/html/html/search/typedefs_0.js +1 -1
  397. package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
  398. package/SVF-doxygen/html/html/search/typedefs_14.js +1 -1
  399. package/SVF-doxygen/html/html/search/typedefs_2.js +21 -21
  400. package/SVF-doxygen/html/html/search/typedefs_5.js +3 -3
  401. package/SVF-doxygen/html/html/search/typedefs_8.js +2 -2
  402. package/SVF-doxygen/html/html/search/typedefs_f.js +1 -1
  403. package/SVF-doxygen/html/html/search/variables_1.js +2 -2
  404. package/SVF-doxygen/html/html/search/variables_10.js +0 -1
  405. package/SVF-doxygen/html/html/search/variables_12.js +1 -1
  406. package/SVF-doxygen/html/html/search/variables_13.js +1 -0
  407. package/SVF-doxygen/html/html/search/variables_14.js +1 -1
  408. package/SVF-doxygen/html/html/search/variables_3.js +4 -4
  409. package/SVF-doxygen/html/html/search/variables_6.js +5 -5
  410. package/SVF-doxygen/html/html/search/variables_7.js +1 -1
  411. package/SVF-doxygen/html/html/search/variables_9.js +1 -1
  412. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  413. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +23 -23
  414. package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
  415. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
  416. package/include/DDA/ContextDDA.h +3 -3
  417. package/include/DDA/DDAClient.h +2 -2
  418. package/include/DDA/DDAVFSolver.h +2 -2
  419. package/include/DDA/FlowDDA.h +2 -2
  420. package/include/Graphs/ICFG.h +32 -32
  421. package/include/Graphs/ICFGNode.h +33 -33
  422. package/include/Graphs/ICFGStat.h +11 -11
  423. package/include/Graphs/PTACallGraph.h +19 -19
  424. package/include/Graphs/SVFG.h +16 -16
  425. package/include/Graphs/SVFGNode.h +14 -14
  426. package/include/Graphs/SVFGOPT.h +1 -1
  427. package/include/Graphs/ThreadCallGraph.h +25 -25
  428. package/include/Graphs/VFG.h +10 -10
  429. package/include/Graphs/VFGNode.h +8 -8
  430. package/include/MSSA/MSSAMuChi.h +6 -6
  431. package/include/MSSA/MemRegion.h +24 -24
  432. package/include/MSSA/MemSSA.h +10 -10
  433. package/include/MTA/LockResultValidator.h +2 -2
  434. package/include/MTA/MHP.h +4 -4
  435. package/include/MTA/PCG.h +1 -1
  436. package/include/MTA/TCT.h +2 -2
  437. package/include/MemoryModel/PointerAnalysis.h +12 -12
  438. package/include/MemoryModel/SVFIR.h +22 -22
  439. package/include/MemoryModel/SVFStatements.h +11 -11
  440. package/include/MemoryModel/SymbolTableInfo.h +15 -9
  441. package/include/SABER/LeakChecker.h +4 -4
  442. package/include/SABER/ProgSlice.h +2 -2
  443. package/include/SABER/SaberCheckerAPI.h +4 -4
  444. package/include/SABER/SaberSVFGBuilder.h +1 -1
  445. package/include/SABER/SrcSnkDDA.h +1 -1
  446. package/include/SVF-FE/ICFGBuilder.h +4 -4
  447. package/include/SVF-FE/SVFIRBuilder.h +5 -5
  448. package/include/Util/Options.h +1 -1
  449. package/lib/DDA/ContextDDA.cpp +3 -3
  450. package/lib/DDA/DDAClient.cpp +1 -1
  451. package/lib/DDA/FlowDDA.cpp +1 -1
  452. package/lib/Graphs/ICFG.cpp +88 -71
  453. package/lib/Graphs/PTACallGraph.cpp +5 -5
  454. package/lib/Graphs/SVFG.cpp +7 -7
  455. package/lib/Graphs/ThreadCallGraph.cpp +6 -6
  456. package/lib/Graphs/VFG.cpp +6 -6
  457. package/lib/MSSA/MemRegion.cpp +17 -17
  458. package/lib/MSSA/MemSSA.cpp +3 -3
  459. package/lib/MTA/LockAnalysis.cpp +4 -4
  460. package/lib/MTA/MHP.cpp +5 -5
  461. package/lib/MTA/MTAResultValidator.cpp +1 -1
  462. package/lib/MTA/PCG.cpp +1 -1
  463. package/lib/MemoryModel/PointerAnalysis.cpp +10 -10
  464. package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
  465. package/lib/MemoryModel/SVFIR.cpp +5 -5
  466. package/lib/MemoryModel/SVFStatements.cpp +53 -49
  467. package/lib/MemoryModel/SVFVariables.cpp +10 -10
  468. package/lib/MemoryModel/SymbolTableInfo.cpp +12 -7
  469. package/lib/SABER/DoubleFreeChecker.cpp +1 -1
  470. package/lib/SABER/FileChecker.cpp +2 -2
  471. package/lib/SABER/LeakChecker.cpp +8 -8
  472. package/lib/SABER/ProgSlice.cpp +2 -2
  473. package/lib/SVF-FE/CallGraphBuilder.cpp +4 -4
  474. package/lib/SVF-FE/Graph2Json.cpp +5 -5
  475. package/lib/SVF-FE/ICFGBuilder.cpp +31 -25
  476. package/lib/SVF-FE/SVFIRBuilder.cpp +8 -8
  477. package/lib/SVF-FE/SymbolTableBuilder.cpp +2 -2
  478. package/lib/Util/Options.cpp +3 -3
  479. package/lib/Util/PTAStat.cpp +3 -3
  480. package/lib/Util/SVFUtil.cpp +2 -0
  481. package/lib/Util/TypeBasedHeapCloning.cpp +1 -1
  482. package/lib/WPA/Andersen.cpp +3 -3
  483. package/lib/WPA/FlowSensitive.cpp +2 -2
  484. package/lib/WPA/TypeAnalysis.cpp +1 -1
  485. package/lib/WPA/VersionedFlowSensitive.cpp +4 -4
  486. package/lib/WPA/WPAPass.cpp +4 -4
  487. package/package.json +1 -1
@@ -66,7 +66,7 @@ $(function() {
66
66
  <div class="title">MemRegion.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="MemRegion_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">//===- MemRegion.cpp -- Memory region-----------------------------------------//</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"> * MemRegion.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: Dec 14, 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="SVFModule_8h.html">Util/SVFModule.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="MemRegion_8h.html">MSSA/MemRegion.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="MSSAMuChi_8h.html">MSSA/MSSAMuChi.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="LLVMUtil_8h.html">SVF-FE/LLVMUtil.h</a>&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</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;<a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> <a class="code" href="classSVF_1_1MemRegion.html#a8556bee344c108815adad4a405ac0ffb">MemRegion::totalMRNum</a> = 0;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> <a class="code" href="classSVF_1_1MRVer.html#aa89979685cbca9279d32c7512c9d3c16">MRVer::totalVERNum</a> = 0;</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"><a class="line" href="classSVF_1_1MRGenerator.html#ac8fedbb65a582135354c939183d48f46"> 42</a></span>&#160;<a class="code" href="classSVF_1_1MRGenerator.html#ac8fedbb65a582135354c939183d48f46">MRGenerator::MRGenerator</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>* p, <span class="keywordtype">bool</span> ptrOnly) :</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; pta(p), ptrOnlyMSSA(ptrOnly)</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;{</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">callGraph</a> = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>();</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MRGenerator.html#af8d52e6c9884c6e1abc6dbcbc5e32629">SCC</a>(<a class="code" href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">callGraph</a>);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ac253d88de2a0cb9624c70d2bcfdac36e"> 52</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#ac253d88de2a0cb9624c70d2bcfdac36e">MRGenerator::destroy</a>()</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;{</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">for</span> (MRSet::iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.begin(), eit = <a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.end();</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">delete</span> *it;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">callGraph</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;}</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ac18324bd2b862c3cdbf65494bf69ecb5"> 70</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#ac18324bd2b862c3cdbf65494bf69ecb5">MRGenerator::createMR</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; cpts)</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;{</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; repCPts = <a class="code" href="classSVF_1_1MRGenerator.html#a98b3481580be48cff7e93bf3c8a29dac">getRepPointsTo</a>(cpts);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a> mr(repCPts);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; MRSet::const_iterator mit = <a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.find(&amp;mr);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">if</span>(mit!=<a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.end())</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* mr = *mit;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">MRSet</a>&amp; mrs = <a class="code" href="classSVF_1_1MRGenerator.html#a3e74c3706ffcc14f378771b417dcbb96">funToMRsMap</a>[fun];</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">if</span>(mrs.find(mr)==mrs.end())</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; mrs.insert(mr);</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">else</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* m = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>(repCPts);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.insert(m);</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a3e74c3706ffcc14f378771b417dcbb96">funToMRsMap</a>[fun].insert(m);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;}</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a55d38020bbece70847f7e72bb02bc4af"> 93</a></span>&#160;<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* <a class="code" href="classSVF_1_1MRGenerator.html#a55d38020bbece70847f7e72bb02bc4af">MRGenerator::getMR</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; cpts)<span class="keyword"> const</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a> mr(<a class="code" href="classSVF_1_1MRGenerator.html#a98b3481580be48cff7e93bf3c8a29dac">getRepPointsTo</a>(cpts));</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; MRSet::iterator mit = <a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.find(&amp;mr);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mit!=<a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.end() &amp;&amp; <span class="stringliteral">&quot;memory region not found!!&quot;</span>);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">return</span> *mit;</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;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#afdae3e11009966856736d9aa1e2ad5bd"> 105</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#afdae3e11009966856736d9aa1e2ad5bd">MRGenerator::collectGlobals</a>()</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;{</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nIter != pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nIter)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a>* obj = SVFUtil::dyn_cast&lt;ObjVar&gt;(nIter-&gt;second))</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">if</span> (obj-&gt;getMemObj()-&gt;isGlobalObj())</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; <a class="code" href="classSVF_1_1MRGenerator.html#af46b82e45aa1ecdfb397325971206541">allGlobals</a>.set(nIter-&gt;first);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#af46b82e45aa1ecdfb397325971206541">allGlobals</a> |= <a class="code" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">CollectPtsChain</a>(nIter-&gt;first);</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; }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;}</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a4f65593325e4391333fa1b0bedbffc4a"> 125</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a4f65593325e4391333fa1b0bedbffc4a">MRGenerator::generateMRs</a>()</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;{</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</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">pasMsg</a>(<span class="stringliteral">&quot;Generate Memory Regions \n&quot;</span>));</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#afdae3e11009966856736d9aa1e2ad5bd">collectGlobals</a>();</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_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a>-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a123b5006a6da7053e5e357140da3c5a3">find</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; <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">pasMsg</a>(<span class="stringliteral">&quot;\tCollect ModRef For Load/Store \n&quot;</span>));</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a207dfa4c9f044764665478142c6e6b22">collectModRefForLoadStore</a>();</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <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">pasMsg</a>(<span class="stringliteral">&quot;\tCollect ModRef For const CallBlockNode*\n&quot;</span>));</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a502f8379620378b36bc12d9a91b408d2">collectModRefForCall</a>();</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <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">pasMsg</a>(<span class="stringliteral">&quot;\tPartition Memory Regions \n&quot;</span>));</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#ac0b966ee2065607a24920dd9067b40e9">partitionMRs</a>();</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a9c1da53188729eb743e1a33bbad87af7">updateAliasMRs</a>();</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;}</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a6f631290f3da7c308395eb6a9472d7a5"> 151</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MRGenerator.html#a6f631290f3da7c308395eb6a9472d7a5">MRGenerator::hasSVFStmtList</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;{</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRGenerator.html#a6a62d2dede5d2506c19b2d058d1cd9d3">ptrOnlyMSSA</a>)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">return</span> pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a0552d565633ee22abe03085134a871c0">hasPTASVFStmtList</a>(pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(inst));</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">return</span> pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a63acb4d86d93ad1e88860ac839a8c654">hasSVFStmtList</a>(pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(inst));</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;}</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c"> 160</a></span>&#160;<a class="code" href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9">SVFIR::SVFStmtList</a>&amp; <a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">MRGenerator::getPAGEdgesFromInst</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;{</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRGenerator.html#a6a62d2dede5d2506c19b2d058d1cd9d3">ptrOnlyMSSA</a>)</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">return</span> pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abb91ed47d5c13d0ad7eec35164e37988">getPTASVFStmtList</a>(pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(inst));</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">return</span> pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a570ad42ad516e3fabb91a3563b618c0b">getSVFStmtList</a>(pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(inst));</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;</div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a207dfa4c9f044764665478142c6e6b22"> 172</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a207dfa4c9f044764665478142c6e6b22">MRGenerator::collectModRefForLoadStore</a>()</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;{</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ad8b71cebf46deaf60e2cd4f6d6bb9433">getModule</a>();</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#afcf2978f32e15127fb093405dc17d7f1">SVFModule::const_iterator</a> fi = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a5486697889c6cca4f9f426650defc255">begin</a>(), efi = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a58d03edb6ff85f4943135478f113df31">end</a>(); fi != efi;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; ++fi)</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>&amp; fun = **fi;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a50182faec95c6c4635df65a55148b040">Options::IgnoreDeadFun</a> &amp;&amp; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6d268e8d588717601345be3a911a7625">isDeadFunction</a>(fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()))</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">for</span> (Function::const_iterator iter = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;begin(), eiter = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;end();</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; iter != eiter; ++iter)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>&amp; bb = *iter;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">for</span> (BasicBlock::const_iterator bit = bb.begin(), ebit = bb.end();</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; bit != ebit; ++bit)</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; {</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>&amp; inst = *bit;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a8717adf4520e0702274c5f013776be52">SVFStmtList</a>&amp; pagEdgeList = <a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">getPAGEdgesFromInst</a>(&amp;inst);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">for</span> (SVFStmtList::iterator bit = pagEdgeList.begin(), ebit =</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; pagEdgeList.end(); bit != ebit; ++bit)</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; {</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* inst = *bit;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#ab250a4950269f57027d8e8ef10089f58">pagEdgeToFunMap</a>[inst] = &amp;fun;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a> *st = SVFUtil::dyn_cast&lt;StoreStmt&gt;(inst))</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cpts(<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(st-&gt;getLHSVarID()).toNodeBS());</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="comment">// TODO: change this assertion check later when we have conditional points-to set</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">if</span> (cpts.empty())</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!cpts.empty() &amp;&amp; <span class="stringliteral">&quot;null pointer!!&quot;</span>);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#af50efed3af17806a3ba3f668e4466d3e">addCPtsToStore</a>(cpts, st, &amp;fun);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a> *ld = SVFUtil::dyn_cast&lt;LoadStmt&gt;(inst))</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cpts(<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(ld-&gt;getRHSVarID()).toNodeBS());</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="comment">// TODO: change this assertion check later when we have conditional points-to set</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">if</span> (cpts.empty())</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!cpts.empty() &amp;&amp; <span class="stringliteral">&quot;null pointer!!&quot;</span>);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a79a3032b50f7ef905213b770b12e0967">addCPtsToLoad</a>(cpts, ld, &amp;fun);</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; }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; }</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;}</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;</div><div class="line"><a name="l00228"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a502f8379620378b36bc12d9a91b408d2"> 228</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a502f8379620378b36bc12d9a91b408d2">MRGenerator::collectModRefForCall</a>()</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;{</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</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">pasMsg</a>(<span class="stringliteral">&quot;\t\tCollect Callsite PointsTo \n&quot;</span>));</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">for</span>(SVFIR::CallSiteSet::const_iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa530e33657f68fc2e8eae9435ce430cb">getCallSiteSet</a>().begin(),</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; eit = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa530e33657f68fc2e8eae9435ce430cb">getCallSiteSet</a>().end(); it!=eit; ++it)</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#ac43b3f895efd160c7dd5860c0dfd1625">collectCallSitePts</a>((*it));</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <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">pasMsg</a>(<span class="stringliteral">&quot;\t\tPerform Callsite Mod-Ref \n&quot;</span>));</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a> worklist;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#ab3d3ca72d2cddf5336d00dc623f33401">getCallGraphSCCRevTopoOrder</a>(worklist);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">while</span>(!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; {</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> callGraphNodeID = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; subNodes = <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a>-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a6ab5eff6a576e6d8703c1ea29b7f425d">subNodes</a>(callGraphNodeID);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">for</span>(NodeBS::iterator it = subNodes.begin(), eit = subNodes.end(); it!=eit; ++it)</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; <a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* subCallGraphNode = <a class="code" href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">callGraph</a>-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">getCallGraphNode</a>(*it);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#adc9d530e6f010596d91cd3711dc1358b">modRefAnalysis</a>(subCallGraphNode,worklist);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; }</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; }</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</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">pasMsg</a>(<span class="stringliteral">&quot;\t\tAdd PointsTo to Callsites \n&quot;</span>));</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs : <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;getCallSiteSet())</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; {</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* callBlockNode = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(cs.getInstruction());</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#ac91b6f0f33a95ba35cc23e0e4657732a">hasRefSideEffectOfCallSite</a>(callBlockNode))</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; {</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> refs = <a class="code" href="classSVF_1_1MRGenerator.html#ae2cc7d7d6ab427acb0352b388c7a4acc">getRefSideEffectOfCallSite</a>(callBlockNode);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a77cf2b1959581da2b0cdf88291664ff3">addCPtsToCallSiteRefs</a>(refs,callBlockNode);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#a07dc868039c5e2764b3cc34faff6d94a">hasModSideEffectOfCallSite</a>(callBlockNode))</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> mods = <a class="code" href="classSVF_1_1MRGenerator.html#aebd6abbf574392abce426dc796d2ee56">getModSideEffectOfCallSite</a>(callBlockNode);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a3c9e58dee18cde9a6e1575e34955af78">addCPtsToCallSiteMods</a>(mods,callBlockNode);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a77cf2b1959581da2b0cdf88291664ff3">addCPtsToCallSiteRefs</a>(mods,callBlockNode);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</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="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a66d94d15fb94e90a771f6b3dd7c0ecdd"> 284</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a66d94d15fb94e90a771f6b3dd7c0ecdd">MRGenerator::sortPointsTo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; cpts)</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;{</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>.find(cpts)!=<a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>.end())</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a8b254a0c5063e25f297d1b00fb0b515e">PointsToList</a> subSetList;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> repCPts = cpts;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">for</span>(PtsToRepPtsSetMap::iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>.begin(),</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; eit = <a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>.end(); it!=eit; ++it)</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; {</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; existCPts = it-&gt;second;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">if</span>(cpts.contains(existCPts))</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; subSetList.insert(it-&gt;first);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(existCPts.contains(cpts))</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; repCPts = existCPts;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">for</span>(PointsToList::iterator it = subSetList.begin(), eit = subSetList.end(); it!=eit; ++it)</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="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>[*it] = cpts;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; }</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>[cpts] = repCPts;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;}</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;</div><div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ac0b966ee2065607a24920dd9067b40e9"> 317</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#ac0b966ee2065607a24920dd9067b40e9">MRGenerator::partitionMRs</a>()</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;{</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">for</span>(FunToPointsTosMap::iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#a1331e6f0941838064d77a5adaa5c6303">getFunToPointsToList</a>().begin(), eit = <a class="code" href="classSVF_1_1MRGenerator.html#a1331e6f0941838064d77a5adaa5c6303">getFunToPointsToList</a>().end();</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; it!=eit; ++it)</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; {</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">for</span>(PointsToList::iterator cit = it-&gt;second.begin(), ecit = it-&gt;second.end(); cit!=ecit; ++cit)</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; {</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a66d94d15fb94e90a771f6b3dd7c0ecdd">sortPointsTo</a>(*cit);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; }</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">for</span>(FunToPointsTosMap::iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#a1331e6f0941838064d77a5adaa5c6303">getFunToPointsToList</a>().begin(), eit = <a class="code" href="classSVF_1_1MRGenerator.html#a1331e6f0941838064d77a5adaa5c6303">getFunToPointsToList</a>().end();</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; it!=eit; ++it)</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = it-&gt;first;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">for</span>(PointsToList::iterator cit = it-&gt;second.begin(), ecit = it-&gt;second.end(); cit!=ecit; ++cit)</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#ac18324bd2b862c3cdbf65494bf69ecb5">createMR</a>(fun,*cit);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; }</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;}</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a9c1da53188729eb743e1a33bbad87af7"> 348</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a9c1da53188729eb743e1a33bbad87af7">MRGenerator::updateAliasMRs</a>()</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;{</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">for</span>(StoresToPointsToMap::const_iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#a7d86f708743a59aa31c0a9fd6de45dac">storesToPointsToMap</a>.begin(), eit = <a class="code" href="classSVF_1_1MRGenerator.html#a7d86f708743a59aa31c0a9fd6de45dac">storesToPointsToMap</a>.end(); it!=eit; ++it)</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; <a class="code" href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">MRSet</a> aliasMRs;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1MRGenerator.html#a3121380139c7ae96d2045d66203253b6">getFunction</a>(it-&gt;first);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; storeCPts = it-&gt;second;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#ad740188222439c089907fa6c6c951f02">getAliasMemRegions</a>(aliasMRs,storeCPts,fun);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">for</span>(MRSet::iterator ait = aliasMRs.begin(), eait = aliasMRs.end(); ait!=eait; ++ait)</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; {</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a255551fd3ff8fb33bcea93d0b00280b3">storesToMRsMap</a>[it-&gt;first].insert(*ait);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; }</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;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordflow">for</span>(LoadsToPointsToMap::const_iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#af47e15d6b8c15d547a718f3577513975">loadsToPointsToMap</a>.begin(), eit = <a class="code" href="classSVF_1_1MRGenerator.html#af47e15d6b8c15d547a718f3577513975">loadsToPointsToMap</a>.end(); it!=eit; ++it)</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; <a class="code" href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">MRSet</a> aliasMRs;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1MRGenerator.html#a3121380139c7ae96d2045d66203253b6">getFunction</a>(it-&gt;first);</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; loadCPts = it-&gt;second;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#abe8d6217250d227e743e4b581497aae8">getMRsForLoad</a>(aliasMRs, loadCPts, fun);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keywordflow">for</span>(MRSet::iterator ait = aliasMRs.begin(), eait = aliasMRs.end(); ait!=eait; ++ait)</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; {</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a0d8229b1f0b8428708e923d19096e4ba">loadsToMRsMap</a>[it-&gt;first].insert(*ait);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; }</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; }</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">for</span>(CallSiteToPointsToMap::const_iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#ab8df193e84009e406c301731d17dc7b9">callsiteToModPointsToMap</a>.begin(),</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; eit = <a class="code" href="classSVF_1_1MRGenerator.html#ab8df193e84009e406c301731d17dc7b9">callsiteToModPointsToMap</a>.end(); it!=eit; ++it)</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; {</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = it-&gt;first-&gt;getCaller();</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">MRSet</a> aliasMRs;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; callsiteModCPts = it-&gt;second;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#ad740188222439c089907fa6c6c951f02">getAliasMemRegions</a>(aliasMRs,callsiteModCPts,fun);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">for</span>(MRSet::iterator ait = aliasMRs.begin(), eait = aliasMRs.end(); ait!=eait; ++ait)</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; {</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#adf8d477e5f622855799842134145ecc4">callsiteToModMRsMap</a>[it-&gt;first].insert(*ait);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; }</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; }</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordflow">for</span>(CallSiteToPointsToMap::const_iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#a34967cda51699f948a581b9f88fa3b10">callsiteToRefPointsToMap</a>.begin(),</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; eit = <a class="code" href="classSVF_1_1MRGenerator.html#a34967cda51699f948a581b9f88fa3b10">callsiteToRefPointsToMap</a>.end(); it!=eit; ++it)</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; {</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = it-&gt;first-&gt;getCaller();</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">MRSet</a> aliasMRs;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; callsiteRefCPts = it-&gt;second;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a02c60ceb7c9c37bcf83c739aa4083acc">getMRsForCallSiteRef</a>(aliasMRs, callsiteRefCPts, fun);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">for</span>(MRSet::iterator ait = aliasMRs.begin(), eait = aliasMRs.end(); ait!=eait; ++ait)</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a7a7ed21181c2486b60170a479a5a534e">callsiteToRefMRsMap</a>[it-&gt;first].insert(*ait);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; }</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; }</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;}</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;</div><div class="line"><a name="l00407"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a899c81db92c6bcf24f6f9b769e02e5bf"> 407</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a899c81db92c6bcf24f6f9b769e02e5bf">MRGenerator::addRefSideEffectOfFunction</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; refs)</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;{</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">for</span>(NodeBS::iterator it = refs.begin(), eit = refs.end(); it!=eit; ++it)</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; {</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#a2cf20660f2fd686fa3cabd046c4a10bf">isNonLocalObject</a>(*it,fun))</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#af6d58e2971c4a8d3ee03f9dfd9072a3a">funToRefsMap</a>[fun].<span class="keyword">set</span>(*it);</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; }</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;}</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div><div class="line"><a name="l00419"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a39604645ca9ba10607ada3872b14705a"> 419</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a39604645ca9ba10607ada3872b14705a">MRGenerator::addModSideEffectOfFunction</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; mods)</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;{</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">for</span>(NodeBS::iterator it = mods.begin(), eit = mods.end(); it!=eit; ++it)</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; {</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#a2cf20660f2fd686fa3cabd046c4a10bf">isNonLocalObject</a>(*it,fun))</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a2c94bfa19ad8d1d6360b12693c8b891d">funToModsMap</a>[fun].<span class="keyword">set</span>(*it);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;}</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;</div><div class="line"><a name="l00431"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a4e02c3aee7eb0206f6d643b72e39d059"> 431</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MRGenerator.html#a4e02c3aee7eb0206f6d643b72e39d059">MRGenerator::addRefSideEffectOfCallSite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; refs)</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; <span class="keywordflow">if</span>(!refs.empty())</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; {</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> refset = refs;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; refset &amp;= <a class="code" href="classSVF_1_1MRGenerator.html#a373b57017e99ee8466d1c8a363adaeef">getCallSiteArgsPts</a>(cs);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#add22c9a95478dea21148e87c8dfc584a">getEscapObjviaGlobals</a>(refset,refs);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a899c81db92c6bcf24f6f9b769e02e5bf">addRefSideEffectOfFunction</a>(cs-&gt;<a class="code" href="classSVF_1_1CallBlockNode.html#a5bab98a0b8cf0a804d53abd994e922c0">getCaller</a>(),refset);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MRGenerator.html#ac7b5ca3fd950e1a940f875ac135640f6">csToRefsMap</a>[cs] |= refset;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</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="l00447"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a8b00b46136ce2586b5f94248d0826a94"> 447</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MRGenerator.html#a8b00b46136ce2586b5f94248d0826a94">MRGenerator::addModSideEffectOfCallSite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; mods)</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;{</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">if</span>(!mods.empty())</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> modset = mods;</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; modset &amp;= (<a class="code" href="classSVF_1_1MRGenerator.html#a373b57017e99ee8466d1c8a363adaeef">getCallSiteArgsPts</a>(cs) | <a class="code" href="classSVF_1_1MRGenerator.html#aac03d1d2e10543e100530f99165b4388">getCallSiteRetPts</a>(cs));</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#add22c9a95478dea21148e87c8dfc584a">getEscapObjviaGlobals</a>(modset,mods);</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a39604645ca9ba10607ada3872b14705a">addModSideEffectOfFunction</a>(cs-&gt;<a class="code" href="classSVF_1_1CallBlockNode.html#a5bab98a0b8cf0a804d53abd994e922c0">getCaller</a>(),modset);</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MRGenerator.html#a603f993995e7d6961e203a195bb56029">csToModsMap</a>[cs] |= modset;</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; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;}</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;</div><div class="line"><a name="l00464"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ab3d3ca72d2cddf5336d00dc623f33401"> 464</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#ab3d3ca72d2cddf5336d00dc623f33401">MRGenerator::getCallGraphSCCRevTopoOrder</a>(<a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a>&amp; worklist)</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; <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; topoOrder = <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a>-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a6502c0a765ac1653474ffee651949f93">topoNodeStack</a>();</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">while</span>(!topoOrder.empty())</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> callgraphNodeID = topoOrder.top();</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; topoOrder.pop();</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(callgraphNodeID);</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="l00479"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ac43b3f895efd160c7dd5860c0dfd1625"> 479</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#ac43b3f895efd160c7dd5860c0dfd1625">MRGenerator::collectCallSitePts</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;{</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; argsPts = <a class="code" href="classSVF_1_1MRGenerator.html#afe91b57b451d7788364493549e015acf">csToCallSiteArgsPtsMap</a>[cs];</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* callBlockNode = pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(cs-&gt;<a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>());</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <a class="code" href="classSVF_1_1RetBlockNode.html">RetBlockNode</a>* retBlockNode = pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a6d66c83cb1656d0f8ec8b8b65a9e9c41">getRetBlockNode</a>(cs-&gt;<a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>());</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="classSVF_1_1FIFOWorkList.html">WorkList</a> worklist;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">if</span> (pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2a4185af81e7e10f0db74c39ee220101">hasCallSiteArgsMap</a>(callBlockNode))</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; {</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVFIR::SVFVarList</a>&amp; args = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ac7f90610a7b5f456c530a4419393fae5">getCallSiteArgsList</a>(callBlockNode);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">for</span>(SVFIR::SVFVarList::const_iterator itA = args.begin(), ieA = args.end(); itA!=ieA; ++itA)</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; {</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = *itA;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordflow">if</span>(node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</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; }</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="keywordflow">while</span>(!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; {</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; tmp = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(nodeId).<a class="code" href="classSVF_1_1PointsTo.html#ae4749cf6dc43645e2479cefbcc246637">toNodeBS</a>();</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">for</span>(NodeBS::iterator it = tmp.begin(), eit = tmp.end(); it!=eit; ++it)</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; argsPts |= <a class="code" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">CollectPtsChain</a>(*it);</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; }</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; retPts = <a class="code" href="classSVF_1_1MRGenerator.html#a21550f978f42ac3cbb32cbc426ff5cb1">csToCallSiteRetPtsMap</a>[cs];</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a170bef1e9a07ce0449faf66706ae6e61">callsiteHasRet</a>(retBlockNode))</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a70aa4d730ef1d38ef9c46f5014465bdd">getCallSiteRet</a>(retBlockNode);</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">if</span>(node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; {</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; tmp = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>()).toNodeBS();</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">for</span>(NodeBS::iterator it = tmp.begin(), eit = tmp.end(); it!=eit; ++it)</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; retPts |= <a class="code" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">CollectPtsChain</a>(*it);</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;}</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;</div><div class="line"><a name="l00527"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5"> 527</a></span>&#160;<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; <a class="code" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">MRGenerator::CollectPtsChain</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;{</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseId = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; NodeToPTSSMap::iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#a0e46c7beb580ace3a652ac9e1c419b48">cachedPtsChainMap</a>.find(baseId);</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1MRGenerator.html#a0e46c7beb580ace3a652ac9e1c419b48">cachedPtsChainMap</a>.end())</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; {</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; pts = <a class="code" href="classSVF_1_1MRGenerator.html#a0e46c7beb580ace3a652ac9e1c419b48">cachedPtsChainMap</a>[baseId];</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; pts |= <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a42d1e2f0213fb6e54c56cc0695b57cb0">getFieldsAfterCollapse</a>(baseId);</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a> worklist;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">for</span>(NodeBS::iterator it = pts.begin(), eit = pts.end(); it!=eit; ++it)</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(*it);</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">while</span>(!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; tmp = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(nodeId).<a class="code" href="classSVF_1_1PointsTo.html#ae4749cf6dc43645e2479cefbcc246637">toNodeBS</a>();</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordflow">for</span>(NodeBS::iterator it = tmp.begin(), eit = tmp.end(); it!=eit; ++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; pts |= <a class="code" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">CollectPtsChain</a>(*it);</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; }</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">return</span> pts;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; }</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="l00561"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#add22c9a95478dea21148e87c8dfc584a"> 561</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#add22c9a95478dea21148e87c8dfc584a">MRGenerator::getEscapObjviaGlobals</a>(<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; globs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; calleeModRef)</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;{</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordflow">for</span>(NodeBS::iterator it = calleeModRef.begin(), eit = calleeModRef.end(); it!=eit; ++it)</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; {</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(*it);</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(obj &amp;&amp; <span class="stringliteral">&quot;object not found!!&quot;</span>);</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#af46b82e45aa1ecdfb397325971206541">allGlobals</a>.test(*it))</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; globs.set(*it);</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;}</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;</div><div class="line"><a name="l00576"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a2cf20660f2fd686fa3cabd046c4a10bf"> 576</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MRGenerator.html#a2cf20660f2fd686fa3cabd046c4a10bf">MRGenerator::isNonLocalObject</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* curFun)<span class="keyword"> const</span></div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(obj &amp;&amp; <span class="stringliteral">&quot;object not found!!&quot;</span>);</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <span class="keywordflow">if</span>(obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4">isGlobalObj</a>() || obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">isHeap</a>())</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee">isStack</a>())</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="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a3bacb4f95c73e6d794901d01c6b65a83">AllocaInst</a>* local = SVFUtil::dyn_cast&lt;AllocaInst&gt;(obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>()))</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(local-&gt;getFunction());</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">if</span>(fun!=curFun)</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a>-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a5d699af73b1e7ad4e3a5f6d26b8b6d15">isInCycle</a>(<a class="code" href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">callGraph</a>-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">getCallGraphNode</a>(fun)-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; }</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; }</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;}</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;</div><div class="line"><a name="l00603"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a123a2ea51b04f1398b9ee66567f5014a"> 603</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MRGenerator.html#a123a2ea51b04f1398b9ee66567f5014a">MRGenerator::handleCallsiteModRef</a>(<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; mod, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; ref, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee)</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;{</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a93ac673b885633849fa484938405ca75">isHeapAllocExtCall</a>(cs-&gt;<a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()))</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; <a class="code" href="classSVF_1_1MRGenerator.html#a8717adf4520e0702274c5f013776be52">SVFStmtList</a>&amp; pagEdgeList = <a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">getPAGEdgesFromInst</a>(cs-&gt;<a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>());</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keywordflow">for</span> (SVFStmtList::const_iterator bit = pagEdgeList.begin(),</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; ebit = pagEdgeList.end(); bit != ebit; ++bit)</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; {</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *bit;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a>* addr = SVFUtil::dyn_cast&lt;AddrStmt&gt;(edge))</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; mod.set(addr-&gt;getRHSVarID());</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; }</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; }</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; {</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; mod = <a class="code" href="classSVF_1_1MRGenerator.html#a7d47fbc3dbe8fd19ca5e4210bdecf914">getModSideEffectOfFunction</a>(callee);</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; ref = <a class="code" href="classSVF_1_1MRGenerator.html#ac0007c8808654ca74feef0d8568378b9">getRefSideEffectOfFunction</a>(callee);</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="comment">// add ref set</span></div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keywordtype">bool</span> refchanged = <a class="code" href="classSVF_1_1MRGenerator.html#a4e02c3aee7eb0206f6d643b72e39d059">addRefSideEffectOfCallSite</a>(cs, ref);</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="comment">// add mod set</span></div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keywordtype">bool</span> modchanged = <a class="code" href="classSVF_1_1MRGenerator.html#a8b00b46136ce2586b5f94248d0826a94">addModSideEffectOfCallSite</a>(cs, mod);</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keywordflow">return</span> refchanged || modchanged;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160;}</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;</div><div class="line"><a name="l00635"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#adc9d530e6f010596d91cd3711dc1358b"> 635</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#adc9d530e6f010596d91cd3711dc1358b">MRGenerator::modRefAnalysis</a>(<a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* callGraphNode, <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a>&amp; worklist)</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;</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1PTACallGraphNode.html#a796994541eec90f2b540e24816120aff">PTACallGraphNode::iterator</a> it = callGraphNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">InEdgeBegin</a>(), eit = callGraphNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">InEdgeEnd</a>();</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; it!=eit; ++it)</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; {</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a>* edge = *it;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160;</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keywordflow">for</span>(PTACallGraphEdge::CallInstSet::iterator cit = edge-&gt;<a class="code" href="classSVF_1_1PTACallGraphEdge.html#af0e9f86be3cf263b868f80d374641fc9">getDirectCalls</a>().begin(),</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; ecit = edge-&gt;<a class="code" href="classSVF_1_1PTACallGraphEdge.html#af0e9f86be3cf263b868f80d374641fc9">getDirectCalls</a>().end(); cit!=ecit; ++cit)</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; {</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> mod, ref;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = (*cit);</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordtype">bool</span> modrefchanged = <a class="code" href="classSVF_1_1MRGenerator.html#a123a2ea51b04f1398b9ee66567f5014a">handleCallsiteModRef</a>(mod, ref, cs, callGraphNode-&gt;<a class="code" href="classSVF_1_1PTACallGraphNode.html#a959445c97605953fbdebbbd999437a09">getFunction</a>());</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keywordflow">if</span>(modrefchanged)</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>());</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; }</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordflow">for</span>(PTACallGraphEdge::CallInstSet::iterator cit = edge-&gt;<a class="code" href="classSVF_1_1PTACallGraphEdge.html#a76aa19edf03a4cacfa3e27a21abfcd07">getIndirectCalls</a>().begin(),</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; ecit = edge-&gt;<a class="code" href="classSVF_1_1PTACallGraphEdge.html#a76aa19edf03a4cacfa3e27a21abfcd07">getIndirectCalls</a>().end(); cit!=ecit; ++cit)</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; {</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> mod, ref;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = (*cit);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordtype">bool</span> modrefchanged = <a class="code" href="classSVF_1_1MRGenerator.html#a123a2ea51b04f1398b9ee66567f5014a">handleCallsiteModRef</a>(mod, ref, cs, callGraphNode-&gt;<a class="code" href="classSVF_1_1PTACallGraphNode.html#a959445c97605953fbdebbbd999437a09">getFunction</a>());</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordflow">if</span>(modrefchanged)</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</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; }</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160;}</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160;</div><div class="line"><a name="l00670"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#af0d1a34ce38e9b20ee6fc7b27fcd5198"> 670</a></span>&#160;<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1MRGenerator.html#af0d1a34ce38e9b20ee6fc7b27fcd5198">MRGenerator::getModInfoForCall</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)</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="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(cs-&gt;<a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()) &amp;&amp; !<a class="code" href="namespaceSVF_1_1SVFUtil.html#a93ac673b885633849fa484938405ca75">isHeapAllocExtCall</a>(cs-&gt;<a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()))</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; {</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a8717adf4520e0702274c5f013776be52">SVFStmtList</a>&amp; pagEdgeList = <a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">getPAGEdgesFromInst</a>(cs-&gt;<a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>());</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> mods;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keywordflow">for</span> (SVFStmtList::const_iterator bit = pagEdgeList.begin(), ebit =</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; pagEdgeList.end(); bit != ebit; ++bit)</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *bit;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>* st = SVFUtil::dyn_cast&lt;StoreStmt&gt;(edge))</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; mods |= <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(st-&gt;getLHSVarID()).toNodeBS();</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; }</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">return</span> mods;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; }</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">else</span></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">return</span> <a class="code" href="classSVF_1_1MRGenerator.html#aebd6abbf574392abce426dc796d2ee56">getModSideEffectOfCallSite</a>(cs);</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; }</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160;}</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160;</div><div class="line"><a name="l00694"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#acbc431cc7fb72135e592d74709ea7a77"> 694</a></span>&#160;<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1MRGenerator.html#acbc431cc7fb72135e592d74709ea7a77">MRGenerator::getRefInfoForCall</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)</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; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(cs-&gt;<a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>()) &amp;&amp; !<a class="code" href="namespaceSVF_1_1SVFUtil.html#a93ac673b885633849fa484938405ca75">isHeapAllocExtCall</a>(cs-&gt;<a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</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; <a class="code" href="classSVF_1_1MRGenerator.html#a8717adf4520e0702274c5f013776be52">SVFStmtList</a>&amp; pagEdgeList = <a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">getPAGEdgesFromInst</a>(cs-&gt;<a class="code" href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">getCallSite</a>());</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> refs;</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordflow">for</span> (SVFStmtList::const_iterator bit = pagEdgeList.begin(), ebit =</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; pagEdgeList.end(); bit != ebit; ++bit)</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; {</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *bit;</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a>* ld = SVFUtil::dyn_cast&lt;LoadStmt&gt;(edge))</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; refs |= <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(ld-&gt;getRHSVarID()).toNodeBS();</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">return</span> refs;</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; }</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keywordflow">else</span></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">return</span> <a class="code" href="classSVF_1_1MRGenerator.html#ae2cc7d7d6ab427acb0352b388c7a4acc">getRefSideEffectOfCallSite</a>(cs);</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; }</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;</div><div class="line"><a name="l00719"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a455e0ba173141ac8ce76a655ac52205f"> 719</a></span>&#160;<a class="code" href="namespaceSVF.html#a7e833aa9feaf931fb44fb1e3fd502a6c">ModRefInfo</a> <a class="code" href="classSVF_1_1MRGenerator.html#a455e0ba173141ac8ce76a655ac52205f">MRGenerator::getModRefInfo</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)</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="keywordtype">bool</span> ref = !<a class="code" href="classSVF_1_1MRGenerator.html#acbc431cc7fb72135e592d74709ea7a77">getRefInfoForCall</a>(cs).empty();</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keywordtype">bool</span> mod = !<a class="code" href="classSVF_1_1MRGenerator.html#af0d1a34ce38e9b20ee6fc7b27fcd5198">getModInfoForCall</a>(cs).empty();</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; <span class="keywordflow">if</span> (mod &amp;&amp; ref)</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordflow">return</span> ModRefInfo::ModRef;</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ref)</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keywordflow">return</span> ModRefInfo::Ref;</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (mod)</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">return</span> ModRefInfo::Mod;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">return</span> ModRefInfo::NoModRef;</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="l00738"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a9f1d1604fb884e5c99702556915396f9"> 738</a></span>&#160;<a class="code" href="namespaceSVF.html#a7e833aa9feaf931fb44fb1e3fd502a6c">ModRefInfo</a> <a class="code" href="classSVF_1_1MRGenerator.html#a455e0ba173141ac8ce76a655ac52205f">MRGenerator::getModRefInfo</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V)</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160;{</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="keywordtype">bool</span> ref = <span class="keyword">false</span>;</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordtype">bool</span> mod = <span class="keyword">false</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; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1IRGraph.html#aceb17dfbe137658625e16291127267d1">hasValueNode</a>(V))</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; {</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> pts(<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V)).toNodeBS());</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> csRef = <a class="code" href="classSVF_1_1MRGenerator.html#acbc431cc7fb72135e592d74709ea7a77">getRefInfoForCall</a>(cs);</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> csMod = <a class="code" href="classSVF_1_1MRGenerator.html#af0d1a34ce38e9b20ee6fc7b27fcd5198">getModInfoForCall</a>(cs);</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> ptsExpanded, csRefExpanded, csModExpanded;</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(pts, ptsExpanded);</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(csRef, csRefExpanded);</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(csMod, csModExpanded);</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">if</span> (csRefExpanded.intersects(ptsExpanded))</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; ref = <span class="keyword">true</span>;</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <span class="keywordflow">if</span> (csModExpanded.intersects(ptsExpanded))</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; mod = <span class="keyword">true</span>;</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; }</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160;</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="keywordflow">if</span> (mod &amp;&amp; ref)</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="keywordflow">return</span> ModRefInfo::ModRef;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ref)</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <span class="keywordflow">return</span> ModRefInfo::Ref;</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (mod)</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <span class="keywordflow">return</span> ModRefInfo::Mod;</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keywordflow">return</span> ModRefInfo::NoModRef;</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160;}</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160;</div><div class="line"><a name="l00772"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a83f957962bf3c7621661ce87b095e841"> 772</a></span>&#160;<a class="code" href="namespaceSVF.html#a7e833aa9feaf931fb44fb1e3fd502a6c">ModRefInfo</a> <a class="code" href="classSVF_1_1MRGenerator.html#a455e0ba173141ac8ce76a655ac52205f">MRGenerator::getModRefInfo</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs1, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs2)</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;{</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="keywordtype">bool</span> ref = <span class="keyword">false</span>;</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keywordtype">bool</span> mod = <span class="keyword">false</span>;</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRGenerator.html#a455e0ba173141ac8ce76a655ac52205f">getModRefInfo</a>(cs1) == ModRefInfo::NoModRef || <a class="code" href="classSVF_1_1MRGenerator.html#a455e0ba173141ac8ce76a655ac52205f">getModRefInfo</a>(cs2) == ModRefInfo::NoModRef)</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="keywordflow">return</span> ModRefInfo::NoModRef;</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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cs1Ref = <a class="code" href="classSVF_1_1MRGenerator.html#acbc431cc7fb72135e592d74709ea7a77">getRefInfoForCall</a>(cs1);</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cs1Mod = <a class="code" href="classSVF_1_1MRGenerator.html#af0d1a34ce38e9b20ee6fc7b27fcd5198">getModInfoForCall</a>(cs1);</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cs2Ref = <a class="code" href="classSVF_1_1MRGenerator.html#acbc431cc7fb72135e592d74709ea7a77">getRefInfoForCall</a>(cs2);</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cs2Mod = <a class="code" href="classSVF_1_1MRGenerator.html#af0d1a34ce38e9b20ee6fc7b27fcd5198">getModInfoForCall</a>(cs2);</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cs1RefExpanded, cs1ModExpanded, cs2RefExpanded, cs2ModExpanded;</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(cs1Ref, cs1RefExpanded);</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(cs1Mod, cs1ModExpanded);</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(cs2Ref, cs2RefExpanded);</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(cs2Mod, cs2ModExpanded);</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160;</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="keywordflow">if</span> (cs1RefExpanded.intersects(cs2ModExpanded))</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; ref = <span class="keyword">true</span>;</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordflow">if</span> (cs1ModExpanded.intersects(cs2RefExpanded) || cs1ModExpanded.intersects(cs2ModExpanded))</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; mod = <span class="keyword">true</span>;</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordflow">if</span> (cs1RefExpanded.intersects(cs2ModExpanded) &amp;&amp; cs1ModExpanded.intersects(cs2ModExpanded))</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; ref = mod = <span class="keyword">true</span>;</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="keywordflow">if</span> (ref &amp;&amp; mod)</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <span class="keywordflow">return</span> ModRefInfo::ModRef;</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ref)</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">return</span> ModRefInfo::Ref;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (mod)</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; <span class="keywordflow">return</span> ModRefInfo::Mod;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <span class="keywordflow">return</span> ModRefInfo::NoModRef;</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160;}</div><div class="ttc" id="classSVF_1_1MRGenerator_html_af6d58e2971c4a8d3ee03f9dfd9072a3a"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#af6d58e2971c4a8d3ee03f9dfd9072a3a">SVF::MRGenerator::funToRefsMap</a></div><div class="ttdeci">FunToPointsToMap funToRefsMap</div><div class="ttdoc">Map a function to its indirect uses of memory objects. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00223">MemRegion.h:223</a></div></div>
69
+ <a href="MemRegion_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">//===- MemRegion.cpp -- Memory region-----------------------------------------//</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"> * MemRegion.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: Dec 14, 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="SVFModule_8h.html">Util/SVFModule.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="MemRegion_8h.html">MSSA/MemRegion.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="MSSAMuChi_8h.html">MSSA/MSSAMuChi.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="LLVMUtil_8h.html">SVF-FE/LLVMUtil.h</a>&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</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;<a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> <a class="code" href="classSVF_1_1MemRegion.html#a8556bee344c108815adad4a405ac0ffb">MemRegion::totalMRNum</a> = 0;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> <a class="code" href="classSVF_1_1MRVer.html#aa89979685cbca9279d32c7512c9d3c16">MRVer::totalVERNum</a> = 0;</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"><a class="line" href="classSVF_1_1MRGenerator.html#ac8fedbb65a582135354c939183d48f46"> 42</a></span>&#160;<a class="code" href="classSVF_1_1MRGenerator.html#ac8fedbb65a582135354c939183d48f46">MRGenerator::MRGenerator</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>* p, <span class="keywordtype">bool</span> ptrOnly) :</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; pta(p), ptrOnlyMSSA(ptrOnly)</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;{</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">callGraph</a> = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>();</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MRGenerator.html#af8d52e6c9884c6e1abc6dbcbc5e32629">SCC</a>(<a class="code" href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">callGraph</a>);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ac253d88de2a0cb9624c70d2bcfdac36e"> 52</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#ac253d88de2a0cb9624c70d2bcfdac36e">MRGenerator::destroy</a>()</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;{</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">for</span> (MRSet::iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.begin(), eit = <a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.end();</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">delete</span> *it;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">callGraph</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;}</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ac18324bd2b862c3cdbf65494bf69ecb5"> 70</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#ac18324bd2b862c3cdbf65494bf69ecb5">MRGenerator::createMR</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; cpts)</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;{</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; repCPts = <a class="code" href="classSVF_1_1MRGenerator.html#a98b3481580be48cff7e93bf3c8a29dac">getRepPointsTo</a>(cpts);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a> mr(repCPts);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; MRSet::const_iterator mit = <a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.find(&amp;mr);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">if</span>(mit!=<a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.end())</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* mr = *mit;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">MRSet</a>&amp; mrs = <a class="code" href="classSVF_1_1MRGenerator.html#a3e74c3706ffcc14f378771b417dcbb96">funToMRsMap</a>[fun];</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">if</span>(mrs.find(mr)==mrs.end())</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; mrs.insert(mr);</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">else</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* m = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>(repCPts);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.insert(m);</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a3e74c3706ffcc14f378771b417dcbb96">funToMRsMap</a>[fun].insert(m);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;}</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a55d38020bbece70847f7e72bb02bc4af"> 93</a></span>&#160;<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* <a class="code" href="classSVF_1_1MRGenerator.html#a55d38020bbece70847f7e72bb02bc4af">MRGenerator::getMR</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; cpts)<span class="keyword"> const</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a> mr(<a class="code" href="classSVF_1_1MRGenerator.html#a98b3481580be48cff7e93bf3c8a29dac">getRepPointsTo</a>(cpts));</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; MRSet::iterator mit = <a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.find(&amp;mr);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mit!=<a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.end() &amp;&amp; <span class="stringliteral">&quot;memory region not found!!&quot;</span>);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">return</span> *mit;</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;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#afdae3e11009966856736d9aa1e2ad5bd"> 105</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#afdae3e11009966856736d9aa1e2ad5bd">MRGenerator::collectGlobals</a>()</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;{</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nIter != pag-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nIter)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a>* obj = SVFUtil::dyn_cast&lt;ObjVar&gt;(nIter-&gt;second))</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">if</span> (obj-&gt;getMemObj()-&gt;isGlobalObj())</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; <a class="code" href="classSVF_1_1MRGenerator.html#af46b82e45aa1ecdfb397325971206541">allGlobals</a>.set(nIter-&gt;first);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#af46b82e45aa1ecdfb397325971206541">allGlobals</a> |= <a class="code" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">CollectPtsChain</a>(nIter-&gt;first);</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; }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;}</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a4f65593325e4391333fa1b0bedbffc4a"> 125</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a4f65593325e4391333fa1b0bedbffc4a">MRGenerator::generateMRs</a>()</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;{</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</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">pasMsg</a>(<span class="stringliteral">&quot;Generate Memory Regions \n&quot;</span>));</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#afdae3e11009966856736d9aa1e2ad5bd">collectGlobals</a>();</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_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a>-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a123b5006a6da7053e5e357140da3c5a3">find</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; <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">pasMsg</a>(<span class="stringliteral">&quot;\tCollect ModRef For Load/Store \n&quot;</span>));</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a207dfa4c9f044764665478142c6e6b22">collectModRefForLoadStore</a>();</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <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">pasMsg</a>(<span class="stringliteral">&quot;\tCollect ModRef For const CallICFGNode*\n&quot;</span>));</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a502f8379620378b36bc12d9a91b408d2">collectModRefForCall</a>();</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <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">pasMsg</a>(<span class="stringliteral">&quot;\tPartition Memory Regions \n&quot;</span>));</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#ac0b966ee2065607a24920dd9067b40e9">partitionMRs</a>();</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a9c1da53188729eb743e1a33bbad87af7">updateAliasMRs</a>();</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;}</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a6f631290f3da7c308395eb6a9472d7a5"> 151</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MRGenerator.html#a6f631290f3da7c308395eb6a9472d7a5">MRGenerator::hasSVFStmtList</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;{</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRGenerator.html#a6a62d2dede5d2506c19b2d058d1cd9d3">ptrOnlyMSSA</a>)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">return</span> pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a0552d565633ee22abe03085134a871c0">hasPTASVFStmtList</a>(pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(inst));</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">return</span> pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a63acb4d86d93ad1e88860ac839a8c654">hasSVFStmtList</a>(pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(inst));</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;}</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c"> 160</a></span>&#160;<a class="code" href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9">SVFIR::SVFStmtList</a>&amp; <a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">MRGenerator::getPAGEdgesFromInst</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;{</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRGenerator.html#a6a62d2dede5d2506c19b2d058d1cd9d3">ptrOnlyMSSA</a>)</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">return</span> pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abb91ed47d5c13d0ad7eec35164e37988">getPTASVFStmtList</a>(pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(inst));</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">return</span> pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a570ad42ad516e3fabb91a3563b618c0b">getSVFStmtList</a>(pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(inst));</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;</div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a207dfa4c9f044764665478142c6e6b22"> 172</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a207dfa4c9f044764665478142c6e6b22">MRGenerator::collectModRefForLoadStore</a>()</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;{</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#ad8b71cebf46deaf60e2cd4f6d6bb9433">getModule</a>();</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#afcf2978f32e15127fb093405dc17d7f1">SVFModule::const_iterator</a> fi = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a5486697889c6cca4f9f426650defc255">begin</a>(), efi = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a58d03edb6ff85f4943135478f113df31">end</a>(); fi != efi;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; ++fi)</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>&amp; fun = **fi;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a50182faec95c6c4635df65a55148b040">Options::IgnoreDeadFun</a> &amp;&amp; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6d268e8d588717601345be3a911a7625">isDeadFunction</a>(fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()))</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">for</span> (Function::const_iterator iter = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;begin(), eiter = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;end();</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; iter != eiter; ++iter)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>&amp; bb = *iter;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">for</span> (BasicBlock::const_iterator bit = bb.begin(), ebit = bb.end();</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; bit != ebit; ++bit)</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; {</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>&amp; inst = *bit;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a8717adf4520e0702274c5f013776be52">SVFStmtList</a>&amp; pagEdgeList = <a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">getPAGEdgesFromInst</a>(&amp;inst);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">for</span> (SVFStmtList::iterator bit = pagEdgeList.begin(), ebit =</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; pagEdgeList.end(); bit != ebit; ++bit)</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; {</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* inst = *bit;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#ab250a4950269f57027d8e8ef10089f58">pagEdgeToFunMap</a>[inst] = &amp;fun;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a> *st = SVFUtil::dyn_cast&lt;StoreStmt&gt;(inst))</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cpts(<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(st-&gt;getLHSVarID()).toNodeBS());</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="comment">// TODO: change this assertion check later when we have conditional points-to set</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">if</span> (cpts.empty())</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!cpts.empty() &amp;&amp; <span class="stringliteral">&quot;null pointer!!&quot;</span>);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#af50efed3af17806a3ba3f668e4466d3e">addCPtsToStore</a>(cpts, st, &amp;fun);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a> *ld = SVFUtil::dyn_cast&lt;LoadStmt&gt;(inst))</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cpts(<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(ld-&gt;getRHSVarID()).toNodeBS());</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="comment">// TODO: change this assertion check later when we have conditional points-to set</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">if</span> (cpts.empty())</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!cpts.empty() &amp;&amp; <span class="stringliteral">&quot;null pointer!!&quot;</span>);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a79a3032b50f7ef905213b770b12e0967">addCPtsToLoad</a>(cpts, ld, &amp;fun);</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; }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; }</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;}</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;</div><div class="line"><a name="l00228"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a502f8379620378b36bc12d9a91b408d2"> 228</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a502f8379620378b36bc12d9a91b408d2">MRGenerator::collectModRefForCall</a>()</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;{</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</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">pasMsg</a>(<span class="stringliteral">&quot;\t\tCollect Callsite PointsTo \n&quot;</span>));</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">for</span>(SVFIR::CallSiteSet::const_iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa530e33657f68fc2e8eae9435ce430cb">getCallSiteSet</a>().begin(),</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; eit = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa530e33657f68fc2e8eae9435ce430cb">getCallSiteSet</a>().end(); it!=eit; ++it)</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a9de695122660c1d8b65e1f3dab8a7ece">collectCallSitePts</a>((*it));</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <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">pasMsg</a>(<span class="stringliteral">&quot;\t\tPerform Callsite Mod-Ref \n&quot;</span>));</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a> worklist;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#ab3d3ca72d2cddf5336d00dc623f33401">getCallGraphSCCRevTopoOrder</a>(worklist);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">while</span>(!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; {</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> callGraphNodeID = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; subNodes = <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a>-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a6ab5eff6a576e6d8703c1ea29b7f425d">subNodes</a>(callGraphNodeID);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">for</span>(NodeBS::iterator it = subNodes.begin(), eit = subNodes.end(); it!=eit; ++it)</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; <a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* subCallGraphNode = <a class="code" href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">callGraph</a>-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">getCallGraphNode</a>(*it);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#adc9d530e6f010596d91cd3711dc1358b">modRefAnalysis</a>(subCallGraphNode,worklist);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; }</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; }</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</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">pasMsg</a>(<span class="stringliteral">&quot;\t\tAdd PointsTo to Callsites \n&quot;</span>));</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs : <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;getCallSiteSet())</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; {</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a483e92e076a426ec8f177eab3b971723">getCallBlockNode</a>(cs.getInstruction());</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#a9718c9e8efc1e6f32441aa5f418711dd">hasRefSideEffectOfCallSite</a>(callBlockNode))</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; {</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> refs = <a class="code" href="classSVF_1_1MRGenerator.html#a62757aa995a6a01b484c60df2f51c53d">getRefSideEffectOfCallSite</a>(callBlockNode);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a94ce7ceff7cee90d672e9f3a4f3aa4e8">addCPtsToCallSiteRefs</a>(refs,callBlockNode);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#a187d82895b2e1156c6dd5ae28795944f">hasModSideEffectOfCallSite</a>(callBlockNode))</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> mods = <a class="code" href="classSVF_1_1MRGenerator.html#a1535832f5b1ae3178fea950bf71fdd99">getModSideEffectOfCallSite</a>(callBlockNode);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#ab5b92ca898739f613f965fc05f86f094">addCPtsToCallSiteMods</a>(mods,callBlockNode);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a94ce7ceff7cee90d672e9f3a4f3aa4e8">addCPtsToCallSiteRefs</a>(mods,callBlockNode);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</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="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a66d94d15fb94e90a771f6b3dd7c0ecdd"> 284</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a66d94d15fb94e90a771f6b3dd7c0ecdd">MRGenerator::sortPointsTo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; cpts)</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;{</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>.find(cpts)!=<a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>.end())</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a8b254a0c5063e25f297d1b00fb0b515e">PointsToList</a> subSetList;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> repCPts = cpts;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">for</span>(PtsToRepPtsSetMap::iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>.begin(),</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; eit = <a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>.end(); it!=eit; ++it)</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; {</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; existCPts = it-&gt;second;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">if</span>(cpts.contains(existCPts))</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; subSetList.insert(it-&gt;first);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(existCPts.contains(cpts))</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; repCPts = existCPts;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">for</span>(PointsToList::iterator it = subSetList.begin(), eit = subSetList.end(); it!=eit; ++it)</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="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>[*it] = cpts;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; }</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>[cpts] = repCPts;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;}</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;</div><div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ac0b966ee2065607a24920dd9067b40e9"> 317</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#ac0b966ee2065607a24920dd9067b40e9">MRGenerator::partitionMRs</a>()</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;{</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">for</span>(FunToPointsTosMap::iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#a1331e6f0941838064d77a5adaa5c6303">getFunToPointsToList</a>().begin(), eit = <a class="code" href="classSVF_1_1MRGenerator.html#a1331e6f0941838064d77a5adaa5c6303">getFunToPointsToList</a>().end();</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; it!=eit; ++it)</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; {</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">for</span>(PointsToList::iterator cit = it-&gt;second.begin(), ecit = it-&gt;second.end(); cit!=ecit; ++cit)</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; {</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a66d94d15fb94e90a771f6b3dd7c0ecdd">sortPointsTo</a>(*cit);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; }</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">for</span>(FunToPointsTosMap::iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#a1331e6f0941838064d77a5adaa5c6303">getFunToPointsToList</a>().begin(), eit = <a class="code" href="classSVF_1_1MRGenerator.html#a1331e6f0941838064d77a5adaa5c6303">getFunToPointsToList</a>().end();</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; it!=eit; ++it)</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = it-&gt;first;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">for</span>(PointsToList::iterator cit = it-&gt;second.begin(), ecit = it-&gt;second.end(); cit!=ecit; ++cit)</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#ac18324bd2b862c3cdbf65494bf69ecb5">createMR</a>(fun,*cit);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; }</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;}</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a9c1da53188729eb743e1a33bbad87af7"> 348</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a9c1da53188729eb743e1a33bbad87af7">MRGenerator::updateAliasMRs</a>()</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;{</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">for</span>(StoresToPointsToMap::const_iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#a7d86f708743a59aa31c0a9fd6de45dac">storesToPointsToMap</a>.begin(), eit = <a class="code" href="classSVF_1_1MRGenerator.html#a7d86f708743a59aa31c0a9fd6de45dac">storesToPointsToMap</a>.end(); it!=eit; ++it)</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; <a class="code" href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">MRSet</a> aliasMRs;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1MRGenerator.html#a3121380139c7ae96d2045d66203253b6">getFunction</a>(it-&gt;first);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; storeCPts = it-&gt;second;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#ad740188222439c089907fa6c6c951f02">getAliasMemRegions</a>(aliasMRs,storeCPts,fun);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">for</span>(MRSet::iterator ait = aliasMRs.begin(), eait = aliasMRs.end(); ait!=eait; ++ait)</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; {</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a255551fd3ff8fb33bcea93d0b00280b3">storesToMRsMap</a>[it-&gt;first].insert(*ait);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; }</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;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordflow">for</span>(LoadsToPointsToMap::const_iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#af47e15d6b8c15d547a718f3577513975">loadsToPointsToMap</a>.begin(), eit = <a class="code" href="classSVF_1_1MRGenerator.html#af47e15d6b8c15d547a718f3577513975">loadsToPointsToMap</a>.end(); it!=eit; ++it)</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; <a class="code" href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">MRSet</a> aliasMRs;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1MRGenerator.html#a3121380139c7ae96d2045d66203253b6">getFunction</a>(it-&gt;first);</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; loadCPts = it-&gt;second;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#abe8d6217250d227e743e4b581497aae8">getMRsForLoad</a>(aliasMRs, loadCPts, fun);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keywordflow">for</span>(MRSet::iterator ait = aliasMRs.begin(), eait = aliasMRs.end(); ait!=eait; ++ait)</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; {</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a0d8229b1f0b8428708e923d19096e4ba">loadsToMRsMap</a>[it-&gt;first].insert(*ait);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; }</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; }</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">for</span>(CallSiteToPointsToMap::const_iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#ab8df193e84009e406c301731d17dc7b9">callsiteToModPointsToMap</a>.begin(),</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; eit = <a class="code" href="classSVF_1_1MRGenerator.html#ab8df193e84009e406c301731d17dc7b9">callsiteToModPointsToMap</a>.end(); it!=eit; ++it)</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; {</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = it-&gt;first-&gt;getCaller();</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">MRSet</a> aliasMRs;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; callsiteModCPts = it-&gt;second;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#ad740188222439c089907fa6c6c951f02">getAliasMemRegions</a>(aliasMRs,callsiteModCPts,fun);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">for</span>(MRSet::iterator ait = aliasMRs.begin(), eait = aliasMRs.end(); ait!=eait; ++ait)</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; {</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#adf8d477e5f622855799842134145ecc4">callsiteToModMRsMap</a>[it-&gt;first].insert(*ait);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; }</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; }</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordflow">for</span>(CallSiteToPointsToMap::const_iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#a34967cda51699f948a581b9f88fa3b10">callsiteToRefPointsToMap</a>.begin(),</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; eit = <a class="code" href="classSVF_1_1MRGenerator.html#a34967cda51699f948a581b9f88fa3b10">callsiteToRefPointsToMap</a>.end(); it!=eit; ++it)</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; {</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = it-&gt;first-&gt;getCaller();</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">MRSet</a> aliasMRs;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; callsiteRefCPts = it-&gt;second;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a02c60ceb7c9c37bcf83c739aa4083acc">getMRsForCallSiteRef</a>(aliasMRs, callsiteRefCPts, fun);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">for</span>(MRSet::iterator ait = aliasMRs.begin(), eait = aliasMRs.end(); ait!=eait; ++ait)</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a7a7ed21181c2486b60170a479a5a534e">callsiteToRefMRsMap</a>[it-&gt;first].insert(*ait);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; }</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; }</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;}</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;</div><div class="line"><a name="l00407"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a899c81db92c6bcf24f6f9b769e02e5bf"> 407</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a899c81db92c6bcf24f6f9b769e02e5bf">MRGenerator::addRefSideEffectOfFunction</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; refs)</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;{</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">for</span>(NodeBS::iterator it = refs.begin(), eit = refs.end(); it!=eit; ++it)</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; {</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#a2cf20660f2fd686fa3cabd046c4a10bf">isNonLocalObject</a>(*it,fun))</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#af6d58e2971c4a8d3ee03f9dfd9072a3a">funToRefsMap</a>[fun].<span class="keyword">set</span>(*it);</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; }</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;}</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div><div class="line"><a name="l00419"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a39604645ca9ba10607ada3872b14705a"> 419</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a39604645ca9ba10607ada3872b14705a">MRGenerator::addModSideEffectOfFunction</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; mods)</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;{</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">for</span>(NodeBS::iterator it = mods.begin(), eit = mods.end(); it!=eit; ++it)</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; {</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#a2cf20660f2fd686fa3cabd046c4a10bf">isNonLocalObject</a>(*it,fun))</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a2c94bfa19ad8d1d6360b12693c8b891d">funToModsMap</a>[fun].<span class="keyword">set</span>(*it);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;}</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;</div><div class="line"><a name="l00431"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a83f5087e84eb7a18976cbd3a446605ee"> 431</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MRGenerator.html#a83f5087e84eb7a18976cbd3a446605ee">MRGenerator::addRefSideEffectOfCallSite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; refs)</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; <span class="keywordflow">if</span>(!refs.empty())</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; {</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> refset = refs;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; refset &amp;= <a class="code" href="classSVF_1_1MRGenerator.html#ad402506c2938d4b5440119e6091e4057">getCallSiteArgsPts</a>(cs);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#add22c9a95478dea21148e87c8dfc584a">getEscapObjviaGlobals</a>(refset,refs);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a899c81db92c6bcf24f6f9b769e02e5bf">addRefSideEffectOfFunction</a>(cs-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a18f4077d42b23c3fed35efc793b6102e">getCaller</a>(),refset);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MRGenerator.html#ac7b5ca3fd950e1a940f875ac135640f6">csToRefsMap</a>[cs] |= refset;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</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="l00447"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a915486be8b119c1f1cc87143a2a5180e"> 447</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MRGenerator.html#a915486be8b119c1f1cc87143a2a5180e">MRGenerator::addModSideEffectOfCallSite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; mods)</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;{</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">if</span>(!mods.empty())</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> modset = mods;</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; modset &amp;= (<a class="code" href="classSVF_1_1MRGenerator.html#ad402506c2938d4b5440119e6091e4057">getCallSiteArgsPts</a>(cs) | <a class="code" href="classSVF_1_1MRGenerator.html#ab19c541dd4c3a0e691287da5dd43540d">getCallSiteRetPts</a>(cs));</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#add22c9a95478dea21148e87c8dfc584a">getEscapObjviaGlobals</a>(modset,mods);</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a39604645ca9ba10607ada3872b14705a">addModSideEffectOfFunction</a>(cs-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a18f4077d42b23c3fed35efc793b6102e">getCaller</a>(),modset);</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MRGenerator.html#a603f993995e7d6961e203a195bb56029">csToModsMap</a>[cs] |= modset;</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; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;}</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;</div><div class="line"><a name="l00464"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ab3d3ca72d2cddf5336d00dc623f33401"> 464</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#ab3d3ca72d2cddf5336d00dc623f33401">MRGenerator::getCallGraphSCCRevTopoOrder</a>(<a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a>&amp; worklist)</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; <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; topoOrder = <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a>-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a6502c0a765ac1653474ffee651949f93">topoNodeStack</a>();</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">while</span>(!topoOrder.empty())</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> callgraphNodeID = topoOrder.top();</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; topoOrder.pop();</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(callgraphNodeID);</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="l00479"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a9de695122660c1d8b65e1f3dab8a7ece"> 479</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a9de695122660c1d8b65e1f3dab8a7ece">MRGenerator::collectCallSitePts</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;{</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; argsPts = <a class="code" href="classSVF_1_1MRGenerator.html#afe91b57b451d7788364493549e015acf">csToCallSiteArgsPtsMap</a>[cs];</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode = pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a483e92e076a426ec8f177eab3b971723">getCallBlockNode</a>(cs-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>());</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a392e5ea7c356763a988407f91343f034">getRetBlockNode</a>(cs-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>());</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="classSVF_1_1FIFOWorkList.html">WorkList</a> worklist;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">if</span> (pag-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a95f77211550ec2374d57779d88cf5138">hasCallSiteArgsMap</a>(callBlockNode))</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; {</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVFIR::SVFVarList</a>&amp; args = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2a1e8ce39bf8deace3c344d5f05fe6ac">getCallSiteArgsList</a>(callBlockNode);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">for</span>(SVFIR::SVFVarList::const_iterator itA = args.begin(), ieA = args.end(); itA!=ieA; ++itA)</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; {</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = *itA;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordflow">if</span>(node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</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; }</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="keywordflow">while</span>(!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; {</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; tmp = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(nodeId).<a class="code" href="classSVF_1_1PointsTo.html#ae4749cf6dc43645e2479cefbcc246637">toNodeBS</a>();</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">for</span>(NodeBS::iterator it = tmp.begin(), eit = tmp.end(); it!=eit; ++it)</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; argsPts |= <a class="code" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">CollectPtsChain</a>(*it);</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; }</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; retPts = <a class="code" href="classSVF_1_1MRGenerator.html#a21550f978f42ac3cbb32cbc426ff5cb1">csToCallSiteRetPtsMap</a>[cs];</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa79dba26cb34b40eee682713db299d5f">callsiteHasRet</a>(retBlockNode))</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a3145677c7a3763fc0d6aa7e21b264ab6">getCallSiteRet</a>(retBlockNode);</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">if</span>(node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; {</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; tmp = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>()).toNodeBS();</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">for</span>(NodeBS::iterator it = tmp.begin(), eit = tmp.end(); it!=eit; ++it)</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; retPts |= <a class="code" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">CollectPtsChain</a>(*it);</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;}</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;</div><div class="line"><a name="l00527"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5"> 527</a></span>&#160;<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; <a class="code" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">MRGenerator::CollectPtsChain</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;{</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseId = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; NodeToPTSSMap::iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#a0e46c7beb580ace3a652ac9e1c419b48">cachedPtsChainMap</a>.find(baseId);</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1MRGenerator.html#a0e46c7beb580ace3a652ac9e1c419b48">cachedPtsChainMap</a>.end())</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; {</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; pts = <a class="code" href="classSVF_1_1MRGenerator.html#a0e46c7beb580ace3a652ac9e1c419b48">cachedPtsChainMap</a>[baseId];</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; pts |= <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a42d1e2f0213fb6e54c56cc0695b57cb0">getFieldsAfterCollapse</a>(baseId);</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a> worklist;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">for</span>(NodeBS::iterator it = pts.begin(), eit = pts.end(); it!=eit; ++it)</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(*it);</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">while</span>(!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; tmp = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(nodeId).<a class="code" href="classSVF_1_1PointsTo.html#ae4749cf6dc43645e2479cefbcc246637">toNodeBS</a>();</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordflow">for</span>(NodeBS::iterator it = tmp.begin(), eit = tmp.end(); it!=eit; ++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; pts |= <a class="code" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">CollectPtsChain</a>(*it);</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; }</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">return</span> pts;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; }</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="l00561"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#add22c9a95478dea21148e87c8dfc584a"> 561</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#add22c9a95478dea21148e87c8dfc584a">MRGenerator::getEscapObjviaGlobals</a>(<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; globs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; calleeModRef)</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;{</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordflow">for</span>(NodeBS::iterator it = calleeModRef.begin(), eit = calleeModRef.end(); it!=eit; ++it)</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; {</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(*it);</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(obj &amp;&amp; <span class="stringliteral">&quot;object not found!!&quot;</span>);</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#af46b82e45aa1ecdfb397325971206541">allGlobals</a>.test(*it))</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; globs.set(*it);</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;}</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;</div><div class="line"><a name="l00576"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a2cf20660f2fd686fa3cabd046c4a10bf"> 576</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MRGenerator.html#a2cf20660f2fd686fa3cabd046c4a10bf">MRGenerator::isNonLocalObject</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* curFun)<span class="keyword"> const</span></div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(obj &amp;&amp; <span class="stringliteral">&quot;object not found!!&quot;</span>);</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <span class="keywordflow">if</span>(obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4">isGlobalObj</a>() || obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">isHeap</a>())</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee">isStack</a>())</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="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a3bacb4f95c73e6d794901d01c6b65a83">AllocaInst</a>* local = SVFUtil::dyn_cast&lt;AllocaInst&gt;(obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>()))</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(local-&gt;getFunction());</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">if</span>(fun!=curFun)</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a>-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a5d699af73b1e7ad4e3a5f6d26b8b6d15">isInCycle</a>(<a class="code" href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">callGraph</a>-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">getCallGraphNode</a>(fun)-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; }</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; }</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;}</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;</div><div class="line"><a name="l00603"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#acbf0be131b1fc5d0366157d300d1aa68"> 603</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MRGenerator.html#acbf0be131b1fc5d0366157d300d1aa68">MRGenerator::handleCallsiteModRef</a>(<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; mod, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; ref, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee)</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;{</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a93ac673b885633849fa484938405ca75">isHeapAllocExtCall</a>(cs-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>()))</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; <a class="code" href="classSVF_1_1MRGenerator.html#a8717adf4520e0702274c5f013776be52">SVFStmtList</a>&amp; pagEdgeList = <a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">getPAGEdgesFromInst</a>(cs-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>());</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keywordflow">for</span> (SVFStmtList::const_iterator bit = pagEdgeList.begin(),</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; ebit = pagEdgeList.end(); bit != ebit; ++bit)</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; {</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *bit;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a>* addr = SVFUtil::dyn_cast&lt;AddrStmt&gt;(edge))</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; mod.set(addr-&gt;getRHSVarID());</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; }</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; }</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; {</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; mod = <a class="code" href="classSVF_1_1MRGenerator.html#a7d47fbc3dbe8fd19ca5e4210bdecf914">getModSideEffectOfFunction</a>(callee);</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; ref = <a class="code" href="classSVF_1_1MRGenerator.html#ac0007c8808654ca74feef0d8568378b9">getRefSideEffectOfFunction</a>(callee);</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="comment">// add ref set</span></div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keywordtype">bool</span> refchanged = <a class="code" href="classSVF_1_1MRGenerator.html#a83f5087e84eb7a18976cbd3a446605ee">addRefSideEffectOfCallSite</a>(cs, ref);</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="comment">// add mod set</span></div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keywordtype">bool</span> modchanged = <a class="code" href="classSVF_1_1MRGenerator.html#a915486be8b119c1f1cc87143a2a5180e">addModSideEffectOfCallSite</a>(cs, mod);</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keywordflow">return</span> refchanged || modchanged;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160;}</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;</div><div class="line"><a name="l00635"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#adc9d530e6f010596d91cd3711dc1358b"> 635</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#adc9d530e6f010596d91cd3711dc1358b">MRGenerator::modRefAnalysis</a>(<a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* callGraphNode, <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a>&amp; worklist)</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;</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1PTACallGraphNode.html#a796994541eec90f2b540e24816120aff">PTACallGraphNode::iterator</a> it = callGraphNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">InEdgeBegin</a>(), eit = callGraphNode-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">InEdgeEnd</a>();</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; it!=eit; ++it)</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; {</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a>* edge = *it;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160;</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keywordflow">for</span>(PTACallGraphEdge::CallInstSet::iterator cit = edge-&gt;<a class="code" href="classSVF_1_1PTACallGraphEdge.html#af0e9f86be3cf263b868f80d374641fc9">getDirectCalls</a>().begin(),</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; ecit = edge-&gt;<a class="code" href="classSVF_1_1PTACallGraphEdge.html#af0e9f86be3cf263b868f80d374641fc9">getDirectCalls</a>().end(); cit!=ecit; ++cit)</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; {</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> mod, ref;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = (*cit);</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordtype">bool</span> modrefchanged = <a class="code" href="classSVF_1_1MRGenerator.html#acbf0be131b1fc5d0366157d300d1aa68">handleCallsiteModRef</a>(mod, ref, cs, callGraphNode-&gt;<a class="code" href="classSVF_1_1PTACallGraphNode.html#a959445c97605953fbdebbbd999437a09">getFunction</a>());</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keywordflow">if</span>(modrefchanged)</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>());</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; }</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordflow">for</span>(PTACallGraphEdge::CallInstSet::iterator cit = edge-&gt;<a class="code" href="classSVF_1_1PTACallGraphEdge.html#a76aa19edf03a4cacfa3e27a21abfcd07">getIndirectCalls</a>().begin(),</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; ecit = edge-&gt;<a class="code" href="classSVF_1_1PTACallGraphEdge.html#a76aa19edf03a4cacfa3e27a21abfcd07">getIndirectCalls</a>().end(); cit!=ecit; ++cit)</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; {</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> mod, ref;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = (*cit);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordtype">bool</span> modrefchanged = <a class="code" href="classSVF_1_1MRGenerator.html#acbf0be131b1fc5d0366157d300d1aa68">handleCallsiteModRef</a>(mod, ref, cs, callGraphNode-&gt;<a class="code" href="classSVF_1_1PTACallGraphNode.html#a959445c97605953fbdebbbd999437a09">getFunction</a>());</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordflow">if</span>(modrefchanged)</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</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; }</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160;}</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160;</div><div class="line"><a name="l00670"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ae487d7b800d7536b578095c9f140ac80"> 670</a></span>&#160;<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1MRGenerator.html#ae487d7b800d7536b578095c9f140ac80">MRGenerator::getModInfoForCall</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)</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="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(cs-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>()) &amp;&amp; !<a class="code" href="namespaceSVF_1_1SVFUtil.html#a93ac673b885633849fa484938405ca75">isHeapAllocExtCall</a>(cs-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>()))</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; {</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#a8717adf4520e0702274c5f013776be52">SVFStmtList</a>&amp; pagEdgeList = <a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">getPAGEdgesFromInst</a>(cs-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>());</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> mods;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keywordflow">for</span> (SVFStmtList::const_iterator bit = pagEdgeList.begin(), ebit =</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; pagEdgeList.end(); bit != ebit; ++bit)</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *bit;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>* st = SVFUtil::dyn_cast&lt;StoreStmt&gt;(edge))</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; mods |= <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(st-&gt;getLHSVarID()).toNodeBS();</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; }</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">return</span> mods;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; }</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">else</span></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">return</span> <a class="code" href="classSVF_1_1MRGenerator.html#a1535832f5b1ae3178fea950bf71fdd99">getModSideEffectOfCallSite</a>(cs);</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; }</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160;}</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160;</div><div class="line"><a name="l00694"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a965a31712341b1fc02e667f325423ca2"> 694</a></span>&#160;<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1MRGenerator.html#a965a31712341b1fc02e667f325423ca2">MRGenerator::getRefInfoForCall</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)</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; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(cs-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>()) &amp;&amp; !<a class="code" href="namespaceSVF_1_1SVFUtil.html#a93ac673b885633849fa484938405ca75">isHeapAllocExtCall</a>(cs-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</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; <a class="code" href="classSVF_1_1MRGenerator.html#a8717adf4520e0702274c5f013776be52">SVFStmtList</a>&amp; pagEdgeList = <a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">getPAGEdgesFromInst</a>(cs-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>());</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> refs;</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordflow">for</span> (SVFStmtList::const_iterator bit = pagEdgeList.begin(), ebit =</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; pagEdgeList.end(); bit != ebit; ++bit)</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; {</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *bit;</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a>* ld = SVFUtil::dyn_cast&lt;LoadStmt&gt;(edge))</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; refs |= <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(ld-&gt;getRHSVarID()).toNodeBS();</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">return</span> refs;</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; }</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keywordflow">else</span></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">return</span> <a class="code" href="classSVF_1_1MRGenerator.html#a62757aa995a6a01b484c60df2f51c53d">getRefSideEffectOfCallSite</a>(cs);</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; }</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;</div><div class="line"><a name="l00719"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702"> 719</a></span>&#160;<a class="code" href="namespaceSVF.html#a7e833aa9feaf931fb44fb1e3fd502a6c">ModRefInfo</a> <a class="code" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">MRGenerator::getModRefInfo</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)</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="keywordtype">bool</span> ref = !<a class="code" href="classSVF_1_1MRGenerator.html#a965a31712341b1fc02e667f325423ca2">getRefInfoForCall</a>(cs).empty();</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keywordtype">bool</span> mod = !<a class="code" href="classSVF_1_1MRGenerator.html#ae487d7b800d7536b578095c9f140ac80">getModInfoForCall</a>(cs).empty();</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; <span class="keywordflow">if</span> (mod &amp;&amp; ref)</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordflow">return</span> ModRefInfo::ModRef;</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ref)</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keywordflow">return</span> ModRefInfo::Ref;</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (mod)</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">return</span> ModRefInfo::Mod;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">return</span> ModRefInfo::NoModRef;</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="l00738"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a3a6c0f60c861b6d744225a40aea638d7"> 738</a></span>&#160;<a class="code" href="namespaceSVF.html#a7e833aa9feaf931fb44fb1e3fd502a6c">ModRefInfo</a> <a class="code" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">MRGenerator::getModRefInfo</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V)</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160;{</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="keywordtype">bool</span> ref = <span class="keyword">false</span>;</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordtype">bool</span> mod = <span class="keyword">false</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; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1IRGraph.html#aceb17dfbe137658625e16291127267d1">hasValueNode</a>(V))</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; {</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> pts(<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V)).toNodeBS());</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> csRef = <a class="code" href="classSVF_1_1MRGenerator.html#a965a31712341b1fc02e667f325423ca2">getRefInfoForCall</a>(cs);</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> csMod = <a class="code" href="classSVF_1_1MRGenerator.html#ae487d7b800d7536b578095c9f140ac80">getModInfoForCall</a>(cs);</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> ptsExpanded, csRefExpanded, csModExpanded;</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(pts, ptsExpanded);</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(csRef, csRefExpanded);</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(csMod, csModExpanded);</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">if</span> (csRefExpanded.intersects(ptsExpanded))</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; ref = <span class="keyword">true</span>;</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <span class="keywordflow">if</span> (csModExpanded.intersects(ptsExpanded))</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; mod = <span class="keyword">true</span>;</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; }</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160;</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="keywordflow">if</span> (mod &amp;&amp; ref)</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="keywordflow">return</span> ModRefInfo::ModRef;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ref)</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <span class="keywordflow">return</span> ModRefInfo::Ref;</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (mod)</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <span class="keywordflow">return</span> ModRefInfo::Mod;</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keywordflow">return</span> ModRefInfo::NoModRef;</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160;}</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160;</div><div class="line"><a name="l00772"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a7e1c258e120d89d7b9d6e414f91c6e4a"> 772</a></span>&#160;<a class="code" href="namespaceSVF.html#a7e833aa9feaf931fb44fb1e3fd502a6c">ModRefInfo</a> <a class="code" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">MRGenerator::getModRefInfo</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs1, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs2)</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;{</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="keywordtype">bool</span> ref = <span class="keyword">false</span>;</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keywordtype">bool</span> mod = <span class="keyword">false</span>;</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">getModRefInfo</a>(cs1) == ModRefInfo::NoModRef || <a class="code" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">getModRefInfo</a>(cs2) == ModRefInfo::NoModRef)</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="keywordflow">return</span> ModRefInfo::NoModRef;</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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cs1Ref = <a class="code" href="classSVF_1_1MRGenerator.html#a965a31712341b1fc02e667f325423ca2">getRefInfoForCall</a>(cs1);</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cs1Mod = <a class="code" href="classSVF_1_1MRGenerator.html#ae487d7b800d7536b578095c9f140ac80">getModInfoForCall</a>(cs1);</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cs2Ref = <a class="code" href="classSVF_1_1MRGenerator.html#a965a31712341b1fc02e667f325423ca2">getRefInfoForCall</a>(cs2);</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cs2Mod = <a class="code" href="classSVF_1_1MRGenerator.html#ae487d7b800d7536b578095c9f140ac80">getModInfoForCall</a>(cs2);</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cs1RefExpanded, cs1ModExpanded, cs2RefExpanded, cs2ModExpanded;</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(cs1Ref, cs1RefExpanded);</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(cs1Mod, cs1ModExpanded);</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(cs2Ref, cs2RefExpanded);</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-&gt;<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(cs2Mod, cs2ModExpanded);</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160;</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="keywordflow">if</span> (cs1RefExpanded.intersects(cs2ModExpanded))</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; ref = <span class="keyword">true</span>;</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordflow">if</span> (cs1ModExpanded.intersects(cs2RefExpanded) || cs1ModExpanded.intersects(cs2ModExpanded))</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; mod = <span class="keyword">true</span>;</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordflow">if</span> (cs1RefExpanded.intersects(cs2ModExpanded) &amp;&amp; cs1ModExpanded.intersects(cs2ModExpanded))</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; ref = mod = <span class="keyword">true</span>;</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="keywordflow">if</span> (ref &amp;&amp; mod)</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <span class="keywordflow">return</span> ModRefInfo::ModRef;</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ref)</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">return</span> ModRefInfo::Ref;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (mod)</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; <span class="keywordflow">return</span> ModRefInfo::Mod;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <span class="keywordflow">return</span> ModRefInfo::NoModRef;</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160;}</div><div class="ttc" id="classSVF_1_1MRGenerator_html_af6d58e2971c4a8d3ee03f9dfd9072a3a"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#af6d58e2971c4a8d3ee03f9dfd9072a3a">SVF::MRGenerator::funToRefsMap</a></div><div class="ttdeci">FunToPointsToMap funToRefsMap</div><div class="ttdoc">Map a function to its indirect uses of memory objects. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00223">MemRegion.h:223</a></div></div>
70
70
  <div class="ttc" id="classSVF_1_1PointsTo_html_ae4749cf6dc43645e2479cefbcc246637"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ae4749cf6dc43645e2479cefbcc246637">SVF::PointsTo::toNodeBS</a></div><div class="ttdeci">NodeBS toNodeBS(void) const</div><div class="ttdoc">Returns this points-to set as a NodeBS. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00298">PointsTo.cpp:298</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html">SVF::BVDataPTAImpl</a></div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00042">PointerAnalysisImpl.h:42</a></div></div>
72
72
  <div class="ttc" id="classSVF_1_1MRGenerator_html_aa3a12cf1f761d25b9213bc6e50d89ba5"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">SVF::MRGenerator::callGraphSCC</a></div><div class="ttdeci">SCC * callGraphSCC</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00194">MemRegion.h:194</a></div></div>
@@ -75,11 +75,13 @@ $(function() {
75
75
  <div class="ttc" id="classSVF_1_1SVFIR_html_a64939d7ecfd8e2cf862782954a56596b"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVF::SVFIR::SVFVarList</a></div><div class="ttdeci">std::vector&lt; const SVFVar * &gt; SVFVarList</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00057">SVFIR.h:57</a></div></div>
76
76
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a7d47fbc3dbe8fd19ca5e4210bdecf914"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a7d47fbc3dbe8fd19ca5e4210bdecf914">SVF::MRGenerator::getModSideEffectOfFunction</a></div><div class="ttdeci">const NodeBS &amp; getModSideEffectOfFunction(const SVFFunction *fun)</div><div class="ttdoc">Get indirect mods of a function. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00389">MemRegion.h:389</a></div></div>
77
77
  <div class="ttc" id="classSVF_1_1MemObj_html"><div class="ttname"><a href="classSVF_1_1MemObj.html">SVF::MemObj</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00418">SymbolTableInfo.h:418</a></div></div>
78
- <div class="ttc" id="classSVF_1_1MRGenerator_html_acbc431cc7fb72135e592d74709ea7a77"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#acbc431cc7fb72135e592d74709ea7a77">SVF::MRGenerator::getRefInfoForCall</a></div><div class="ttdeci">NodeBS getRefInfoForCall(const CallBlockNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00694">MemRegion.cpp:694</a></div></div>
79
78
  <div class="ttc" id="classSVF_1_1PTACallGraph_html_aaab54c670518d9d6790707f76ea76aa1"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">SVF::PTACallGraph::getCallGraphNode</a></div><div class="ttdeci">PTACallGraphNode * getCallGraphNode(NodeID id) const</div><div class="ttdoc">Get call graph node. </div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00315">PTACallGraph.h:315</a></div></div>
80
79
  <div class="ttc" id="classSVF_1_1SCCDetection_html_a6ab5eff6a576e6d8703c1ea29b7f425d"><div class="ttname"><a href="classSVF_1_1SCCDetection.html#a6ab5eff6a576e6d8703c1ea29b7f425d">SVF::SCCDetection::subNodes</a></div><div class="ttdeci">const NodeBS &amp; subNodes(NodeID n) const</div><div class="ttdoc">get all subnodes in one scc, if size is empty insert itself into the set </div><div class="ttdef"><b>Definition:</b> <a href="SCC_8h_source.html#l00173">SCC.h:173</a></div></div>
80
+ <div class="ttc" id="classSVF_1_1MRGenerator_html_a915486be8b119c1f1cc87143a2a5180e"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a915486be8b119c1f1cc87143a2a5180e">SVF::MRGenerator::addModSideEffectOfCallSite</a></div><div class="ttdeci">bool addModSideEffectOfCallSite(const CallICFGNode *cs, const NodeBS &amp;mods)</div><div class="ttdoc">Add indirect def an memory object in the function. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00447">MemRegion.cpp:447</a></div></div>
81
81
  <div class="ttc" id="classSVF_1_1MRGenerator_html_ac0b966ee2065607a24920dd9067b40e9"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ac0b966ee2065607a24920dd9067b40e9">SVF::MRGenerator::partitionMRs</a></div><div class="ttdeci">virtual void partitionMRs()</div><div class="ttdoc">Partition regions. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00317">MemRegion.cpp:317</a></div></div>
82
82
  <div class="ttc" id="classSVF_1_1SCCDetection_html_a6502c0a765ac1653474ffee651949f93"><div class="ttname"><a href="classSVF_1_1SCCDetection.html#a6502c0a765ac1653474ffee651949f93">SVF::SCCDetection::topoNodeStack</a></div><div class="ttdeci">GNodeStack &amp; topoNodeStack()</div><div class="ttdef"><b>Definition:</b> <a href="SCC_8h_source.html#l00128">SCC.h:128</a></div></div>
83
+ <div class="ttc" id="classSVF_1_1MRGenerator_html_ab19c541dd4c3a0e691287da5dd43540d"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ab19c541dd4c3a0e691287da5dd43540d">SVF::MRGenerator::getCallSiteRetPts</a></div><div class="ttdeci">NodeBS &amp; getCallSiteRetPts(const CallICFGNode *cs)</div><div class="ttdoc">Return the pts chain of the return parameter of the callsite. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00256">MemRegion.h:256</a></div></div>
84
+ <div class="ttc" id="classSVF_1_1MRGenerator_html_a62757aa995a6a01b484c60df2f51c53d"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a62757aa995a6a01b484c60df2f51c53d">SVF::MRGenerator::getRefSideEffectOfCallSite</a></div><div class="ttdeci">const NodeBS &amp; getRefSideEffectOfCallSite(const CallICFGNode *cs)</div><div class="ttdoc">Get indirect refs of a callsite. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00394">MemRegion.h:394</a></div></div>
83
85
  <div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00077">BasicTypes.h:77</a></div></div>
84
86
  <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>
85
87
  <div class="ttc" id="classSVF_1_1SVFIR_html_a6bc360d2604ae4a0af74530b263b10d9"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9">SVF::SVFIR::SVFStmtList</a></div><div class="ttdeci">std::vector&lt; const SVFStmt * &gt; SVFStmtList</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00056">SVFIR.h:56</a></div></div>
@@ -87,13 +89,11 @@ $(function() {
87
89
  <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>
88
90
  <div class="ttc" id="classSVF_1_1SVFModule_html_a5486697889c6cca4f9f426650defc255"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a5486697889c6cca4f9f426650defc255">SVF::SVFModule::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00147">SVFModule.h:147</a></div></div>
89
91
  <div class="ttc" id="MemRegion_8h_html"><div class="ttname"><a href="MemRegion_8h.html">MemRegion.h</a></div></div>
90
- <div class="ttc" id="classSVF_1_1SVFIR_html_a70aa4d730ef1d38ef9c46f5014465bdd"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a70aa4d730ef1d38ef9c46f5014465bdd">SVF::SVFIR::getCallSiteRet</a></div><div class="ttdeci">const SVFVar * getCallSiteRet(const RetBlockNode *cs) const</div><div class="ttdoc">Get callsite return. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00254">SVFIR.h:254</a></div></div>
91
- <div class="ttc" id="classSVF_1_1ICFG_html_a7d10e8a815c836a070d35850f817a18c"><div class="ttname"><a href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">SVF::ICFG::getCallBlockNode</a></div><div class="ttdeci">CallBlockNode * getCallBlockNode(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00197">ICFG.cpp:197</a></div></div>
92
92
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a02c60ceb7c9c37bcf83c739aa4083acc"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a02c60ceb7c9c37bcf83c739aa4083acc">SVF::MRGenerator::getMRsForCallSiteRef</a></div><div class="ttdeci">virtual void getMRsForCallSiteRef(MRSet &amp;aliasMRs, const NodeBS &amp;cpts, const SVFFunction *)</div><div class="ttdoc">Get memory regions for call site ref according to cpts. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00322">MemRegion.h:322</a></div></div>
93
+ <div class="ttc" id="classSVF_1_1MRGenerator_html_ad402506c2938d4b5440119e6091e4057"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ad402506c2938d4b5440119e6091e4057">SVF::MRGenerator::getCallSiteArgsPts</a></div><div class="ttdeci">NodeBS &amp; getCallSiteArgsPts(const CallICFGNode *cs)</div><div class="ttdoc">Return the pts chain of all callsite arguments. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00251">MemRegion.h:251</a></div></div>
93
94
  <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>
94
- <div class="ttc" id="classSVF_1_1SVFIR_html_a2a4185af81e7e10f0db74c39ee220101"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2a4185af81e7e10f0db74c39ee220101">SVF::SVFIR::hasCallSiteArgsMap</a></div><div class="ttdeci">bool hasCallSiteArgsMap(const CallBlockNode *cs) const</div><div class="ttdoc">Callsite has argument list. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00232">SVFIR.h:232</a></div></div>
95
95
  <div class="ttc" id="classSVF_1_1FIFOWorkList_html_a7056704c224dfb4b57287fe90c004aa8"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">SVF::FIFOWorkList::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00146">WorkList.h:146</a></div></div>
96
- <div class="ttc" id="classSVF_1_1MRGenerator_html_ae2cc7d7d6ab427acb0352b388c7a4acc"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ae2cc7d7d6ab427acb0352b388c7a4acc">SVF::MRGenerator::getRefSideEffectOfCallSite</a></div><div class="ttdeci">const NodeBS &amp; getRefSideEffectOfCallSite(const CallBlockNode *cs)</div><div class="ttdoc">Get indirect refs of a callsite. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00394">MemRegion.h:394</a></div></div>
96
+ <div class="ttc" id="classSVF_1_1ICFG_html_a392e5ea7c356763a988407f91343f034"><div class="ttname"><a href="classSVF_1_1ICFG.html#a392e5ea7c356763a988407f91343f034">SVF::ICFG::getRetBlockNode</a></div><div class="ttdeci">RetICFGNode * getRetBlockNode(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00222">ICFG.cpp:222</a></div></div>
97
97
  <div class="ttc" id="classSVF_1_1MemObj_html_a40462512a99eb258d8cd442c38d812b4"><div class="ttname"><a href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4">SVF::MemObj::isGlobalObj</a></div><div class="ttdeci">bool isGlobalObj() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00665">SymbolTableInfo.cpp:665</a></div></div>
98
98
  <div class="ttc" id="classSVF_1_1MemObj_html_af7316c697eafc71d5fc93108da4e2cee"><div class="ttname"><a href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee">SVF::MemObj::isStack</a></div><div class="ttdeci">bool isStack() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00675">SymbolTableInfo.cpp:675</a></div></div>
99
99
  <div class="ttc" id="classSVF_1_1SVFIR_html_abb91ed47d5c13d0ad7eec35164e37988"><div class="ttname"><a href="classSVF_1_1SVFIR.html#abb91ed47d5c13d0ad7eec35164e37988">SVF::SVFIR::getPTASVFStmtList</a></div><div class="ttdeci">SVFStmtList &amp; getPTASVFStmtList(const ICFGNode *inst)</div><div class="ttdoc">Given an instruction, get all its PTA PAGEdges. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00186">SVFIR.h:186</a></div></div>
@@ -103,24 +103,22 @@ $(function() {
103
103
  <div class="ttc" id="classSVF_1_1SVFIR_html_a77a6bb9335aa12d29825af1b5ea07e08"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">SVF::SVFIR::getBaseObjVar</a></div><div class="ttdeci">NodeID getBaseObjVar(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00442">SVFIR.h:442</a></div></div>
104
104
  <div class="ttc" id="classSVF_1_1SCCDetection_html_a123b5006a6da7053e5e357140da3c5a3"><div class="ttname"><a href="classSVF_1_1SCCDetection.html#a123b5006a6da7053e5e357140da3c5a3">SVF::SCCDetection::find</a></div><div class="ttdeci">void find(void)</div><div class="ttdef"><b>Definition:</b> <a href="SCC_8h_source.html#l00308">SCC.h:308</a></div></div>
105
105
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a34967cda51699f948a581b9f88fa3b10"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a34967cda51699f948a581b9f88fa3b10">SVF::MRGenerator::callsiteToRefPointsToMap</a></div><div class="ttdeci">CallSiteToPointsToMap callsiteToRefPointsToMap</div><div class="ttdoc">Map a callsite to it refs cpts set. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00213">MemRegion.h:213</a></div></div>
106
- <div class="ttc" id="classSVF_1_1MRGenerator_html_aebd6abbf574392abce426dc796d2ee56"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#aebd6abbf574392abce426dc796d2ee56">SVF::MRGenerator::getModSideEffectOfCallSite</a></div><div class="ttdeci">const NodeBS &amp; getModSideEffectOfCallSite(const CallBlockNode *cs)</div><div class="ttdoc">Get indirect mods of a callsite. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00399">MemRegion.h:399</a></div></div>
107
106
  <div class="ttc" id="classSVF_1_1MRGenerator_html_ac18324bd2b862c3cdbf65494bf69ecb5"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ac18324bd2b862c3cdbf65494bf69ecb5">SVF::MRGenerator::createMR</a></div><div class="ttdeci">void createMR(const SVFFunction *fun, const NodeBS &amp;cpts)</div><div class="ttdoc">Generate a memory region and put in into functions which use it. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00070">MemRegion.cpp:70</a></div></div>
108
107
  <div class="ttc" id="classSVF_1_1SVFVar_html"><div class="ttname"><a href="classSVF_1_1SVFVar.html">SVF::SVFVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00046">SVFVariables.h:46</a></div></div>
108
+ <div class="ttc" id="classSVF_1_1MRGenerator_html_a83f5087e84eb7a18976cbd3a446605ee"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a83f5087e84eb7a18976cbd3a446605ee">SVF::MRGenerator::addRefSideEffectOfCallSite</a></div><div class="ttdeci">bool addRefSideEffectOfCallSite(const CallICFGNode *cs, const NodeBS &amp;refs)</div><div class="ttdoc">Add indirect uses an memory object in the function. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00431">MemRegion.cpp:431</a></div></div>
109
109
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a0d8229b1f0b8428708e923d19096e4ba"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a0d8229b1f0b8428708e923d19096e4ba">SVF::MRGenerator::loadsToMRsMap</a></div><div class="ttdeci">LoadsToMRsMap loadsToMRsMap</div><div class="ttdoc">Map a load SVFIR Edge to its memory regions sets in order for inserting mus in Memory SSA...</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00201">MemRegion.h:201</a></div></div>
110
110
  <div class="ttc" id="classSVF_1_1ObjVar_html"><div class="ttname"><a href="classSVF_1_1ObjVar.html">SVF::ObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00322">SVFVariables.h:322</a></div></div>
111
111
  <div class="ttc" id="classSVF_1_1MRGenerator_html_af50efed3af17806a3ba3f668e4466d3e"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#af50efed3af17806a3ba3f668e4466d3e">SVF::MRGenerator::addCPtsToStore</a></div><div class="ttdeci">void addCPtsToStore(NodeBS &amp;cpts, const StoreStmt *st, const SVFFunction *fun)</div><div class="ttdoc">Add cpts to store/load. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00337">MemRegion.h:337</a></div></div>
112
112
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a8717adf4520e0702274c5f013776be52"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a8717adf4520e0702274c5f013776be52">SVF::MRGenerator::SVFStmtList</a></div><div class="ttdeci">SVFIR::SVFStmtList SVFStmtList</div><div class="ttdoc">SVFIR edge list. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00172">MemRegion.h:172</a></div></div>
113
113
  <div class="ttc" id="classSVF_1_1SVFModule_html"><div class="ttname"><a href="classSVF_1_1SVFModule.html">SVF::SVFModule</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00041">SVFModule.h:41</a></div></div>
114
- <div class="ttc" id="classSVF_1_1CallBlockNode_html_a5bab98a0b8cf0a804d53abd994e922c0"><div class="ttname"><a href="classSVF_1_1CallBlockNode.html#a5bab98a0b8cf0a804d53abd994e922c0">SVF::CallBlockNode::getCaller</a></div><div class="ttdeci">const SVFFunction * getCaller() const</div><div class="ttdoc">Return callsite. </div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00400">ICFGNode.h:400</a></div></div>
115
114
  <div class="ttc" id="classSVF_1_1MRGenerator_html_ac7b5ca3fd950e1a940f875ac135640f6"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ac7b5ca3fd950e1a940f875ac135640f6">SVF::MRGenerator::csToRefsMap</a></div><div class="ttdeci">CallSiteToPointsToMap csToRefsMap</div><div class="ttdoc">Map a callsite to its indirect uses of memory objects. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00227">MemRegion.h:227</a></div></div>
116
115
  <div class="ttc" id="classSVF_1_1GenericNode_html_ae5b113921530eee6afe58a65d8e5b3a7"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">SVF::GenericNode::InEdgeBegin</a></div><div class="ttdeci">iterator InEdgeBegin()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00210">GenericGraph.h:210</a></div></div>
117
- <div class="ttc" id="classSVF_1_1MRGenerator_html_a07dc868039c5e2764b3cc34faff6d94a"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a07dc868039c5e2764b3cc34faff6d94a">SVF::MRGenerator::hasModSideEffectOfCallSite</a></div><div class="ttdeci">bool hasModSideEffectOfCallSite(const CallBlockNode *cs)</div><div class="ttdoc">Has indirect mods of a callsite. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00409">MemRegion.h:409</a></div></div>
118
116
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a3e74c3706ffcc14f378771b417dcbb96"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a3e74c3706ffcc14f378771b417dcbb96">SVF::MRGenerator::funToMRsMap</a></div><div class="ttdeci">FunToMRsMap funToMRsMap</div><div class="ttdoc">Map a function to all its memory regions. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00199">MemRegion.h:199</a></div></div>
119
- <div class="ttc" id="classSVF_1_1MRGenerator_html_a77cf2b1959581da2b0cdf88291664ff3"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a77cf2b1959581da2b0cdf88291664ff3">SVF::MRGenerator::addCPtsToCallSiteRefs</a></div><div class="ttdeci">void addCPtsToCallSiteRefs(NodeBS &amp;cpts, const CallBlockNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00349">MemRegion.h:349</a></div></div>
120
117
  <div class="ttc" id="classSVF_1_1MRGenerator_html_acc78a116ca0be01a359d1313b2ae603c"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">SVF::MRGenerator::getPAGEdgesFromInst</a></div><div class="ttdeci">SVFStmtList &amp; getPAGEdgesFromInst(const Instruction *inst)</div><div class="ttdoc">Given an instruction, get all its the PAGEdge (statement) in sequence. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00160">MemRegion.cpp:160</a></div></div>
118
+ <div class="ttc" id="classSVF_1_1MRGenerator_html_a1535832f5b1ae3178fea950bf71fdd99"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a1535832f5b1ae3178fea950bf71fdd99">SVF::MRGenerator::getModSideEffectOfCallSite</a></div><div class="ttdeci">const NodeBS &amp; getModSideEffectOfCallSite(const CallICFGNode *cs)</div><div class="ttdoc">Get indirect mods of a callsite. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00399">MemRegion.h:399</a></div></div>
121
119
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a7d86f708743a59aa31c0a9fd6de45dac"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a7d86f708743a59aa31c0a9fd6de45dac">SVF::MRGenerator::storesToPointsToMap</a></div><div class="ttdeci">StoresToPointsToMap storesToPointsToMap</div><div class="ttdoc">Map a store SVFIR Edge to its CPts set map. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00211">MemRegion.h:211</a></div></div>
122
120
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a05005a166c39b1adea492655d77db519"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">SVF::MRGenerator::callGraph</a></div><div class="ttdeci">PTACallGraph * callGraph</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00195">MemRegion.h:195</a></div></div>
123
- <div class="ttc" id="classSVF_1_1MRGenerator_html_af0d1a34ce38e9b20ee6fc7b27fcd5198"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#af0d1a34ce38e9b20ee6fc7b27fcd5198">SVF::MRGenerator::getModInfoForCall</a></div><div class="ttdeci">NodeBS getModInfoForCall(const CallBlockNode *cs)</div><div class="ttdoc">getModRefInfo APIs </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00670">MemRegion.cpp:670</a></div></div>
121
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a95f77211550ec2374d57779d88cf5138"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a95f77211550ec2374d57779d88cf5138">SVF::SVFIR::hasCallSiteArgsMap</a></div><div class="ttdeci">bool hasCallSiteArgsMap(const CallICFGNode *cs) const</div><div class="ttdoc">Callsite has argument list. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00232">SVFIR.h:232</a></div></div>
124
122
  <div class="ttc" id="classSVF_1_1SVFVar_html_a3b61042079a6c9dc395f38925c6a1271"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">SVF::SVFVar::isPointer</a></div><div class="ttdeci">virtual bool isPointer() const</div><div class="ttdoc">Whether it is a pointer. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00118">SVFVariables.h:118</a></div></div>
125
123
  <div class="ttc" id="classSVF_1_1MRGenerator_html_ab8df193e84009e406c301731d17dc7b9"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ab8df193e84009e406c301731d17dc7b9">SVF::MRGenerator::callsiteToModPointsToMap</a></div><div class="ttdeci">CallSiteToPointsToMap callsiteToModPointsToMap</div><div class="ttdoc">Map a callsite to it mods cpts set. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00215">MemRegion.h:215</a></div></div>
126
124
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a98b3481580be48cff7e93bf3c8a29dac"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a98b3481580be48cff7e93bf3c8a29dac">SVF::MRGenerator::getRepPointsTo</a></div><div class="ttdeci">const NodeBS &amp; getRepPointsTo(const NodeBS &amp;cpts) const</div><div class="ttdoc">Get superset cpts set. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00182">MemRegion.h:182</a></div></div>
@@ -129,33 +127,34 @@ $(function() {
129
127
  <div class="ttc" id="classSVF_1_1SVFIR_html_aa530e33657f68fc2e8eae9435ce430cb"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa530e33657f68fc2e8eae9435ce430cb">SVF::SVFIR::getCallSiteSet</a></div><div class="ttdeci">const CallSiteSet &amp; getCallSiteSet() const</div><div class="ttdoc">Get all callsites. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00204">SVFIR.h:204</a></div></div>
130
128
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a6f631290f3da7c308395eb6a9472d7a5"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a6f631290f3da7c308395eb6a9472d7a5">SVF::MRGenerator::hasSVFStmtList</a></div><div class="ttdeci">bool hasSVFStmtList(const Instruction *inst)</div><div class="ttdoc">Whether this instruction has SVFIR Edge. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00151">MemRegion.cpp:151</a></div></div>
131
129
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a9c1da53188729eb743e1a33bbad87af7"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a9c1da53188729eb743e1a33bbad87af7">SVF::MRGenerator::updateAliasMRs</a></div><div class="ttdeci">virtual void updateAliasMRs()</div><div class="ttdoc">Update aliased regions for loads/stores/callsites. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00348">MemRegion.cpp:348</a></div></div>
130
+ <div class="ttc" id="classSVF_1_1RetICFGNode_html"><div class="ttname"><a href="classSVF_1_1RetICFGNode.html">SVF::RetICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00459">ICFGNode.h:459</a></div></div>
132
131
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a81bd687d34eea884dfcf68274fcec7b5"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">SVF::MRGenerator::CollectPtsChain</a></div><div class="ttdeci">NodeBS &amp; CollectPtsChain(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00527">MemRegion.cpp:527</a></div></div>
133
132
  <div class="ttc" id="classSVF_1_1MRGenerator_html_af46b82e45aa1ecdfb397325971206541"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#af46b82e45aa1ecdfb397325971206541">SVF::MRGenerator::allGlobals</a></div><div class="ttdeci">NodeBS allGlobals</div><div class="ttdoc">All global variable SVFIR node ids. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00239">MemRegion.h:239</a></div></div>
134
- <div class="ttc" id="classSVF_1_1MRGenerator_html_aac03d1d2e10543e100530f99165b4388"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#aac03d1d2e10543e100530f99165b4388">SVF::MRGenerator::getCallSiteRetPts</a></div><div class="ttdeci">NodeBS &amp; getCallSiteRetPts(const CallBlockNode *cs)</div><div class="ttdoc">Return the pts chain of the return parameter of the callsite. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00256">MemRegion.h:256</a></div></div>
133
+ <div class="ttc" id="classSVF_1_1MRGenerator_html_a965a31712341b1fc02e667f325423ca2"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a965a31712341b1fc02e667f325423ca2">SVF::MRGenerator::getRefInfoForCall</a></div><div class="ttdeci">NodeBS getRefInfoForCall(const CallICFGNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00694">MemRegion.cpp:694</a></div></div>
135
134
  <div class="ttc" id="classSVF_1_1MRGenerator_html_afdae3e11009966856736d9aa1e2ad5bd"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#afdae3e11009966856736d9aa1e2ad5bd">SVF::MRGenerator::collectGlobals</a></div><div class="ttdeci">void collectGlobals()</div><div class="ttdoc">Collect all global variables for later escape analysis. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00105">MemRegion.cpp:105</a></div></div>
136
135
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_ad8b71cebf46deaf60e2cd4f6d6bb9433"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ad8b71cebf46deaf60e2cd4f6d6bb9433">SVF::PointerAnalysis::getModule</a></div><div class="ttdeci">SVFModule * getModule() const</div><div class="ttdoc">Module. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00217">PointerAnalysis.h:217</a></div></div>
137
136
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a4bef15157423cef48dc7333a803cd27d"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">SVF::GenericGraph::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
138
137
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a7c9b7e5fe37ae31ba84d167945ca57df"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">SVF::PointerAnalysis::getPTACallGraph</a></div><div class="ttdeci">PTACallGraph * getPTACallGraph() const</div><div class="ttdoc">Return call graph. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00178">PointerAnalysis.h:178</a></div></div>
139
138
  <div class="ttc" id="classSVF_1_1MRGenerator_html_ac8fedbb65a582135354c939183d48f46"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ac8fedbb65a582135354c939183d48f46">SVF::MRGenerator::MRGenerator</a></div><div class="ttdeci">MRGenerator(BVDataPTAImpl *p, bool ptrOnly)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00042">MemRegion.cpp:42</a></div></div>
139
+ <div class="ttc" id="classSVF_1_1MRGenerator_html_a9718c9e8efc1e6f32441aa5f418711dd"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a9718c9e8efc1e6f32441aa5f418711dd">SVF::MRGenerator::hasRefSideEffectOfCallSite</a></div><div class="ttdeci">bool hasRefSideEffectOfCallSite(const CallICFGNode *cs)</div><div class="ttdoc">Has indirect refs of a callsite. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00404">MemRegion.h:404</a></div></div>
140
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a2a1e8ce39bf8deace3c344d5f05fe6ac"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2a1e8ce39bf8deace3c344d5f05fe6ac">SVF::SVFIR::getCallSiteArgsList</a></div><div class="ttdeci">const SVFVarList &amp; getCallSiteArgsList(const CallICFGNode *cs) const</div><div class="ttdoc">Get callsite argument list. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00242">SVFIR.h:242</a></div></div>
140
141
  <div class="ttc" id="classSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph&lt; SVFVar, SVFStmt &gt;::iterator</a></div><div class="ttdeci">IDToNodeMapTy::iterator iterator</div><div class="ttdoc">Node Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00338">GenericGraph.h:338</a></div></div>
141
142
  <div class="ttc" id="classSVF_1_1PTACallGraphEdge_html_af0e9f86be3cf263b868f80d374641fc9"><div class="ttname"><a href="classSVF_1_1PTACallGraphEdge.html#af0e9f86be3cf263b868f80d374641fc9">SVF::PTACallGraphEdge::getDirectCalls</a></div><div class="ttdeci">CallInstSet &amp; getDirectCalls()</div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00095">PTACallGraph.h:95</a></div></div>
142
143
  <div class="ttc" id="MSSAMuChi_8h_html"><div class="ttname"><a href="MSSAMuChi_8h.html">MSSAMuChi.h</a></div></div>
143
- <div class="ttc" id="classSVF_1_1MRGenerator_html_ac91b6f0f33a95ba35cc23e0e4657732a"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ac91b6f0f33a95ba35cc23e0e4657732a">SVF::MRGenerator::hasRefSideEffectOfCallSite</a></div><div class="ttdeci">bool hasRefSideEffectOfCallSite(const CallBlockNode *cs)</div><div class="ttdoc">Has indirect refs of a callsite. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00404">MemRegion.h:404</a></div></div>
144
- <div class="ttc" id="classSVF_1_1MRGenerator_html_a4e02c3aee7eb0206f6d643b72e39d059"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a4e02c3aee7eb0206f6d643b72e39d059">SVF::MRGenerator::addRefSideEffectOfCallSite</a></div><div class="ttdeci">bool addRefSideEffectOfCallSite(const CallBlockNode *cs, const NodeBS &amp;refs)</div><div class="ttdoc">Add indirect uses an memory object in the function. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00431">MemRegion.cpp:431</a></div></div>
145
144
  <div class="ttc" id="classSVF_1_1FIFOWorkList_html_ad4c6a48b60c870d63049fe7272cc7eb8"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">SVF::FIFOWorkList::push</a></div><div class="ttdeci">bool push(Data data)</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00159">WorkList.h:159</a></div></div>
146
145
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_aee289e298e421448caaa604b7eb34fcb"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">SVF::BVDataPTAImpl::getPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getPts(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00099">PointerAnalysisImpl.h:99</a></div></div>
146
+ <div class="ttc" id="classSVF_1_1MRGenerator_html_a9de695122660c1d8b65e1f3dab8a7ece"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a9de695122660c1d8b65e1f3dab8a7ece">SVF::MRGenerator::collectCallSitePts</a></div><div class="ttdeci">void collectCallSitePts(const CallICFGNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00479">MemRegion.cpp:479</a></div></div>
147
147
  <div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00079">BasicTypes.h:79</a></div></div>
148
148
  <div class="ttc" id="classSVF_1_1MRGenerator_html_af8d52e6c9884c6e1abc6dbcbc5e32629"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#af8d52e6c9884c6e1abc6dbcbc5e32629">SVF::MRGenerator::SCC</a></div><div class="ttdeci">SCCDetection&lt; PTACallGraph * &gt; SCC</div><div class="ttdoc">Call Graph SCC. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00174">MemRegion.h:174</a></div></div>
149
149
  <div class="ttc" id="classSVF_1_1MemRegion_html_a8556bee344c108815adad4a405ac0ffb"><div class="ttname"><a href="classSVF_1_1MemRegion.html#a8556bee344c108815adad4a405ac0ffb">SVF::MemRegion::totalMRNum</a></div><div class="ttdeci">static Size_t totalMRNum</div><div class="ttdoc">region ID 0 is reserved </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00058">MemRegion.h:58</a></div></div>
150
150
  <div class="ttc" id="namespaceSVF_html_a2db29836a72e8d86e9baa6d8d55d2978"><div class="ttname"><a href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">SVF::Size_t</a></div><div class="ttdeci">signed long Size_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00078">SVFBasicTypes.h:78</a></div></div>
151
+ <div class="ttc" id="classSVF_1_1MRGenerator_html_acbf0be131b1fc5d0366157d300d1aa68"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#acbf0be131b1fc5d0366157d300d1aa68">SVF::MRGenerator::handleCallsiteModRef</a></div><div class="ttdeci">virtual bool handleCallsiteModRef(NodeBS &amp;mod, NodeBS &amp;ref, const CallICFGNode *cs, const SVFFunction *fun)</div><div class="ttdoc">Get Mod-Ref of a callee function. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00603">MemRegion.cpp:603</a></div></div>
151
152
  <div class="ttc" id="classSVF_1_1LoadStmt_html"><div class="ttname"><a href="classSVF_1_1LoadStmt.html">SVF::LoadStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00376">SVFStatements.h:376</a></div></div>
152
153
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a240219c2dc4f5cc5f85445e18c79b83b"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">SVF::PointerAnalysis::getPAG</a></div><div class="ttdeci">SVFIR * getPAG() const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00205">PointerAnalysis.h:205</a></div></div>
153
154
  <div class="ttc" id="classSVF_1_1PTACallGraphEdge_html"><div class="ttname"><a href="classSVF_1_1PTACallGraphEdge.html">SVF::PTACallGraphEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00051">PTACallGraph.h:51</a></div></div>
154
- <div class="ttc" id="classSVF_1_1RetBlockNode_html"><div class="ttname"><a href="classSVF_1_1RetBlockNode.html">SVF::RetBlockNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00459">ICFGNode.h:459</a></div></div>
155
155
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a2cf20660f2fd686fa3cabd046c4a10bf"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a2cf20660f2fd686fa3cabd046c4a10bf">SVF::MRGenerator::isNonLocalObject</a></div><div class="ttdeci">bool isNonLocalObject(NodeID id, const SVFFunction *curFun) const</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00576">MemRegion.cpp:576</a></div></div>
156
156
  <div class="ttc" id="classSVF_1_1GenericNode_html_afe6a7b286d9af4992f41b59612fd2900"><div class="ttname"><a href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">SVF::GenericNode::InEdgeEnd</a></div><div class="ttdeci">iterator InEdgeEnd()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00214">GenericGraph.h:214</a></div></div>
157
157
  <div class="ttc" id="classSVF_1_1MRGenerator_html_ac0007c8808654ca74feef0d8568378b9"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ac0007c8808654ca74feef0d8568378b9">SVF::MRGenerator::getRefSideEffectOfFunction</a></div><div class="ttdeci">const NodeBS &amp; getRefSideEffectOfFunction(const SVFFunction *fun)</div><div class="ttdoc">Get indirect refs of a function. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00384">MemRegion.h:384</a></div></div>
158
- <div class="ttc" id="classSVF_1_1MRGenerator_html_ac43b3f895efd160c7dd5860c0dfd1625"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ac43b3f895efd160c7dd5860c0dfd1625">SVF::MRGenerator::collectCallSitePts</a></div><div class="ttdeci">void collectCallSitePts(const CallBlockNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00479">MemRegion.cpp:479</a></div></div>
159
158
  <div class="ttc" id="namespaceSVF_html_a3bacb4f95c73e6d794901d01c6b65a83"><div class="ttname"><a href="namespaceSVF.html#a3bacb4f95c73e6d794901d01c6b65a83">SVF::AllocaInst</a></div><div class="ttdeci">llvm::AllocaInst AllocaInst</div><div class="ttdoc">LLVM Instructions. </div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00147">BasicTypes.h:147</a></div></div>
160
159
  <div class="ttc" id="classSVF_1_1MRGenerator_html_af94bd8155a23273aab2396334d905119"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">SVF::MRGenerator::memRegSet</a></div><div class="ttdeci">MRSet memRegSet</div><div class="ttdoc">A set of All memory regions. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00274">MemRegion.h:274</a></div></div>
161
160
  <div class="ttc" id="classSVF_1_1MRVer_html_aa89979685cbca9279d32c7512c9d3c16"><div class="ttname"><a href="classSVF_1_1MRVer.html#aa89979685cbca9279d32c7512c9d3c16">SVF::MRVer::totalVERNum</a></div><div class="ttdeci">static Size_t totalVERNum</div><div class="ttdoc">ver ID 0 is reserved </div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00050">MSSAMuChi.h:50</a></div></div>
@@ -168,10 +167,11 @@ $(function() {
168
167
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a502f8379620378b36bc12d9a91b408d2"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a502f8379620378b36bc12d9a91b408d2">SVF::MRGenerator::collectModRefForCall</a></div><div class="ttdeci">virtual void collectModRefForCall()</div><div class="ttdoc">Generate regions for calls/rets. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00228">MemRegion.cpp:228</a></div></div>
169
168
  <div class="ttc" id="classSVF_1_1MRGenerator_html_ab250a4950269f57027d8e8ef10089f58"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ab250a4950269f57027d8e8ef10089f58">SVF::MRGenerator::pagEdgeToFunMap</a></div><div class="ttdeci">PAGEdgeToFunMap pagEdgeToFunMap</div><div class="ttdoc">Map a PAGEdge to its fun. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00220">MemRegion.h:220</a></div></div>
170
169
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a1331e6f0941838064d77a5adaa5c6303"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a1331e6f0941838064d77a5adaa5c6303">SVF::MRGenerator::getFunToPointsToList</a></div><div class="ttdeci">FunToPointsTosMap &amp; getFunToPointsToList()</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00367">MemRegion.h:367</a></div></div>
170
+ <div class="ttc" id="classSVF_1_1MRGenerator_html_ae487d7b800d7536b578095c9f140ac80"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ae487d7b800d7536b578095c9f140ac80">SVF::MRGenerator::getModInfoForCall</a></div><div class="ttdeci">NodeBS getModInfoForCall(const CallICFGNode *cs)</div><div class="ttdoc">getModRefInfo APIs </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00670">MemRegion.cpp:670</a></div></div>
171
171
  <div class="ttc" id="classSVF_1_1SVFIR_html_a0552d565633ee22abe03085134a871c0"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a0552d565633ee22abe03085134a871c0">SVF::SVFIR::hasPTASVFStmtList</a></div><div class="ttdeci">bool hasPTASVFStmtList(const ICFGNode *inst) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00176">SVFIR.h:176</a></div></div>
172
172
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a603f993995e7d6961e203a195bb56029"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a603f993995e7d6961e203a195bb56029">SVF::MRGenerator::csToModsMap</a></div><div class="ttdeci">CallSiteToPointsToMap csToModsMap</div><div class="ttdoc">Map a callsite to its indirect defs of memory objects. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00229">MemRegion.h:229</a></div></div>
173
173
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a8b254a0c5063e25f297d1b00fb0b515e"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a8b254a0c5063e25f297d1b00fb0b515e">SVF::MRGenerator::PointsToList</a></div><div class="ttdeci">OrderedSet&lt; NodeBS, SVFUtil::equalNodeBS &gt; PointsToList</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00139">MemRegion.h:139</a></div></div>
174
- <div class="ttc" id="classSVF_1_1MRGenerator_html_a373b57017e99ee8466d1c8a363adaeef"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a373b57017e99ee8466d1c8a363adaeef">SVF::MRGenerator::getCallSiteArgsPts</a></div><div class="ttdeci">NodeBS &amp; getCallSiteArgsPts(const CallBlockNode *cs)</div><div class="ttdoc">Return the pts chain of all callsite arguments. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00251">MemRegion.h:251</a></div></div>
174
+ <div class="ttc" id="classSVF_1_1MRGenerator_html_a94ce7ceff7cee90d672e9f3a4f3aa4e8"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a94ce7ceff7cee90d672e9f3a4f3aa4e8">SVF::MRGenerator::addCPtsToCallSiteRefs</a></div><div class="ttdeci">void addCPtsToCallSiteRefs(NodeBS &amp;cpts, const CallICFGNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00349">MemRegion.h:349</a></div></div>
175
175
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a93ac673b885633849fa484938405ca75"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a93ac673b885633849fa484938405ca75">SVF::SVFUtil::isHeapAllocExtCall</a></div><div class="ttdeci">bool isHeapAllocExtCall(const CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00115">LLVMUtil.h:115</a></div></div>
176
176
  <div class="ttc" id="namespaceSVF_html_a7e833aa9feaf931fb44fb1e3fd502a6c"><div class="ttname"><a href="namespaceSVF.html#a7e833aa9feaf931fb44fb1e3fd502a6c">SVF::ModRefInfo</a></div><div class="ttdeci">llvm::ModRefInfo ModRefInfo</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00136">BasicTypes.h:136</a></div></div>
177
177
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a85ab6b592fefc45a0674d3295e01638f"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVF::SVFUtil::outs</a></div><div class="ttdeci">raw_ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
@@ -182,21 +182,22 @@ $(function() {
182
182
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a39604645ca9ba10607ada3872b14705a"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a39604645ca9ba10607ada3872b14705a">SVF::MRGenerator::addModSideEffectOfFunction</a></div><div class="ttdeci">void addModSideEffectOfFunction(const SVFFunction *fun, const NodeBS &amp;mods)</div><div class="ttdoc">Add indirect def an memory object in the function. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00419">MemRegion.cpp:419</a></div></div>
183
183
  <div class="ttc" id="classSVF_1_1MemObj_html_a898c5bb3956402578266a6fb142e02b1"><div class="ttname"><a href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">SVF::MemObj::isHeap</a></div><div class="ttdeci">bool isHeap() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00680">SymbolTableInfo.cpp:680</a></div></div>
184
184
  <div class="ttc" id="SVFBasicTypes_8h_html_a2c64190a065f342897573a3ef4973adb"><div class="ttname"><a href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a></div><div class="ttdeci">#define DGENERAL</div><div class="ttdoc">General debug flag is for each phase of a pass, it is often in a colorful output format. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00154">SVFBasicTypes.h:154</a></div></div>
185
+ <div class="ttc" id="classSVF_1_1CallICFGNode_html_a674753d5ca0fbe28674acb25291f2bcf"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">SVF::CallICFGNode::getCallSite</a></div><div class="ttdeci">const Instruction * getCallSite() const</div><div class="ttdoc">Return callsite. </div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00381">ICFGNode.h:381</a></div></div>
185
186
  <div class="ttc" id="classSVF_1_1MRGenerator_html_ad740188222439c089907fa6c6c951f02"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ad740188222439c089907fa6c6c951f02">SVF::MRGenerator::getAliasMemRegions</a></div><div class="ttdeci">virtual void getAliasMemRegions(MRSet &amp;aliasMRs, const NodeBS &amp;cpts, const SVFFunction *fun)</div><div class="ttdoc">Get all aliased mem regions from function fun according to cpts. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00305">MemRegion.h:305</a></div></div>
186
187
  <div class="ttc" id="classSVF_1_1MRGenerator_html_ab3d3ca72d2cddf5336d00dc623f33401"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ab3d3ca72d2cddf5336d00dc623f33401">SVF::MRGenerator::getCallGraphSCCRevTopoOrder</a></div><div class="ttdeci">void getCallGraphSCCRevTopoOrder(WorkList &amp;worklist)</div><div class="ttdoc">Get reverse topo call graph scc. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00464">MemRegion.cpp:464</a></div></div>
187
188
  <div class="ttc" id="classSVF_1_1FIFOWorkList_html"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html">SVF::FIFOWorkList&lt; NodeID &gt;</a></div></div>
188
189
  <div class="ttc" id="classSVF_1_1MRGenerator_html_ac253d88de2a0cb9624c70d2bcfdac36e"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ac253d88de2a0cb9624c70d2bcfdac36e">SVF::MRGenerator::destroy</a></div><div class="ttdeci">void destroy()</div><div class="ttdoc">Clean up memory. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00052">MemRegion.cpp:52</a></div></div>
189
190
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a55d38020bbece70847f7e72bb02bc4af"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a55d38020bbece70847f7e72bb02bc4af">SVF::MRGenerator::getMR</a></div><div class="ttdeci">const MemRegion * getMR(const NodeBS &amp;cpts) const</div><div class="ttdoc">Get a memory region according to cpts. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00093">MemRegion.cpp:93</a></div></div>
191
+ <div class="ttc" id="classSVF_1_1CallICFGNode_html"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00364">ICFGNode.h:364</a></div></div>
190
192
  <div class="ttc" id="classSVF_1_1LLVMModuleSet_html_acf40310917909e4234282c0695a43160"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a></div><div class="ttdeci">static LLVMModuleSet * getLLVMModuleSet()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00069">LLVMModule.h:69</a></div></div>
191
193
  <div class="ttc" id="classSVF_1_1SVFFunction_html_ac4ae917ae35ac6fca652fe2dd90a8ac2"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">SVF::SVFFunction::getLLVMFun</a></div><div class="ttdeci">Function * getLLVMFun() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00249">BasicTypes.h:249</a></div></div>
192
194
  <div class="ttc" id="classSVF_1_1MRGenerator_html_add22c9a95478dea21148e87c8dfc584a"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#add22c9a95478dea21148e87c8dfc584a">SVF::MRGenerator::getEscapObjviaGlobals</a></div><div class="ttdeci">void getEscapObjviaGlobals(NodeBS &amp;globs, const NodeBS &amp;pts)</div><div class="ttdoc">Get all the objects in callee&amp;#39;s modref escaped via global objects (the chain pts of globals) ...</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00561">MemRegion.cpp:561</a></div></div>
193
- <div class="ttc" id="classSVF_1_1CallBlockNode_html_ad3d50024efcfa94b1246c982b43aff2f"><div class="ttname"><a href="classSVF_1_1CallBlockNode.html#ad3d50024efcfa94b1246c982b43aff2f">SVF::CallBlockNode::getCallSite</a></div><div class="ttdeci">const Instruction * getCallSite() const</div><div class="ttdoc">Return callsite. </div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00381">ICFGNode.h:381</a></div></div>
195
+ <div class="ttc" id="classSVF_1_1CallICFGNode_html_a18f4077d42b23c3fed35efc793b6102e"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html#a18f4077d42b23c3fed35efc793b6102e">SVF::CallICFGNode::getCaller</a></div><div class="ttdeci">const SVFFunction * getCaller() const</div><div class="ttdoc">Return callsite. </div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00400">ICFGNode.h:400</a></div></div>
194
196
  <div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="ContextDDA_8h_source.html#l00016">ContextDDA.h:16</a></div></div>
195
- <div class="ttc" id="classSVF_1_1ICFG_html_a6d66c83cb1656d0f8ec8b8b65a9e9c41"><div class="ttname"><a href="classSVF_1_1ICFG.html#a6d66c83cb1656d0f8ec8b8b65a9e9c41">SVF::ICFG::getRetBlockNode</a></div><div class="ttdeci">RetBlockNode * getRetBlockNode(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00210">ICFG.cpp:210</a></div></div>
196
197
  <div class="ttc" id="classSVF_1_1MRGenerator_html_afb7ce3a24edda14895999eb15231daff"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">SVF::MRGenerator::pta</a></div><div class="ttdeci">BVDataPTAImpl * pta</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00193">MemRegion.h:193</a></div></div>
198
+ <div class="ttc" id="classSVF_1_1ICFG_html_a483e92e076a426ec8f177eab3b971723"><div class="ttname"><a href="classSVF_1_1ICFG.html#a483e92e076a426ec8f177eab3b971723">SVF::ICFG::getCallBlockNode</a></div><div class="ttdeci">CallICFGNode * getCallBlockNode(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00209">ICFG.cpp:209</a></div></div>
197
199
  <div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00303">BasicTypes.h:303</a></div></div>
198
200
  <div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00165">GenericGraph.h:165</a></div></div>
199
- <div class="ttc" id="classSVF_1_1MRGenerator_html_a455e0ba173141ac8ce76a655ac52205f"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a455e0ba173141ac8ce76a655ac52205f">SVF::MRGenerator::getModRefInfo</a></div><div class="ttdeci">ModRefInfo getModRefInfo(const CallBlockNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00719">MemRegion.cpp:719</a></div></div>
200
201
  <div class="ttc" id="classSVF_1_1MRGenerator_html_adf8d477e5f622855799842134145ecc4"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#adf8d477e5f622855799842134145ecc4">SVF::MRGenerator::callsiteToModMRsMap</a></div><div class="ttdeci">CallSiteToMRsMap callsiteToModMRsMap</div><div class="ttdoc">Map a callsite to its mods regions. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00207">MemRegion.h:207</a></div></div>
201
202
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a798c84d5e861de2b61bcb1a86385f721"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">SVF::BVDataPTAImpl::expandFIObjs</a></div><div class="ttdeci">virtual void expandFIObjs(const PointsTo &amp;pts, PointsTo &amp;expandedPts)</div><div class="ttdoc">Expand FI objects. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00082">PointerAnalysisImpl.cpp:82</a></div></div>
202
203
  <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#l00086">SVFBasicTypes.h:86</a></div></div>
@@ -205,29 +206,27 @@ $(function() {
205
206
  <div class="ttc" id="classSVF_1_1SVFModule_html_a58d03edb6ff85f4943135478f113df31"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a58d03edb6ff85f4943135478f113df31">SVF::SVFModule::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00155">SVFModule.h:155</a></div></div>
206
207
  <div class="ttc" id="SVFModule_8h_html"><div class="ttname"><a href="SVFModule_8h.html">SVFModule.h</a></div></div>
207
208
  <div class="ttc" id="classSVF_1_1StoreStmt_html"><div class="ttname"><a href="classSVF_1_1StoreStmt.html">SVF::StoreStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00339">SVFStatements.h:339</a></div></div>
209
+ <div class="ttc" id="classSVF_1_1MRGenerator_html_a187d82895b2e1156c6dd5ae28795944f"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a187d82895b2e1156c6dd5ae28795944f">SVF::MRGenerator::hasModSideEffectOfCallSite</a></div><div class="ttdeci">bool hasModSideEffectOfCallSite(const CallICFGNode *cs)</div><div class="ttdoc">Has indirect mods of a callsite. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00409">MemRegion.h:409</a></div></div>
208
210
  <div class="ttc" id="classSVF_1_1MRGenerator_html_abe8d6217250d227e743e4b581497aae8"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#abe8d6217250d227e743e4b581497aae8">SVF::MRGenerator::getMRsForLoad</a></div><div class="ttdeci">virtual void getMRsForLoad(MRSet &amp;aliasMRs, const NodeBS &amp;cpts, const SVFFunction *)</div><div class="ttdoc">Get memory regions for a load statement according to cpts. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00315">MemRegion.h:315</a></div></div>
209
211
  <div class="ttc" id="classSVF_1_1MemObj_html_a4da54ef60231d2e6c26669226b99d2f3"><div class="ttname"><a href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">SVF::MemObj::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get the reference value to this object. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00442">SymbolTableInfo.h:442</a></div></div>
210
212
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a66d94d15fb94e90a771f6b3dd7c0ecdd"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a66d94d15fb94e90a771f6b3dd7c0ecdd">SVF::MRGenerator::sortPointsTo</a></div><div class="ttdeci">virtual void sortPointsTo(const NodeBS &amp;cpts)</div><div class="ttdoc">Given a condition pts, insert into cptsToRepCPtsMap for region generation. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00284">MemRegion.cpp:284</a></div></div>
211
213
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a207dfa4c9f044764665478142c6e6b22"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a207dfa4c9f044764665478142c6e6b22">SVF::MRGenerator::collectModRefForLoadStore</a></div><div class="ttdeci">virtual void collectModRefForLoadStore()</div><div class="ttdoc">Generate regions for loads/stores. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00172">MemRegion.cpp:172</a></div></div>
212
- <div class="ttc" id="classSVF_1_1SVFIR_html_a170bef1e9a07ce0449faf66706ae6e61"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a170bef1e9a07ce0449faf66706ae6e61">SVF::SVFIR::callsiteHasRet</a></div><div class="ttdeci">bool callsiteHasRet(const RetBlockNode *cs) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00260">SVFIR.h:260</a></div></div>
213
214
  <div class="ttc" id="classSVF_1_1PTACallGraphNode_html_a796994541eec90f2b540e24816120aff"><div class="ttname"><a href="classSVF_1_1PTACallGraphNode.html#a796994541eec90f2b540e24816120aff">SVF::PTACallGraphNode::iterator</a></div><div class="ttdeci">PTACallGraphEdge::CallGraphEdgeSet::iterator iterator</div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00179">PTACallGraph.h:179</a></div></div>
214
215
  <div class="ttc" id="classSVF_1_1SCCDetection_html_a5d699af73b1e7ad4e3a5f6d26b8b6d15"><div class="ttname"><a href="classSVF_1_1SCCDetection.html#a5d699af73b1e7ad4e3a5f6d26b8b6d15">SVF::SCCDetection::isInCycle</a></div><div class="ttdeci">bool isInCycle(NodeID n) const</div><div class="ttdoc">whether the node is in a cycle </div><div class="ttdef"><b>Definition:</b> <a href="SCC_8h_source.html#l00149">SCC.h:149</a></div></div>
215
216
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a4f65593325e4391333fa1b0bedbffc4a"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a4f65593325e4391333fa1b0bedbffc4a">SVF::MRGenerator::generateMRs</a></div><div class="ttdeci">virtual void generateMRs()</div><div class="ttdoc">Start generating memory regions. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00125">MemRegion.cpp:125</a></div></div>
216
217
  <div class="ttc" id="classSVF_1_1MemRegion_html"><div class="ttname"><a href="classSVF_1_1MemRegion.html">SVF::MemRegion</a></div><div class="ttdoc">Memory Region class. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00051">MemRegion.h:51</a></div></div>
217
- <div class="ttc" id="classSVF_1_1MRGenerator_html_a123a2ea51b04f1398b9ee66567f5014a"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a123a2ea51b04f1398b9ee66567f5014a">SVF::MRGenerator::handleCallsiteModRef</a></div><div class="ttdeci">virtual bool handleCallsiteModRef(NodeBS &amp;mod, NodeBS &amp;ref, const CallBlockNode *cs, const SVFFunction *fun)</div><div class="ttdoc">Get Mod-Ref of a callee function. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00603">MemRegion.cpp:603</a></div></div>
218
218
  <div class="ttc" id="classSVF_1_1PTACallGraphNode_html"><div class="ttname"><a href="classSVF_1_1PTACallGraphNode.html">SVF::PTACallGraphNode</a></div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00174">PTACallGraph.h:174</a></div></div>
219
219
  <div class="ttc" id="classSVF_1_1MRGenerator_html_afe91b57b451d7788364493549e015acf"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#afe91b57b451d7788364493549e015acf">SVF::MRGenerator::csToCallSiteArgsPtsMap</a></div><div class="ttdeci">CallSiteToPointsToMap csToCallSiteArgsPtsMap</div><div class="ttdoc">Map a callsite to all its object might pass into its callees. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00231">MemRegion.h:231</a></div></div>
220
- <div class="ttc" id="classSVF_1_1MRGenerator_html_a3c9e58dee18cde9a6e1575e34955af78"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a3c9e58dee18cde9a6e1575e34955af78">SVF::MRGenerator::addCPtsToCallSiteMods</a></div><div class="ttdeci">void addCPtsToCallSiteMods(NodeBS &amp;cpts, const CallBlockNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00354">MemRegion.h:354</a></div></div>
221
220
  <div class="ttc" id="classSVF_1_1SVFIR_html_a570ad42ad516e3fabb91a3563b618c0b"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a570ad42ad516e3fabb91a3563b618c0b">SVF::SVFIR::getSVFStmtList</a></div><div class="ttdeci">SVFStmtList &amp; getSVFStmtList(const ICFGNode *inst)</div><div class="ttdoc">Given an instruction, get all its PAGEdges. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00181">SVFIR.h:181</a></div></div>
222
221
  <div class="ttc" id="classSVF_1_1MRGenerator_html_af47e15d6b8c15d547a718f3577513975"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#af47e15d6b8c15d547a718f3577513975">SVF::MRGenerator::loadsToPointsToMap</a></div><div class="ttdeci">LoadsToPointsToMap loadsToPointsToMap</div><div class="ttdoc">Map a load SVFIR Edge to its CPts set map. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00209">MemRegion.h:209</a></div></div>
223
- <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>
224
- <div class="ttc" id="classSVF_1_1MRGenerator_html_a8b00b46136ce2586b5f94248d0826a94"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a8b00b46136ce2586b5f94248d0826a94">SVF::MRGenerator::addModSideEffectOfCallSite</a></div><div class="ttdeci">bool addModSideEffectOfCallSite(const CallBlockNode *cs, const NodeBS &amp;mods)</div><div class="ttdoc">Add indirect def an memory object in the function. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00447">MemRegion.cpp:447</a></div></div>
222
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a3145677c7a3763fc0d6aa7e21b264ab6"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a3145677c7a3763fc0d6aa7e21b264ab6">SVF::SVFIR::getCallSiteRet</a></div><div class="ttdeci">const SVFVar * getCallSiteRet(const RetICFGNode *cs) const</div><div class="ttdoc">Get callsite return. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00254">SVFIR.h:254</a></div></div>
225
223
  <div class="ttc" id="classSVF_1_1SVFIR_html"><div class="ttname"><a href="classSVF_1_1SVFIR.html">SVF::SVFIR</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00043">SVFIR.h:43</a></div></div>
226
224
  <div class="ttc" id="classSVF_1_1SVFIR_html_aa1943d53e75aef9b014953143c6894da"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00132">SVFIR.h:132</a></div></div>
227
225
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a899c81db92c6bcf24f6f9b769e02e5bf"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a899c81db92c6bcf24f6f9b769e02e5bf">SVF::MRGenerator::addRefSideEffectOfFunction</a></div><div class="ttdeci">void addRefSideEffectOfFunction(const SVFFunction *fun, const NodeBS &amp;refs)</div><div class="ttdoc">Add/Get methods for side-effect of functions and callsites. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00407">MemRegion.cpp:407</a></div></div>
228
226
  <div class="ttc" id="classSVF_1_1SVFIR_html_a42d1e2f0213fb6e54c56cc0695b57cb0"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a42d1e2f0213fb6e54c56cc0695b57cb0">SVF::SVFIR::getFieldsAfterCollapse</a></div><div class="ttdeci">NodeBS getFieldsAfterCollapse(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00480">SVFIR.cpp:480</a></div></div>
229
227
  <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#l00149">SVFBasicTypes.h:149</a></div></div>
230
228
  <div class="ttc" id="classSVF_1_1FIFOWorkList_html_a8fa72918fce7e9c0b2dc34b683a797c6"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">SVF::FIFOWorkList::pop</a></div><div class="ttdeci">Data pop()</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00174">WorkList.h:174</a></div></div>
229
+ <div class="ttc" id="classSVF_1_1MRGenerator_html_ac14c99ee6064fc9cf30120a83c78e702"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">SVF::MRGenerator::getModRefInfo</a></div><div class="ttdeci">ModRefInfo getModRefInfo(const CallICFGNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00719">MemRegion.cpp:719</a></div></div>
231
230
  <div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
232
231
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a255551fd3ff8fb33bcea93d0b00280b3"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a255551fd3ff8fb33bcea93d0b00280b3">SVF::MRGenerator::storesToMRsMap</a></div><div class="ttdeci">StoresToMRsMap storesToMRsMap</div><div class="ttdoc">Map a store SVFIR Edge to its memory regions sets in order for inserting chis in Memory SSA...</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00203">MemRegion.h:203</a></div></div>
233
232
  <div class="ttc" id="classSVF_1_1SVFModule_html_afcf2978f32e15127fb093405dc17d7f1"><div class="ttname"><a href="classSVF_1_1SVFModule.html#afcf2978f32e15127fb093405dc17d7f1">SVF::SVFModule::const_iterator</a></div><div class="ttdeci">FunctionSetType::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00052">SVFModule.h:52</a></div></div>
@@ -236,11 +235,12 @@ $(function() {
236
235
  <div class="ttc" id="classSVF_1_1LLVMModuleSet_html_a547b3bc62de65b9dbfc6dee55c063dd7"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">SVF::LLVMModuleSet::getSVFFunction</a></div><div class="ttdeci">const SVFFunction * getSVFFunction(const Function *fun) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00112">LLVMModule.h:112</a></div></div>
237
236
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a22ef185e767ff76c098e75126c885400"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVF::SVFUtil::isExtCall</a></div><div class="ttdeci">bool isExtCall(const SVFFunction *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00063">LLVMUtil.h:63</a></div></div>
238
237
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a98ac3bf264e6a85d172c2c4264ea908f"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">SVF::MRGenerator::MRSet</a></div><div class="ttdeci">OrderedSet&lt; const MemRegion *, MemRegion::equalMemRegion &gt; MRSet</div><div class="ttdoc">Get typedef from Pointer Analysis. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00137">MemRegion.h:137</a></div></div>
238
+ <div class="ttc" id="classSVF_1_1MRGenerator_html_ab5b92ca898739f613f965fc05f86f094"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ab5b92ca898739f613f965fc05f86f094">SVF::MRGenerator::addCPtsToCallSiteMods</a></div><div class="ttdeci">void addCPtsToCallSiteMods(NodeBS &amp;cpts, const CallICFGNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00354">MemRegion.h:354</a></div></div>
239
239
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a21550f978f42ac3cbb32cbc426ff5cb1"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a21550f978f42ac3cbb32cbc426ff5cb1">SVF::MRGenerator::csToCallSiteRetPtsMap</a></div><div class="ttdeci">CallSiteToPointsToMap csToCallSiteRetPtsMap</div><div class="ttdoc">Map a callsite to all its object might return from its callees. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00233">MemRegion.h:233</a></div></div>
240
240
  <div class="ttc" id="classSVF_1_1SVFStmt_html"><div class="ttname"><a href="classSVF_1_1SVFStmt.html">SVF::SVFStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00047">SVFStatements.h:47</a></div></div>
241
- <div class="ttc" id="classSVF_1_1ICFG_html_ab7b0b3088b46ad65451905cc4f567a7b"><div class="ttname"><a href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">SVF::ICFG::getBlockICFGNode</a></div><div class="ttdeci">ICFGNode * getBlockICFGNode(const Instruction *inst)</div><div class="ttdoc">Get a basic block ICFGNode. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00181">ICFG.cpp:181</a></div></div>
241
+ <div class="ttc" id="classSVF_1_1ICFG_html_ab7b0b3088b46ad65451905cc4f567a7b"><div class="ttname"><a href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">SVF::ICFG::getBlockICFGNode</a></div><div class="ttdeci">ICFGNode * getBlockICFGNode(const Instruction *inst)</div><div class="ttdoc">Get a basic block ICFGNode. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00193">ICFG.cpp:193</a></div></div>
242
242
  <div class="ttc" id="classSVF_1_1MRGenerator_html_a3121380139c7ae96d2045d66203253b6"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a3121380139c7ae96d2045d66203253b6">SVF::MRGenerator::getFunction</a></div><div class="ttdeci">const SVFFunction * getFunction(const PAGEdge *pagEdge) const</div><div class="ttdoc">Get the function which SVFIR Edge located. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00431">MemRegion.h:431</a></div></div>
243
- <div class="ttc" id="classSVF_1_1SVFIR_html_ac7f90610a7b5f456c530a4419393fae5"><div class="ttname"><a href="classSVF_1_1SVFIR.html#ac7f90610a7b5f456c530a4419393fae5">SVF::SVFIR::getCallSiteArgsList</a></div><div class="ttdeci">const SVFVarList &amp; getCallSiteArgsList(const CallBlockNode *cs) const</div><div class="ttdoc">Get callsite argument list. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00242">SVFIR.h:242</a></div></div>
243
+ <div class="ttc" id="classSVF_1_1SVFIR_html_aa79dba26cb34b40eee682713db299d5f"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa79dba26cb34b40eee682713db299d5f">SVF::SVFIR::callsiteHasRet</a></div><div class="ttdeci">bool callsiteHasRet(const RetICFGNode *cs) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00260">SVFIR.h:260</a></div></div>
244
244
  <div class="ttc" id="classSVF_1_1SVFIR_html_a2dd4d5f704906270af13e7a07f900eb1"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">SVF::SVFIR::getObject</a></div><div class="ttdeci">const MemObj * getObject(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00357">SVFIR.h:357</a></div></div>
245
245
  </div><!-- fragment --></div><!-- contents -->
246
246
  <!-- start footer part -->