svf-tools 1.0.555 → 1.0.558

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 (190) hide show
  1. package/README.md +9 -9
  2. package/SVF-doxygen/html/html/AndersenPWC_8h_source.html +15 -15
  3. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +12 -11
  4. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +11 -10
  5. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +47 -46
  6. package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +9 -8
  7. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +35 -34
  8. package/SVF-doxygen/html/html/Andersen_8h_source.html +6 -6
  9. package/SVF-doxygen/html/html/CHGBuilder_8cpp.html +2 -2
  10. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +19 -18
  11. package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +15 -15
  12. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +4 -4
  13. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +13 -12
  14. package/SVF-doxygen/html/html/DDAPass_8h_source.html +11 -11
  15. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +20 -19
  16. package/SVF-doxygen/html/html/DDAStat_8h_source.html +13 -13
  17. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +2 -2
  18. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +3 -3
  19. package/SVF-doxygen/html/html/ICFGStat_8h_source.html +5 -4
  20. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +2 -2
  21. package/SVF-doxygen/html/html/MHP_8cpp_source.html +2 -2
  22. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +5 -5
  23. package/SVF-doxygen/html/html/MTAStat_8h_source.html +1 -1
  24. package/SVF-doxygen/html/html/MTA_8cpp_source.html +2 -2
  25. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +2 -2
  26. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +2 -2
  27. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +67 -69
  28. package/SVF-doxygen/html/html/PTAStat_8h.html +1 -0
  29. package/SVF-doxygen/html/html/PTAStat_8h_source.html +70 -76
  30. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +2 -2
  31. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +1 -1
  32. package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +2 -1
  33. package/SVF-doxygen/html/html/SVFGReadWrite_8cpp_source.html +5 -4
  34. package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +22 -21
  35. package/SVF-doxygen/html/html/SVFGStat_8h_source.html +5 -5
  36. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +5 -5
  37. package/SVF-doxygen/html/html/SVFG_8h_source.html +3 -3
  38. package/SVF-doxygen/html/html/SVFStat_8cpp.html +81 -0
  39. package/SVF-doxygen/html/html/SVFStat_8cpp_source.html +85 -0
  40. package/SVF-doxygen/html/html/SVFStat_8h.html +94 -0
  41. package/SVF-doxygen/html/html/SVFStat_8h_source.html +103 -0
  42. package/SVF-doxygen/html/html/Steensgaard_8h_source.html +1 -1
  43. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -2
  44. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +3 -3
  45. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
  46. package/SVF-doxygen/html/html/WPAStat_8h_source.html +8 -8
  47. package/SVF-doxygen/html/html/annotated.html +39 -38
  48. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +79 -79
  49. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +15 -15
  50. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +37 -37
  51. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +1 -1
  52. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +22 -22
  53. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat-members.html +24 -22
  54. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +97 -86
  55. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.png +0 -0
  56. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +24 -24
  57. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +47 -47
  58. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +4 -4
  59. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +30 -30
  60. package/SVF-doxygen/html/html/classSVF_1_1DDAStat-members.html +24 -23
  61. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +80 -67
  62. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.png +0 -0
  63. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +4 -4
  64. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +4 -4
  65. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +26 -26
  66. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat-members.html +24 -22
  67. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +67 -56
  68. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.png +0 -0
  69. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat-members.html +23 -21
  70. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +55 -42
  71. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.png +0 -0
  72. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +6 -6
  73. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +4 -4
  74. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +2 -2
  75. package/SVF-doxygen/html/html/classSVF_1_1MTAStat-members.html +25 -23
  76. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +59 -48
  77. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.png +0 -0
  78. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +5 -5
  79. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat-members.html +22 -21
  80. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +57 -44
  81. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.png +0 -0
  82. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +6 -6
  83. package/SVF-doxygen/html/html/classSVF_1_1Options.html +2 -2
  84. package/SVF-doxygen/html/html/classSVF_1_1PTAStat-members.html +24 -22
  85. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +186 -420
  86. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.png +0 -0
  87. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +2 -2
  88. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +12 -12
  89. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat-members.html +33 -32
  90. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +100 -87
  91. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.png +0 -0
  92. package/SVF-doxygen/html/html/classSVF_1_1SVFStat-members.html +100 -0
  93. package/SVF-doxygen/html/html/classSVF_1_1SVFStat.html +605 -0
  94. package/SVF-doxygen/html/html/classSVF_1_1SVFStat.png +0 -0
  95. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +1 -1
  96. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +4 -4
  97. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +12 -12
  98. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat-members.html +26 -24
  99. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +65 -54
  100. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.png +0 -0
  101. package/SVF-doxygen/html/html/classes.html +50 -50
  102. package/SVF-doxygen/html/html/dda_8cpp.html +1 -1
  103. package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
  104. package/SVF-doxygen/html/html/dir_862d3276083eaac55caed79b9120bf29.html +2 -0
  105. package/SVF-doxygen/html/html/dir_95e22971b5dbae2382075a3453e365b4.html +2 -0
  106. package/SVF-doxygen/html/html/files.html +10 -8
  107. package/SVF-doxygen/html/html/functions_0x7e.html +3 -0
  108. package/SVF-doxygen/html/html/functions_c.html +28 -29
  109. package/SVF-doxygen/html/html/functions_e.html +3 -2
  110. package/SVF-doxygen/html/html/functions_enum.html +1 -1
  111. package/SVF-doxygen/html/html/functions_eval_c.html +1 -1
  112. package/SVF-doxygen/html/html/functions_eval_w.html +1 -1
  113. package/SVF-doxygen/html/html/functions_f.html +3 -3
  114. package/SVF-doxygen/html/html/functions_func_0x7e.html +3 -0
  115. package/SVF-doxygen/html/html/functions_func_c.html +28 -27
  116. package/SVF-doxygen/html/html/functions_func_e.html +1 -1
  117. package/SVF-doxygen/html/html/functions_func_g.html +1 -1
  118. package/SVF-doxygen/html/html/functions_func_p.html +9 -7
  119. package/SVF-doxygen/html/html/functions_func_s.html +14 -11
  120. package/SVF-doxygen/html/html/functions_g.html +2 -2
  121. package/SVF-doxygen/html/html/functions_l.html +6 -6
  122. package/SVF-doxygen/html/html/functions_m.html +2 -1
  123. package/SVF-doxygen/html/html/functions_n.html +1 -1
  124. package/SVF-doxygen/html/html/functions_o.html +3 -3
  125. package/SVF-doxygen/html/html/functions_p.html +25 -21
  126. package/SVF-doxygen/html/html/functions_r.html +7 -3
  127. package/SVF-doxygen/html/html/functions_s.html +24 -22
  128. package/SVF-doxygen/html/html/functions_t.html +8 -8
  129. package/SVF-doxygen/html/html/functions_type_n.html +1 -1
  130. package/SVF-doxygen/html/html/functions_type_s.html +1 -1
  131. package/SVF-doxygen/html/html/functions_type_t.html +1 -1
  132. package/SVF-doxygen/html/html/functions_vars_e.html +1 -0
  133. package/SVF-doxygen/html/html/functions_vars_g.html +1 -1
  134. package/SVF-doxygen/html/html/functions_vars_m.html +1 -0
  135. package/SVF-doxygen/html/html/functions_vars_s.html +1 -0
  136. package/SVF-doxygen/html/html/functions_vars_t.html +1 -1
  137. package/SVF-doxygen/html/html/functions_w.html +12 -12
  138. package/SVF-doxygen/html/html/hierarchy.html +47 -46
  139. package/SVF-doxygen/html/html/namespaceSVF.html +2 -0
  140. package/SVF-doxygen/html/html/search/all_10.js +13 -13
  141. package/SVF-doxygen/html/html/search/all_11.js +3 -3
  142. package/SVF-doxygen/html/html/search/all_12.js +11 -8
  143. package/SVF-doxygen/html/html/search/all_13.js +4 -4
  144. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  145. package/SVF-doxygen/html/html/search/all_16.js +3 -3
  146. package/SVF-doxygen/html/html/search/all_19.js +1 -0
  147. package/SVF-doxygen/html/html/search/all_3.js +3 -3
  148. package/SVF-doxygen/html/html/search/all_5.js +2 -2
  149. package/SVF-doxygen/html/html/search/all_6.js +1 -1
  150. package/SVF-doxygen/html/html/search/all_7.js +2 -2
  151. package/SVF-doxygen/html/html/search/all_c.js +3 -3
  152. package/SVF-doxygen/html/html/search/all_d.js +1 -1
  153. package/SVF-doxygen/html/html/search/all_e.js +2 -2
  154. package/SVF-doxygen/html/html/search/all_f.js +2 -2
  155. package/SVF-doxygen/html/html/search/classes_f.js +1 -0
  156. package/SVF-doxygen/html/html/search/enums_1.js +1 -1
  157. package/SVF-doxygen/html/html/search/enumvalues_13.js +1 -1
  158. package/SVF-doxygen/html/html/search/enumvalues_2.js +1 -1
  159. package/SVF-doxygen/html/html/search/files_d.js +2 -0
  160. package/SVF-doxygen/html/html/search/functions_11.js +2 -1
  161. package/SVF-doxygen/html/html/search/functions_17.js +1 -0
  162. package/SVF-doxygen/html/html/search/functions_2.js +1 -1
  163. package/SVF-doxygen/html/html/search/functions_4.js +1 -1
  164. package/SVF-doxygen/html/html/search/functions_6.js +1 -1
  165. package/SVF-doxygen/html/html/search/functions_f.js +4 -4
  166. package/SVF-doxygen/html/html/search/typedefs_10.js +1 -1
  167. package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
  168. package/SVF-doxygen/html/html/search/typedefs_c.js +1 -1
  169. package/SVF-doxygen/html/html/search/variables_12.js +1 -1
  170. package/SVF-doxygen/html/html/search/variables_13.js +3 -3
  171. package/SVF-doxygen/html/html/search/variables_5.js +1 -1
  172. package/SVF-doxygen/html/html/search/variables_7.js +1 -1
  173. package/SVF-doxygen/html/html/search/variables_d.js +1 -1
  174. package/include/Graphs/ICFGStat.h +1 -1
  175. package/include/Util/PTAStat.h +6 -36
  176. package/include/Util/SVFStat.h +95 -0
  177. package/include/WPA/AndersenPWC.h +1 -1
  178. package/lib/DDA/DDAPass.cpp +1 -0
  179. package/lib/DDA/DDAStat.cpp +1 -0
  180. package/lib/Graphs/SVFGReadWrite.cpp +1 -0
  181. package/lib/Graphs/SVFGStat.cpp +1 -0
  182. package/lib/SVF-FE/CHGBuilder.cpp +1 -0
  183. package/lib/Util/PTAStat.cpp +2 -21
  184. package/lib/Util/SVFStat.cpp +58 -0
  185. package/lib/WPA/Andersen.cpp +1 -0
  186. package/lib/WPA/AndersenSCD.cpp +1 -0
  187. package/lib/WPA/AndersenSFR.cpp +1 -0
  188. package/lib/WPA/AndersenStat.cpp +1 -0
  189. package/lib/WPA/AndersenWaveDiff.cpp +1 -0
  190. package/package.json +1 -1
package/README.md CHANGED
@@ -22,16 +22,16 @@
22
22
  ## Documentation
23
23
 
24
24
  <b>SVF</b> is a static value-flow analysis tool for LLVM-based languages. <b>SVF</b> ([CC'16](https://yuleisui.github.io/publications/cc16.pdf)) is able to perform
25
- * [WPA](https://github.com/SVF-tools/SVF/tree/master/include/WPA): <b>whole program analysis</b>, including field-sensitive ([SAS'19](https://yuleisui.github.io/publications/sas2019a.pdf)) and flow-sensitive ([CGO'21](https://yuleisui.github.io/publications/cgo21.pdf), [OOPSLA'21](https://yuleisui.github.io/publications/oopsla21.pdf)) pointer analysis;
26
- * [DDA](https://github.com/SVF-tools/SVF/tree/master/include/DDA): <b>demand-driven analysis</b>, including flow-sensitive and context-sensitive points-to analysis ([FSE'16](https://yuleisui.github.io/publications/fse16.pdf), [TSE'18](https://yuleisui.github.io/publications/tse18.pdf));
27
- * [MSSA](https://github.com/SVF-tools/SVF/tree/master/include/MSSA): <b>memory SSA form construction</b>, including creating memory regions, construction of memory SSA form ([JSS'18](https://yuleisui.github.io/publications/jss18.pdf));
28
- * [SABER](https://github.com/SVF-tools/SVF/tree/master/include/SABER): <b>memory error checking</b>, including memory leak and double-free detection ([ISSTA'12](https://yuleisui.github.io/publications/issta12.pdf), [TSE'04](https://yuleisui.github.io/publications/tse14.pdf), [ICSE'18](https://yuleisui.github.io/publications/icse18a.pdf));
29
- * [MTA](https://github.com/SVF-tools/SVF/tree/master/include/MTA): <b>analysis of mutithreaded programs</b>, including value-flow analysis for multithreaded programs ([CGO'16](https://yuleisui.github.io/publications/cgo16.pdf));
30
- * [CFL](https://github.com/SVF-tools/SVF/tree/master/include/CFL): <b>context-free-reachability analysis</b>, including standard CFL-reachability solver, graph and grammar ([OOPSLA'22](https://yuleisui.github.io/publications/oopsla22.pdf));
31
- * [MemoryModel](https://github.com/SVF-tools/SVF/tree/master/include/MemoryModel): <b>memory abstraction and SVFIR </b>, including SVF intermediate representation and points-to data structures ([SAS'21](https://yuleisui.github.io/publications/sas21.pdf))
32
- * [Graphs](https://github.com/SVF-tools/SVF/tree/master/include/Graphs): <b> generations of a variety of graphs </b>, including call graph, interprocedural control-flow graph (ICFG), class hirachary graph (CHG), constraint graph (ConsG), value-flow graph (VFG) for different static analysis and code embedding ([OOPSLA'20](https://yuleisui.github.io/publications/oopsla20.pdf), [TOSEM'21](https://yuleisui.github.io/publications/tosem21.pdf))
25
+ * [WPA](https://github.com/SVF-tools/SVF/tree/master/include/WPA) (<b>whole program analysis</b>): field-sensitive ([SAS'19](https://yuleisui.github.io/publications/sas2019a.pdf)), flow-sensitive ([CGO'21](https://yuleisui.github.io/publications/cgo21.pdf), [OOPSLA'21](https://yuleisui.github.io/publications/oopsla21.pdf)) analysis;
26
+ * [DDA](https://github.com/SVF-tools/SVF/tree/master/include/DDA) (<b>demand-driven analysis</b>): flow-sensitive, context-sensitive points-to analysis ([FSE'16](https://yuleisui.github.io/publications/fse16.pdf), [TSE'18](https://yuleisui.github.io/publications/tse18.pdf));
27
+ * [MSSA](https://github.com/SVF-tools/SVF/tree/master/include/MSSA) (<b>memory SSA form construction</b>): memory regions, side-effects, SSA form ([JSS'18](https://yuleisui.github.io/publications/jss18.pdf));
28
+ * [SABER](https://github.com/SVF-tools/SVF/tree/master/include/SABER) (<b>memory error checking</b>): memory leaks and double-frees ([ISSTA'12](https://yuleisui.github.io/publications/issta12.pdf), [TSE'14](https://yuleisui.github.io/publications/tse14.pdf), [ICSE'18](https://yuleisui.github.io/publications/icse18a.pdf));
29
+ * [MTA](https://github.com/SVF-tools/SVF/tree/master/include/MTA) (<b>analysis of mutithreaded programs</b>): value-flows for multithreaded programs ([CGO'16](https://yuleisui.github.io/publications/cgo16.pdf));
30
+ * [CFL](https://github.com/SVF-tools/SVF/tree/master/include/CFL) (<b>context-free-reachability analysis</b>): standard CFL solver, graph and grammar ([OOPSLA'22](https://yuleisui.github.io/publications/oopsla22.pdf));
31
+ * [MemoryModel](https://github.com/SVF-tools/SVF/tree/master/include/MemoryModel) (<b>memory abstraction</b>): SVFIR and points-to data structures ([SAS'21](https://yuleisui.github.io/publications/sas21.pdf));
32
+ * [Graphs](https://github.com/SVF-tools/SVF/tree/master/include/Graphs): <b> generations of a variety of graphs</b>, including call graph, ICFG, class hirachary graph, constraint graph, value-flow graph for static analyses and code embedding ([OOPSLA'20](https://yuleisui.github.io/publications/oopsla20.pdf), [TOSEM'21](https://yuleisui.github.io/publications/tosem21.pdf))
33
33
 
34
- <b>SVF</b>'s doxygen document is [here](https://svf-tools.github.io/SVF-doxygen/html).
34
+ <b>SVF</b>'s doxygen document is available [here](https://svf-tools.github.io/SVF-doxygen/html).
35
35
 
36
36
  <br />
37
37
 
@@ -66,7 +66,7 @@ $(function() {
66
66
  <div class="title">AndersenPWC.h</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="AndersenPWC_8h.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">//===- AndersenSFR.h -- SFR based field-sensitive Andersen&#39;s analysis-------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * AndersenSFR.h</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: 09, Feb, 2019</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Yuxiang Lei</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">#ifndef PROJECT_ANDERSENSFR_H</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#define PROJECT_ANDERSENSFR_H</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CSC_8h.html">WPA/CSC.h</a>&quot;</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointsTo_8h.html">MemoryModel/PointsTo.h</a>&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;{</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html"> 44</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1AndersenSCD.html">AndersenSCD</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1Andersen.html">Andersen</a></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#a88ab40d553f49e173f9c53b32575ccda"> 47</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;NodeID, NodeID&gt;</a> <a class="code" href="classSVF_1_1AndersenSCD.html#a88ab40d553f49e173f9c53b32575ccda">NodeToNodeMap</a>;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#a1d143f104c0bfb5258b7129d0eceb4cd"> 50</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenSCD.html">AndersenSCD</a>* <a class="code" href="classSVF_1_1AndersenSCD.html#a1d143f104c0bfb5258b7129d0eceb4cd">scdAndersen</a>;</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#aeb0b3644c3bfbfa5768b92c99aeeef40"> 51</a></span>&#160; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> <a class="code" href="classSVF_1_1AndersenSCD.html#aeb0b3644c3bfbfa5768b92c99aeeef40">sccCandidates</a>;</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#ac4bf67d35b56f010aeedb59777a83f0e"> 52</a></span>&#160; NodeToNodeMap <a class="code" href="classSVF_1_1AndersenSCD.html#ac4bf67d35b56f010aeedb59777a83f0e">pwcReps</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;<span class="keyword">public</span>:</div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#a65593ef3db3762b476936f473e900a18"> 55</a></span>&#160; <a class="code" href="classSVF_1_1AndersenSCD.html#a65593ef3db3762b476936f473e900a18">AndersenSCD</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PTATY</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a6c06b12c95a4aa57edc6bef57514a7e1">AndersenSCD_WPA</a>) :</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <a class="code" href="classSVF_1_1Andersen.html">Andersen</a>(_pag,<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</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; }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#ad403be45ff1c69fccdff6c5f3f1959c2"> 61</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenSCD.html">AndersenSCD</a> *<a class="code" href="classSVF_1_1AndersenSCD.html#ad403be45ff1c69fccdff6c5f3f1959c2">createAndersenSCD</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag)</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">if</span> (scdAndersen == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a65593ef3db3762b476936f473e900a18">AndersenSCD</a>(_pag);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; scdAndersen-&gt;<a class="code" href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">analyze</a>();</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a1d143f104c0bfb5258b7129d0eceb4cd">scdAndersen</a>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a1d143f104c0bfb5258b7129d0eceb4cd">scdAndersen</a>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#ac2003ddf910f55d5c53c762b45964b50"> 72</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#ac2003ddf910f55d5c53c762b45964b50">releaseAndersenSCD</a>()</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">if</span> (scdAndersen)</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a1d143f104c0bfb5258b7129d0eceb4cd">scdAndersen</a>;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; scdAndersen = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#ad8530ce52f87c4ea94cac579288e2689"> 80</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#ad8530ce52f87c4ea94cac579288e2689">addSccCandidate</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</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; sccCandidates.insert(<a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(nodeId));</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;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; <a class="code" href="classSVF_1_1AndersenSCD.html#a70f69baf47587b742b5013a63a3ce593">SCCDetect</a>();</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#af155524f6f78424a846fe2eb575bb40a">PWCDetect</a>();</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a98fac4ecfe203666178e2ace39da81e2">solveWorklist</a>();</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a7ae683eb8c607a0e742b44e3019b8cbc">handleLoadStore</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a52704e25a1e3b30ddf8676811f4e1584">processAddr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* addr);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a0b5990e8b0230c019a2bcedbab354cba">addCopyEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a512c636bdaafe6a3ac8f0cc29392c573">updateCallGraph</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">CallSiteToFunPtrMap</a>&amp; callsites);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#aaee864bb1fc5b5d4643e145d80ecfb8b">processPWC</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* rep);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#aa0a496376f7bea2c417ef83c51d19a61">handleCopyGep</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;};</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html"> 102</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1AndersenSFR.html">AndersenSFR</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1AndersenSCD.html">AndersenSCD</a></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;{</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#ae81c9716b434f0f1e372d0ddf7003910"> 105</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;NodeID, NodeBS&gt;</a> <a class="code" href="classSVF_1_1AndersenSFR.html#ae81c9716b434f0f1e372d0ddf7003910">NodeStrides</a>;</div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#a52aa0c2a02a0db6700c4a7a8819d0a5d"> 106</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;NodeID, NodeSet&gt;</a> <a class="code" href="classSVF_1_1AndersenSFR.html#a52aa0c2a02a0db6700c4a7a8819d0a5d">FieldReps</a>;</div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#a654c391ad41b026eec2e0a1a54146600"> 107</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;NodeID, pair&lt;NodeID, NodeSet&gt;</a>&gt; <a class="code" href="classSVF_1_1AndersenSFR.html#a654c391ad41b026eec2e0a1a54146600">SFRTrait</a>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#abcf0f758174f224c5da066d0115beefb"> 110</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenSFR.html">AndersenSFR</a>* <a class="code" href="classSVF_1_1AndersenSFR.html#abcf0f758174f224c5da066d0115beefb">sfrAndersen</a>;</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"><a class="line" href="classSVF_1_1AndersenSFR.html#aa39c668b1473ac4fb99da3aa736c9edb"> 112</a></span>&#160; <a class="code" href="classSVF_1_1CSC.html">CSC</a>* <a class="code" href="classSVF_1_1AndersenSFR.html#aa39c668b1473ac4fb99da3aa736c9edb">csc</a>;</div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#a0865c50224ffc1e053cf859122f83f75"> 113</a></span>&#160; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> <a class="code" href="classSVF_1_1AndersenSFR.html#a0865c50224ffc1e053cf859122f83f75">sfrObjNodes</a>;</div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#a99337c429aebe9046c65068b44eff7cc"> 114</a></span>&#160; FieldReps <a class="code" href="classSVF_1_1AndersenSFR.html#a99337c429aebe9046c65068b44eff7cc">fieldReps</a>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#a61967331f111832d2374524605591499"> 117</a></span>&#160; <a class="code" href="classSVF_1_1AndersenSFR.html#a61967331f111832d2374524605591499">AndersenSFR</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PTATY</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85accfa4ed42d3a3ac5e4abc403e738427b">AndersenSFR_WPA</a>) :</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="classSVF_1_1AndersenSCD.html">AndersenSCD</a>(_pag, <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>), csc(nullptr)</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="l00121"></a><span class="lineno"> 121</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#a4792427f84f402ec30f9447d24f3faad"> 123</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenSFR.html">AndersenSFR</a> *<a class="code" href="classSVF_1_1AndersenSFR.html#a4792427f84f402ec30f9447d24f3faad">createAndersenSFR</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">if</span> (sfrAndersen == <span class="keyword">nullptr</span>)</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; <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenSFR.html">AndersenSFR</a>(_pag);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; sfrAndersen-&gt;<a class="code" href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">analyze</a>();</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">return</span> sfrAndersen;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; }</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">return</span> sfrAndersen;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</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"><a class="line" href="classSVF_1_1AndersenSFR.html#a4aa1607b7d84a6de151c19ae84b913b9"> 134</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSFR.html#a4aa1607b7d84a6de151c19ae84b913b9">releaseAndersenSFR</a>()</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">if</span> (sfrAndersen)</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keyword">delete</span> sfrAndersen;</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;</div><div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#aabdafa8234569219fc5d96bb44ca8ef0"> 140</a></span>&#160; <a class="code" href="classSVF_1_1AndersenSFR.html#aabdafa8234569219fc5d96bb44ca8ef0">~AndersenSFR</a>()</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">if</span> (csc != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; {</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keyword">delete</span>(csc);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; csc = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; }</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a20617a69c112ad423b1b5021e48a8548">initialize</a>();</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#af155524f6f78424a846fe2eb575bb40a">PWCDetect</a>();</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordtype">void</span> fieldExpand(<a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a>&amp; initials, <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>, <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>&amp; strides, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; expandPts);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#ac6b1efcaadfed48c226701ecf6bac55e">processGepPts</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts, <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepCGEdge.html">GepCGEdge</a>* edge);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#ae6b1e54a389abc68994219e39539127e">mergeSrcToTgt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;};</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="preprocessor">#endif //PROJECT_ANDERSENSFR_H</span></div><div class="ttc" id="Andersen_8h_html"><div class="ttname"><a href="Andersen_8h.html">Andersen.h</a></div></div>
69
+ <a href="AndersenPWC_8h.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">//===- AndersenSFR.h -- SFR based field-sensitive Andersen&#39;s analysis-------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * AndersenSFR.h</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: 09, Feb, 2019</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Yuxiang Lei</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">#ifndef PROJECT_ANDERSENSFR_H</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#define PROJECT_ANDERSENSFR_H</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CSC_8h.html">WPA/CSC.h</a>&quot;</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointsTo_8h.html">MemoryModel/PointsTo.h</a>&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;{</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html"> 44</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1AndersenSCD.html">AndersenSCD</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1Andersen.html">Andersen</a></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#a88ab40d553f49e173f9c53b32575ccda"> 47</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;NodeID, NodeID&gt;</a> <a class="code" href="classSVF_1_1AndersenSCD.html#a88ab40d553f49e173f9c53b32575ccda">NodeToNodeMap</a>;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#a1d143f104c0bfb5258b7129d0eceb4cd"> 50</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenSCD.html">AndersenSCD</a>* <a class="code" href="classSVF_1_1AndersenSCD.html#a1d143f104c0bfb5258b7129d0eceb4cd">scdAndersen</a>;</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#aeb0b3644c3bfbfa5768b92c99aeeef40"> 51</a></span>&#160; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> <a class="code" href="classSVF_1_1AndersenSCD.html#aeb0b3644c3bfbfa5768b92c99aeeef40">sccCandidates</a>;</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#ac4bf67d35b56f010aeedb59777a83f0e"> 52</a></span>&#160; NodeToNodeMap <a class="code" href="classSVF_1_1AndersenSCD.html#ac4bf67d35b56f010aeedb59777a83f0e">pwcReps</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;<span class="keyword">public</span>:</div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#a65593ef3db3762b476936f473e900a18"> 55</a></span>&#160; <a class="code" href="classSVF_1_1AndersenSCD.html#a65593ef3db3762b476936f473e900a18">AndersenSCD</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PTATY</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a6c06b12c95a4aa57edc6bef57514a7e1">AndersenSCD_WPA</a>) :</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <a class="code" href="classSVF_1_1Andersen.html">Andersen</a>(_pag,<a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>)</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; }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#ad403be45ff1c69fccdff6c5f3f1959c2"> 61</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenSCD.html">AndersenSCD</a> *<a class="code" href="classSVF_1_1AndersenSCD.html#ad403be45ff1c69fccdff6c5f3f1959c2">createAndersenSCD</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag)</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">if</span> (scdAndersen == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a65593ef3db3762b476936f473e900a18">AndersenSCD</a>(_pag);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; scdAndersen-&gt;<a class="code" href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">analyze</a>();</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a1d143f104c0bfb5258b7129d0eceb4cd">scdAndersen</a>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a1d143f104c0bfb5258b7129d0eceb4cd">scdAndersen</a>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#ac2003ddf910f55d5c53c762b45964b50"> 72</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#ac2003ddf910f55d5c53c762b45964b50">releaseAndersenSCD</a>()</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">if</span> (scdAndersen)</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a1d143f104c0bfb5258b7129d0eceb4cd">scdAndersen</a>;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; scdAndersen = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSCD.html#ad8530ce52f87c4ea94cac579288e2689"> 80</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#ad8530ce52f87c4ea94cac579288e2689">addSccCandidate</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</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; sccCandidates.insert(<a class="code" href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">sccRepNode</a>(nodeId));</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;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>&amp; <a class="code" href="classSVF_1_1AndersenSCD.html#a70f69baf47587b742b5013a63a3ce593">SCCDetect</a>();</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#af155524f6f78424a846fe2eb575bb40a">PWCDetect</a>();</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a98fac4ecfe203666178e2ace39da81e2">solveWorklist</a>();</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a7ae683eb8c607a0e742b44e3019b8cbc">handleLoadStore</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a52704e25a1e3b30ddf8676811f4e1584">processAddr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrCGEdge.html">AddrCGEdge</a>* addr);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a0b5990e8b0230c019a2bcedbab354cba">addCopyEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenSCD.html#a512c636bdaafe6a3ac8f0cc29392c573">updateCallGraph</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">CallSiteToFunPtrMap</a>&amp; callsites);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#aaee864bb1fc5b5d4643e145d80ecfb8b">processPWC</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* rep);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#aa0a496376f7bea2c417ef83c51d19a61">handleCopyGep</a>(<a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;};</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html"> 102</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1AndersenSFR.html">AndersenSFR</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1AndersenSCD.html">AndersenSCD</a></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;{</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#ae81c9716b434f0f1e372d0ddf7003910"> 105</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;NodeID, NodeBS&gt;</a> <a class="code" href="classSVF_1_1AndersenSFR.html#ae81c9716b434f0f1e372d0ddf7003910">NodeStrides</a>;</div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#a52aa0c2a02a0db6700c4a7a8819d0a5d"> 106</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;NodeID, NodeSet&gt;</a> <a class="code" href="classSVF_1_1AndersenSFR.html#a52aa0c2a02a0db6700c4a7a8819d0a5d">FieldReps</a>;</div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#a2d41b49a1474c030ef2324c14467af30"> 107</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;NodeID, std::pair&lt;NodeID, NodeSet&gt;</a>&gt; <a class="code" href="classSVF_1_1AndersenSFR.html#a2d41b49a1474c030ef2324c14467af30">SFRTrait</a>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#abcf0f758174f224c5da066d0115beefb"> 110</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenSFR.html">AndersenSFR</a>* <a class="code" href="classSVF_1_1AndersenSFR.html#abcf0f758174f224c5da066d0115beefb">sfrAndersen</a>;</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"><a class="line" href="classSVF_1_1AndersenSFR.html#aa39c668b1473ac4fb99da3aa736c9edb"> 112</a></span>&#160; <a class="code" href="classSVF_1_1CSC.html">CSC</a>* <a class="code" href="classSVF_1_1AndersenSFR.html#aa39c668b1473ac4fb99da3aa736c9edb">csc</a>;</div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#a0865c50224ffc1e053cf859122f83f75"> 113</a></span>&#160; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> <a class="code" href="classSVF_1_1AndersenSFR.html#a0865c50224ffc1e053cf859122f83f75">sfrObjNodes</a>;</div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#a99337c429aebe9046c65068b44eff7cc"> 114</a></span>&#160; FieldReps <a class="code" href="classSVF_1_1AndersenSFR.html#a99337c429aebe9046c65068b44eff7cc">fieldReps</a>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#a61967331f111832d2374524605591499"> 117</a></span>&#160; <a class="code" href="classSVF_1_1AndersenSFR.html#a61967331f111832d2374524605591499">AndersenSFR</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PTATY</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85accfa4ed42d3a3ac5e4abc403e738427b">AndersenSFR_WPA</a>) :</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="classSVF_1_1AndersenSCD.html">AndersenSCD</a>(_pag, <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>), csc(nullptr)</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="l00121"></a><span class="lineno"> 121</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#a4792427f84f402ec30f9447d24f3faad"> 123</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1AndersenSFR.html">AndersenSFR</a> *<a class="code" href="classSVF_1_1AndersenSFR.html#a4792427f84f402ec30f9447d24f3faad">createAndersenSFR</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">if</span> (sfrAndersen == <span class="keyword">nullptr</span>)</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; <span class="keyword">new</span> <a class="code" href="classSVF_1_1AndersenSFR.html">AndersenSFR</a>(_pag);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; sfrAndersen-&gt;<a class="code" href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">analyze</a>();</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">return</span> sfrAndersen;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; }</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">return</span> sfrAndersen;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</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"><a class="line" href="classSVF_1_1AndersenSFR.html#a4aa1607b7d84a6de151c19ae84b913b9"> 134</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSFR.html#a4aa1607b7d84a6de151c19ae84b913b9">releaseAndersenSFR</a>()</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">if</span> (sfrAndersen)</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keyword">delete</span> sfrAndersen;</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;</div><div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#aabdafa8234569219fc5d96bb44ca8ef0"> 140</a></span>&#160; <a class="code" href="classSVF_1_1AndersenSFR.html#aabdafa8234569219fc5d96bb44ca8ef0">~AndersenSFR</a>()</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">if</span> (csc != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; {</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keyword">delete</span>(csc);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; csc = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; }</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Andersen.html#a20617a69c112ad423b1b5021e48a8548">initialize</a>();</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSCD.html#af155524f6f78424a846fe2eb575bb40a">PWCDetect</a>();</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordtype">void</span> fieldExpand(<a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a>&amp; initials, <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>, <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>&amp; strides, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; expandPts);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#ac6b1efcaadfed48c226701ecf6bac55e">processGepPts</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; pts, <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepCGEdge.html">GepCGEdge</a>* edge);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Andersen.html#ae6b1e54a389abc68994219e39539127e">mergeSrcToTgt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> newRepId);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;};</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="preprocessor">#endif //PROJECT_ANDERSENSFR_H</span></div><div class="ttc" id="Andersen_8h_html"><div class="ttname"><a href="Andersen_8h.html">Andersen.h</a></div></div>
70
70
  <div class="ttc" id="CSC_8h_html"><div class="ttname"><a href="CSC_8h.html">CSC.h</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1AndersenSFR_html_a52aa0c2a02a0db6700c4a7a8819d0a5d"><div class="ttname"><a href="classSVF_1_1AndersenSFR.html#a52aa0c2a02a0db6700c4a7a8819d0a5d">SVF::AndersenSFR::FieldReps</a></div><div class="ttdeci">Map&lt; NodeID, NodeSet &gt; FieldReps</div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00106">AndersenPWC.h:106</a></div></div>
72
72
  <div class="ttc" id="namespaceSVF_html_a212231734fa43d5c7414137deaac7df3"><div class="ttname"><a href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">SVF::NodeSet</a></div><div class="ttdeci">Set&lt; NodeID &gt; NodeSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00122">SVFBasicTypes.h:122</a></div></div>
@@ -75,52 +75,52 @@ $(function() {
75
75
  <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#l00127">SVFBasicTypes.h:127</a></div></div>
76
76
  <div class="ttc" id="classSVF_1_1AndersenSFR_html_a4792427f84f402ec30f9447d24f3faad"><div class="ttname"><a href="classSVF_1_1AndersenSFR.html#a4792427f84f402ec30f9447d24f3faad">SVF::AndersenSFR::createAndersenSFR</a></div><div class="ttdeci">static AndersenSFR * createAndersenSFR(SVFIR *_pag)</div><div class="ttdoc">Create an singleton instance directly instead of invoking llvm pass manager. </div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00123">AndersenPWC.h:123</a></div></div>
77
77
  <div class="ttc" id="classSVF_1_1AndersenSFR_html_abcf0f758174f224c5da066d0115beefb"><div class="ttname"><a href="classSVF_1_1AndersenSFR.html#abcf0f758174f224c5da066d0115beefb">SVF::AndersenSFR::sfrAndersen</a></div><div class="ttdeci">static AndersenSFR * sfrAndersen</div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00110">AndersenPWC.h:110</a></div></div>
78
- <div class="ttc" id="classSVF_1_1AndersenSCD_html_a70f69baf47587b742b5013a63a3ce593"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#a70f69baf47587b742b5013a63a3ce593">SVF::AndersenSCD::SCCDetect</a></div><div class="ttdeci">virtual NodeStack &amp; SCCDetect()</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00096">AndersenSCD.cpp:96</a></div></div>
78
+ <div class="ttc" id="classSVF_1_1AndersenSCD_html_a70f69baf47587b742b5013a63a3ce593"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#a70f69baf47587b742b5013a63a3ce593">SVF::AndersenSCD::SCCDetect</a></div><div class="ttdeci">virtual NodeStack &amp; SCCDetect()</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00097">AndersenSCD.cpp:97</a></div></div>
79
79
  <div class="ttc" id="classSVF_1_1GepCGEdge_html"><div class="ttname"><a href="classSVF_1_1GepCGEdge.html">SVF::GepCGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00225">ConsGEdge.h:225</a></div></div>
80
80
  <div class="ttc" id="namespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00086">SVFBasicTypes.h:86</a></div></div>
81
- <div class="ttc" id="classSVF_1_1AndersenSFR_html_a654c391ad41b026eec2e0a1a54146600"><div class="ttname"><a href="classSVF_1_1AndersenSFR.html#a654c391ad41b026eec2e0a1a54146600">SVF::AndersenSFR::SFRTrait</a></div><div class="ttdeci">Map&lt; NodeID, pair&lt; NodeID, NodeSet &gt; &gt; SFRTrait</div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00107">AndersenPWC.h:107</a></div></div>
82
- <div class="ttc" id="classSVF_1_1AndersenBase_html_a944966086ecb716184c8cdcc43db5751"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">SVF::AndersenBase::analyze</a></div><div class="ttdeci">virtual void analyze() override</div><div class="ttdoc">Andersen analysis. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00102">Andersen.cpp:102</a></div></div>
81
+ <div class="ttc" id="classSVF_1_1AndersenBase_html_a944966086ecb716184c8cdcc43db5751"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a944966086ecb716184c8cdcc43db5751">SVF::AndersenBase::analyze</a></div><div class="ttdeci">virtual void analyze() override</div><div class="ttdoc">Andersen analysis. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00103">Andersen.cpp:103</a></div></div>
83
82
  <div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map&lt; Key, Value, Hash, KeyEqual, Allocator &gt; Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00110">SVFBasicTypes.h:110</a></div></div>
84
83
  <div class="ttc" id="classSVF_1_1AndersenSFR_html_a4aa1607b7d84a6de151c19ae84b913b9"><div class="ttname"><a href="classSVF_1_1AndersenSFR.html#a4aa1607b7d84a6de151c19ae84b913b9">SVF::AndersenSFR::releaseAndersenSFR</a></div><div class="ttdeci">static void releaseAndersenSFR()</div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00134">AndersenPWC.h:134</a></div></div>
85
84
  <div class="ttc" id="classSVF_1_1AndersenSFR_html_aabdafa8234569219fc5d96bb44ca8ef0"><div class="ttname"><a href="classSVF_1_1AndersenSFR.html#aabdafa8234569219fc5d96bb44ca8ef0">SVF::AndersenSFR::~AndersenSFR</a></div><div class="ttdeci">~AndersenSFR()</div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00140">AndersenPWC.h:140</a></div></div>
86
85
  <div class="ttc" id="classSVF_1_1AndersenSFR_html_a99337c429aebe9046c65068b44eff7cc"><div class="ttname"><a href="classSVF_1_1AndersenSFR.html#a99337c429aebe9046c65068b44eff7cc">SVF::AndersenSFR::fieldReps</a></div><div class="ttdeci">FieldReps fieldReps</div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00114">AndersenPWC.h:114</a></div></div>
87
- <div class="ttc" id="classSVF_1_1AndersenSCD_html_aa0a496376f7bea2c417ef83c51d19a61"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#aa0a496376f7bea2c417ef83c51d19a61">SVF::AndersenSCD::handleCopyGep</a></div><div class="ttdeci">virtual void handleCopyGep(ConstraintNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00148">AndersenSCD.cpp:148</a></div></div>
88
- <div class="ttc" id="classSVF_1_1AndersenSCD_html_a512c636bdaafe6a3ac8f0cc29392c573"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#a512c636bdaafe6a3ac8f0cc29392c573">SVF::AndersenSCD::updateCallGraph</a></div><div class="ttdeci">virtual bool updateCallGraph(const CallSiteToFunPtrMap &amp;callsites)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00274">AndersenSCD.cpp:274</a></div></div>
89
- <div class="ttc" id="classSVF_1_1AndersenSCD_html_a7ae683eb8c607a0e742b44e3019b8cbc"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#a7ae683eb8c607a0e742b44e3019b8cbc">SVF::AndersenSCD::handleLoadStore</a></div><div class="ttdeci">virtual void handleLoadStore(ConstraintNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00207">AndersenSCD.cpp:207</a></div></div>
86
+ <div class="ttc" id="classSVF_1_1AndersenSCD_html_aa0a496376f7bea2c417ef83c51d19a61"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#aa0a496376f7bea2c417ef83c51d19a61">SVF::AndersenSCD::handleCopyGep</a></div><div class="ttdeci">virtual void handleCopyGep(ConstraintNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00149">AndersenSCD.cpp:149</a></div></div>
87
+ <div class="ttc" id="classSVF_1_1AndersenSCD_html_a512c636bdaafe6a3ac8f0cc29392c573"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#a512c636bdaafe6a3ac8f0cc29392c573">SVF::AndersenSCD::updateCallGraph</a></div><div class="ttdeci">virtual bool updateCallGraph(const CallSiteToFunPtrMap &amp;callsites)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00275">AndersenSCD.cpp:275</a></div></div>
88
+ <div class="ttc" id="classSVF_1_1AndersenSCD_html_a7ae683eb8c607a0e742b44e3019b8cbc"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#a7ae683eb8c607a0e742b44e3019b8cbc">SVF::AndersenSCD::handleLoadStore</a></div><div class="ttdeci">virtual void handleLoadStore(ConstraintNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00208">AndersenSCD.cpp:208</a></div></div>
90
89
  <div class="ttc" id="classSVF_1_1AndersenSFR_html_a0865c50224ffc1e053cf859122f83f75"><div class="ttname"><a href="classSVF_1_1AndersenSFR.html#a0865c50224ffc1e053cf859122f83f75">SVF::AndersenSFR::sfrObjNodes</a></div><div class="ttdeci">NodeSet sfrObjNodes</div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00113">AndersenPWC.h:113</a></div></div>
91
90
  <div class="ttc" id="classSVF_1_1AndersenSCD_html_ac4bf67d35b56f010aeedb59777a83f0e"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#ac4bf67d35b56f010aeedb59777a83f0e">SVF::AndersenSCD::pwcReps</a></div><div class="ttdeci">NodeToNodeMap pwcReps</div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00052">AndersenPWC.h:52</a></div></div>
92
91
  <div class="ttc" id="classSVF_1_1AndersenSFR_html_aa39c668b1473ac4fb99da3aa736c9edb"><div class="ttname"><a href="classSVF_1_1AndersenSFR.html#aa39c668b1473ac4fb99da3aa736c9edb">SVF::AndersenSFR::csc</a></div><div class="ttdeci">CSC * csc</div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00112">AndersenPWC.h:112</a></div></div>
93
92
  <div class="ttc" id="classSVF_1_1AndersenSCD_html"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html">SVF::AndersenSCD</a></div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00044">AndersenPWC.h:44</a></div></div>
94
93
  <div class="ttc" id="cJSON_8cpp_html_a3f9a0d3265a6254722587175dac3e4dc"><div class="ttname"><a href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a></div><div class="ttdeci">newitem type</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02739">cJSON.cpp:2739</a></div></div>
95
- <div class="ttc" id="classSVF_1_1Andersen_html_a20617a69c112ad423b1b5021e48a8548"><div class="ttname"><a href="classSVF_1_1Andersen.html#a20617a69c112ad423b1b5021e48a8548">SVF::Andersen::initialize</a></div><div class="ttdeci">virtual void initialize()</div><div class="ttdoc">Initialize analysis. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00186">Andersen.cpp:186</a></div></div>
94
+ <div class="ttc" id="classSVF_1_1Andersen_html_a20617a69c112ad423b1b5021e48a8548"><div class="ttname"><a href="classSVF_1_1Andersen.html#a20617a69c112ad423b1b5021e48a8548">SVF::Andersen::initialize</a></div><div class="ttdeci">virtual void initialize()</div><div class="ttdoc">Initialize analysis. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00187">Andersen.cpp:187</a></div></div>
96
95
  <div class="ttc" id="classSVF_1_1AndersenSCD_html_a88ab40d553f49e173f9c53b32575ccda"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#a88ab40d553f49e173f9c53b32575ccda">SVF::AndersenSCD::NodeToNodeMap</a></div><div class="ttdeci">Map&lt; NodeID, NodeID &gt; NodeToNodeMap</div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00047">AndersenPWC.h:47</a></div></div>
97
- <div class="ttc" id="classSVF_1_1AndersenSCD_html_a98fac4ecfe203666178e2ace39da81e2"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#a98fac4ecfe203666178e2ace39da81e2">SVF::AndersenSCD::solveWorklist</a></div><div class="ttdeci">virtual void solveWorklist()</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00043">AndersenSCD.cpp:43</a></div></div>
96
+ <div class="ttc" id="classSVF_1_1AndersenSCD_html_a98fac4ecfe203666178e2ace39da81e2"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#a98fac4ecfe203666178e2ace39da81e2">SVF::AndersenSCD::solveWorklist</a></div><div class="ttdeci">virtual void solveWorklist()</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00044">AndersenSCD.cpp:44</a></div></div>
98
97
  <div class="ttc" id="PointsTo_8h_html"><div class="ttname"><a href="PointsTo_8h.html">PointsTo.h</a></div></div>
99
98
  <div class="ttc" id="classSVF_1_1AndersenSCD_html_ad403be45ff1c69fccdff6c5f3f1959c2"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#ad403be45ff1c69fccdff6c5f3f1959c2">SVF::AndersenSCD::createAndersenSCD</a></div><div class="ttdeci">static AndersenSCD * createAndersenSCD(SVFIR *_pag)</div><div class="ttdoc">Create an singleton instance directly instead of invoking llvm pass manager. </div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00061">AndersenPWC.h:61</a></div></div>
100
99
  <div class="ttc" id="classSVF_1_1AndersenSCD_html_a65593ef3db3762b476936f473e900a18"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#a65593ef3db3762b476936f473e900a18">SVF::AndersenSCD::AndersenSCD</a></div><div class="ttdeci">AndersenSCD(SVFIR *_pag, PTATY type=AndersenSCD_WPA)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00055">AndersenPWC.h:55</a></div></div>
101
100
  <div class="ttc" id="classSVF_1_1ConstraintNode_html"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html">SVF::ConstraintNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00040">ConsGNode.h:40</a></div></div>
102
- <div class="ttc" id="classSVF_1_1AndersenSCD_html_af155524f6f78424a846fe2eb575bb40a"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#af155524f6f78424a846fe2eb575bb40a">SVF::AndersenSCD::PWCDetect</a></div><div class="ttdeci">virtual void PWCDetect()</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00125">AndersenSCD.cpp:125</a></div></div>
101
+ <div class="ttc" id="classSVF_1_1AndersenSCD_html_af155524f6f78424a846fe2eb575bb40a"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#af155524f6f78424a846fe2eb575bb40a">SVF::AndersenSCD::PWCDetect</a></div><div class="ttdeci">virtual void PWCDetect()</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00126">AndersenSCD.cpp:126</a></div></div>
103
102
  <div class="ttc" id="cJSON_8cpp_html_a95bf816579e97b6f33bdb5e25ed6d5de"><div class="ttname"><a href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a></div><div class="ttdeci">buffer offset</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l01113">cJSON.cpp:1113</a></div></div>
104
103
  <div class="ttc" id="classSVF_1_1AndersenSCD_html_ac2003ddf910f55d5c53c762b45964b50"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#ac2003ddf910f55d5c53c762b45964b50">SVF::AndersenSCD::releaseAndersenSCD</a></div><div class="ttdeci">static void releaseAndersenSCD()</div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00072">AndersenPWC.h:72</a></div></div>
105
104
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85accfa4ed42d3a3ac5e4abc403e738427b"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85accfa4ed42d3a3ac5e4abc403e738427b">SVF::PointerAnalysis::AndersenSFR_WPA</a></div><div class="ttdoc">Stride-based field representation. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00068">PointerAnalysis.h:68</a></div></div>
106
105
  <div class="ttc" id="classSVF_1_1AndersenSCD_html_a1d143f104c0bfb5258b7129d0eceb4cd"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#a1d143f104c0bfb5258b7129d0eceb4cd">SVF::AndersenSCD::scdAndersen</a></div><div class="ttdeci">static AndersenSCD * scdAndersen</div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00050">AndersenPWC.h:50</a></div></div>
107
- <div class="ttc" id="classSVF_1_1Andersen_html_ac6b1efcaadfed48c226701ecf6bac55e"><div class="ttname"><a href="classSVF_1_1Andersen.html#ac6b1efcaadfed48c226701ecf6bac55e">SVF::Andersen::processGepPts</a></div><div class="ttdeci">virtual bool processGepPts(const PointsTo &amp;pts, const GepCGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00390">Andersen.cpp:390</a></div></div>
106
+ <div class="ttc" id="classSVF_1_1Andersen_html_ac6b1efcaadfed48c226701ecf6bac55e"><div class="ttname"><a href="classSVF_1_1Andersen.html#ac6b1efcaadfed48c226701ecf6bac55e">SVF::Andersen::processGepPts</a></div><div class="ttdeci">virtual bool processGepPts(const PointsTo &amp;pts, const GepCGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00391">Andersen.cpp:391</a></div></div>
108
107
  <div class="ttc" id="classSVF_1_1SparseBitVector_html"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html">SVF::SparseBitVector</a></div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00460">SparseBitVector.h:460</a></div></div>
109
108
  <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="CFGNormalizer_8h_source.html#l00035">CFGNormalizer.h:35</a></div></div>
110
109
  <div class="ttc" id="classSVF_1_1AndersenSCD_html_ad8530ce52f87c4ea94cac579288e2689"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#ad8530ce52f87c4ea94cac579288e2689">SVF::AndersenSCD::addSccCandidate</a></div><div class="ttdeci">void addSccCandidate(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00080">AndersenPWC.h:80</a></div></div>
111
- <div class="ttc" id="classSVF_1_1AndersenSCD_html_aaee864bb1fc5b5d4643e145d80ecfb8b"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#aaee864bb1fc5b5d4643e145d80ecfb8b">SVF::AndersenSCD::processPWC</a></div><div class="ttdeci">virtual void processPWC(ConstraintNode *rep)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00162">AndersenSCD.cpp:162</a></div></div>
110
+ <div class="ttc" id="classSVF_1_1AndersenSCD_html_aaee864bb1fc5b5d4643e145d80ecfb8b"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#aaee864bb1fc5b5d4643e145d80ecfb8b">SVF::AndersenSCD::processPWC</a></div><div class="ttdeci">virtual void processPWC(ConstraintNode *rep)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00163">AndersenSCD.cpp:163</a></div></div>
112
111
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_ad95c842964e6ca46e51fb763fefec585"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">SVF::PointerAnalysis::CallSiteToFunPtrMap</a></div><div class="ttdeci">SVFIR::CallSiteToFunPtrMap CallSiteToFunPtrMap</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00104">PointerAnalysis.h:104</a></div></div>
113
- <div class="ttc" id="classSVF_1_1Andersen_html_ae6b1e54a389abc68994219e39539127e"><div class="ttname"><a href="classSVF_1_1Andersen.html#ae6b1e54a389abc68994219e39539127e">SVF::Andersen::mergeSrcToTgt</a></div><div class="ttdeci">virtual bool mergeSrcToTgt(NodeID srcId, NodeID tgtId)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00778">Andersen.cpp:778</a></div></div>
112
+ <div class="ttc" id="classSVF_1_1AndersenSFR_html_a2d41b49a1474c030ef2324c14467af30"><div class="ttname"><a href="classSVF_1_1AndersenSFR.html#a2d41b49a1474c030ef2324c14467af30">SVF::AndersenSFR::SFRTrait</a></div><div class="ttdeci">Map&lt; NodeID, std::pair&lt; NodeID, NodeSet &gt; &gt; SFRTrait</div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00107">AndersenPWC.h:107</a></div></div>
113
+ <div class="ttc" id="classSVF_1_1Andersen_html_ae6b1e54a389abc68994219e39539127e"><div class="ttname"><a href="classSVF_1_1Andersen.html#ae6b1e54a389abc68994219e39539127e">SVF::Andersen::mergeSrcToTgt</a></div><div class="ttdeci">virtual bool mergeSrcToTgt(NodeID srcId, NodeID tgtId)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00779">Andersen.cpp:779</a></div></div>
114
114
  <div class="ttc" id="classSVF_1_1AndersenSFR_html_ae81c9716b434f0f1e372d0ddf7003910"><div class="ttname"><a href="classSVF_1_1AndersenSFR.html#ae81c9716b434f0f1e372d0ddf7003910">SVF::AndersenSFR::NodeStrides</a></div><div class="ttdeci">Map&lt; NodeID, NodeBS &gt; NodeStrides</div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00105">AndersenPWC.h:105</a></div></div>
115
115
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">SVF::PointerAnalysis::PTATY</a></div><div class="ttdeci">PTATY</div><div class="ttdoc">Pointer analysis type list. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00062">PointerAnalysis.h:62</a></div></div>
116
116
  <div class="ttc" id="classSVF_1_1AddrCGEdge_html"><div class="ttname"><a href="classSVF_1_1AddrCGEdge.html">SVF::AddrCGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00093">ConsGEdge.h:93</a></div></div>
117
117
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85a6c06b12c95a4aa57edc6bef57514a7e1"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a6c06b12c95a4aa57edc6bef57514a7e1">SVF::PointerAnalysis::AndersenSCD_WPA</a></div><div class="ttdoc">Selective cycle detection andersen-style WPA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00067">PointerAnalysis.h:67</a></div></div>
118
118
  <div class="ttc" id="classSVF_1_1Andersen_html"><div class="ttname"><a href="classSVF_1_1Andersen.html">SVF::Andersen</a></div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00145">Andersen.h:145</a></div></div>
119
- <div class="ttc" id="classSVF_1_1AndersenSCD_html_a52704e25a1e3b30ddf8676811f4e1584"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#a52704e25a1e3b30ddf8676811f4e1584">SVF::AndersenSCD::processAddr</a></div><div class="ttdeci">virtual void processAddr(const AddrCGEdge *addr)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00246">AndersenSCD.cpp:246</a></div></div>
119
+ <div class="ttc" id="classSVF_1_1AndersenSCD_html_a52704e25a1e3b30ddf8676811f4e1584"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#a52704e25a1e3b30ddf8676811f4e1584">SVF::AndersenSCD::processAddr</a></div><div class="ttdeci">virtual void processAddr(const AddrCGEdge *addr)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00247">AndersenSCD.cpp:247</a></div></div>
120
120
  <div class="ttc" id="classSVF_1_1PointsTo_html"><div class="ttname"><a href="classSVF_1_1PointsTo.html">SVF::PointsTo</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00028">PointsTo.h:28</a></div></div>
121
121
  <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>
122
122
  <div class="ttc" id="classSVF_1_1Andersen_html_aad706e332847e6b0892350a05028ba30"><div class="ttname"><a href="classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30">SVF::Andersen::sccRepNode</a></div><div class="ttdeci">NodeID sccRepNode(NodeID id) const</div><div class="ttdoc">SCC methods. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00197">Andersen.h:197</a></div></div>
123
- <div class="ttc" id="classSVF_1_1AndersenSCD_html_a0b5990e8b0230c019a2bcedbab354cba"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#a0b5990e8b0230c019a2bcedbab354cba">SVF::AndersenSCD::addCopyEdge</a></div><div class="ttdeci">virtual bool addCopyEdge(NodeID src, NodeID dst)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00260">AndersenSCD.cpp:260</a></div></div>
123
+ <div class="ttc" id="classSVF_1_1AndersenSCD_html_a0b5990e8b0230c019a2bcedbab354cba"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#a0b5990e8b0230c019a2bcedbab354cba">SVF::AndersenSCD::addCopyEdge</a></div><div class="ttdeci">virtual bool addCopyEdge(NodeID src, NodeID dst)</div><div class="ttdef"><b>Definition:</b> <a href="AndersenSCD_8cpp_source.html#l00261">AndersenSCD.cpp:261</a></div></div>
124
124
  <div class="ttc" id="classSVF_1_1AndersenSFR_html"><div class="ttname"><a href="classSVF_1_1AndersenSFR.html">SVF::AndersenSFR</a></div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00102">AndersenPWC.h:102</a></div></div>
125
125
  <div class="ttc" id="classSVF_1_1AndersenSCD_html_aeb0b3644c3bfbfa5768b92c99aeeef40"><div class="ttname"><a href="classSVF_1_1AndersenSCD.html#aeb0b3644c3bfbfa5768b92c99aeeef40">SVF::AndersenSCD::sccCandidates</a></div><div class="ttdeci">NodeSet sccCandidates</div><div class="ttdef"><b>Definition:</b> <a href="AndersenPWC_8h_source.html#l00051">AndersenPWC.h:51</a></div></div>
126
126
  <div class="ttc" id="classSVF_1_1CSC_html"><div class="ttname"><a href="classSVF_1_1CSC.html">SVF::CSC</a></div><div class="ttdef"><b>Definition:</b> <a href="CSC_8h_source.html#l00049">CSC.h:49</a></div></div>