svf-tools 1.0.427 → 1.0.430

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 (305) hide show
  1. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +2 -2
  2. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +2 -2
  3. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +8 -8
  4. package/SVF-doxygen/html/html/Andersen_8h_source.html +2 -2
  5. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +10 -10
  7. package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +3 -3
  8. package/SVF-doxygen/html/html/CHG_8cpp.html +2 -2
  9. package/SVF-doxygen/html/html/CHG_8cpp_source.html +8 -8
  10. package/SVF-doxygen/html/html/CHG_8h_source.html +2 -2
  11. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +11 -11
  12. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +4 -4
  13. package/SVF-doxygen/html/html/ConsG_8h_source.html +3 -3
  14. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +5 -5
  15. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +1 -1
  16. package/SVF-doxygen/html/html/CxtStmt_8h_source.html +2 -2
  17. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +15 -15
  18. package/SVF-doxygen/html/html/DCHG_8h_source.html +7 -7
  19. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +1 -1
  20. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
  21. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +9 -9
  22. package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +4 -4
  23. package/SVF-doxygen/html/html/DataFlowUtil_8h_source.html +6 -6
  24. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +3 -3
  25. package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
  26. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +3 -3
  27. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
  28. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +3 -3
  29. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp.html +1 -1
  30. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +1 -1
  31. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +1 -1
  32. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +1 -1
  33. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +2 -2
  34. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +10 -10
  35. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
  36. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +2 -2
  37. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +4 -4
  38. package/SVF-doxygen/html/html/ICFG_8h_source.html +1 -1
  39. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +1 -1
  40. package/SVF-doxygen/html/html/IRGraph_8h_source.html +18 -18
  41. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +1 -1
  42. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +2 -2
  43. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +18 -18
  44. package/SVF-doxygen/html/html/LLVMUtil_8h.html +6 -0
  45. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +58 -56
  46. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +2 -2
  47. package/SVF-doxygen/html/html/LeakChecker_8h_source.html +1 -1
  48. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +2 -2
  49. package/SVF-doxygen/html/html/LocationSet_8h_source.html +1 -1
  50. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +9 -9
  51. package/SVF-doxygen/html/html/LockAnalysis_8h_source.html +1 -1
  52. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +8 -8
  53. package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +1 -1
  54. package/SVF-doxygen/html/html/MHP_8cpp.html +1 -1
  55. package/SVF-doxygen/html/html/MHP_8cpp_source.html +9 -9
  56. package/SVF-doxygen/html/html/MHP_8h_source.html +2 -2
  57. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +1 -1
  58. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +4 -4
  59. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +3 -3
  60. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +9 -9
  61. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +3 -3
  62. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +4 -4
  63. package/SVF-doxygen/html/html/MTA_8cpp_source.html +3 -3
  64. package/SVF-doxygen/html/html/MTA_8h_source.html +2 -2
  65. package/SVF-doxygen/html/html/MemPartition_8cpp_source.html +1 -1
  66. package/SVF-doxygen/html/html/MemPartition_8h_source.html +1 -1
  67. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +13 -12
  68. package/SVF-doxygen/html/html/MemRegion_8h_source.html +1 -1
  69. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +9 -9
  70. package/SVF-doxygen/html/html/MemSSA_8h_source.html +3 -3
  71. package/SVF-doxygen/html/html/MutablePointsToDS_8h_source.html +2 -2
  72. package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +1 -1
  73. package/SVF-doxygen/html/html/PCG_8cpp_source.html +5 -5
  74. package/SVF-doxygen/html/html/PCG_8h_source.html +1 -1
  75. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +5 -5
  76. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +1 -1
  77. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +15 -15
  78. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +33 -27
  79. package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +32 -28
  80. package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +2 -2
  81. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +3 -3
  82. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +18 -18
  83. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +6 -6
  84. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +5 -4
  85. package/SVF-doxygen/html/html/ProgSlice_8h_source.html +4 -4
  86. package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h.html +117 -27
  87. package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h_source.html +32 -27
  88. package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +1 -1
  89. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +4 -4
  90. package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +2 -2
  91. package/SVF-doxygen/html/html/SVFGNode_8h_source.html +1 -1
  92. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +1 -1
  93. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +3 -3
  94. package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
  95. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +70 -70
  96. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +34 -34
  97. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +5 -5
  98. package/SVF-doxygen/html/html/SVFIR_8h_source.html +10 -10
  99. package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +1 -1
  100. package/SVF-doxygen/html/html/SVFModule_8h_source.html +1 -1
  101. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
  102. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +3 -3
  103. package/SVF-doxygen/html/html/SVFUtil_8h.html +0 -3
  104. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +12 -13
  105. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +7 -7
  106. package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +9 -7
  107. package/SVF-doxygen/html/html/SaberAnnotator_8h.html +1 -1
  108. package/SVF-doxygen/html/html/SaberAnnotator_8h_source.html +6 -7
  109. package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +2 -2
  110. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +2 -2
  111. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
  112. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +62 -61
  113. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +2 -2
  114. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +77 -76
  115. package/SVF-doxygen/html/html/SymbolTableInfo_8h.html +1 -0
  116. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +135 -134
  117. package/SVF-doxygen/html/html/TCT_8cpp_source.html +11 -11
  118. package/SVF-doxygen/html/html/TCT_8h_source.html +7 -7
  119. package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +5 -5
  120. package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +4 -4
  121. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +5 -5
  122. package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +1 -1
  123. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +3 -3
  124. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +12 -12
  125. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +2 -2
  126. package/SVF-doxygen/html/html/Util_2BasicTypes_8h.html +1 -11
  127. package/SVF-doxygen/html/html/Util_2BasicTypes_8h_source.html +75 -80
  128. package/SVF-doxygen/html/html/VFGNode_8h_source.html +1 -1
  129. package/SVF-doxygen/html/html/VFG_8cpp_source.html +2 -2
  130. package/SVF-doxygen/html/html/VFG_8h_source.html +1 -1
  131. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +3 -3
  132. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +1 -1
  133. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +1 -1
  134. package/SVF-doxygen/html/html/WPAPass_8h_source.html +1 -1
  135. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +8 -8
  136. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +2 -2
  137. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +2 -2
  138. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +3 -3
  139. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +2 -2
  140. package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +1 -1
  141. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +15 -15
  142. package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +6 -6
  143. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +3 -3
  144. package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +1 -1
  145. package/SVF-doxygen/html/html/classSVF_1_1CallSite.html +41 -41
  146. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +7 -7
  147. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +47 -47
  148. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +2 -2
  149. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +5 -3
  150. package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +1 -1
  151. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +2 -2
  152. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +3 -3
  153. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +3 -3
  154. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +6 -6
  155. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +11 -11
  156. package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +2 -2
  157. package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +4 -4
  158. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +1 -1
  159. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +3 -3
  160. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +2 -2
  161. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +14 -14
  162. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +2 -2
  163. package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +16 -16
  164. package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +1 -1
  165. package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +1 -1
  166. package/SVF-doxygen/html/html/classSVF_1_1IteratedDominanceFrontier.html +2 -2
  167. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +1 -1
  168. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +4 -4
  169. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +2 -2
  170. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +21 -21
  171. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +8 -8
  172. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +18 -18
  173. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +20 -19
  174. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +4 -4
  175. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +9 -9
  176. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +15 -15
  177. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +4 -4
  178. package/SVF-doxygen/html/html/classSVF_1_1MemObj-members.html +5 -4
  179. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +115 -88
  180. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +13 -13
  181. package/SVF-doxygen/html/html/classSVF_1_1MemSSADF.html +1 -1
  182. package/SVF-doxygen/html/html/classSVF_1_1MutablePTData.html +2 -2
  183. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +94 -94
  184. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
  185. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +1 -1
  186. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +10 -10
  187. package/SVF-doxygen/html/html/classSVF_1_1PTACFInfoBuilder.html +3 -3
  188. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +1 -1
  189. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +3 -3
  190. package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +1 -1
  191. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +15 -15
  192. package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator-members.html +26 -25
  193. package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +153 -114
  194. package/SVF-doxygen/html/html/classSVF_1_1PersistentIncDFPTData.html +2 -2
  195. package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +2 -2
  196. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +31 -30
  197. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +11 -8
  198. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +2 -2
  199. package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +3 -3
  200. package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +29 -29
  201. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +3 -3
  202. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
  203. package/SVF-doxygen/html/html/classSVF_1_1SVFGlobal.html +3 -3
  204. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +17 -17
  205. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +89 -89
  206. package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +1 -1
  207. package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +2 -2
  208. package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator-members.html +3 -3
  209. package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +28 -24
  210. package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +4 -4
  211. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +2 -2
  212. package/SVF-doxygen/html/html/classSVF_1_1StInfo.html +36 -36
  213. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +86 -86
  214. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +41 -42
  215. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +189 -220
  216. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +18 -18
  217. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +5 -5
  218. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +7 -7
  219. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +1 -1
  220. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +3 -3
  221. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +16 -16
  222. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +4 -4
  223. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +1 -1
  224. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +3 -3
  225. package/SVF-doxygen/html/html/functions_a.html +3 -3
  226. package/SVF-doxygen/html/html/functions_e.html +2 -2
  227. package/SVF-doxygen/html/html/functions_func.html +3 -3
  228. package/SVF-doxygen/html/html/functions_func_e.html +2 -2
  229. package/SVF-doxygen/html/html/functions_func_g.html +8 -7
  230. package/SVF-doxygen/html/html/functions_func_i.html +5 -8
  231. package/SVF-doxygen/html/html/functions_func_s.html +9 -8
  232. package/SVF-doxygen/html/html/functions_g.html +15 -14
  233. package/SVF-doxygen/html/html/functions_i.html +11 -14
  234. package/SVF-doxygen/html/html/functions_l.html +3 -3
  235. package/SVF-doxygen/html/html/functions_o.html +15 -15
  236. package/SVF-doxygen/html/html/functions_p.html +7 -7
  237. package/SVF-doxygen/html/html/functions_r.html +8 -8
  238. package/SVF-doxygen/html/html/functions_s.html +11 -10
  239. package/SVF-doxygen/html/html/functions_t.html +10 -8
  240. package/SVF-doxygen/html/html/functions_v.html +3 -3
  241. package/SVF-doxygen/html/html/globals.html +3 -0
  242. package/SVF-doxygen/html/html/globals_b.html +3 -0
  243. package/SVF-doxygen/html/html/globals_r.html +3 -0
  244. package/SVF-doxygen/html/html/globals_s.html +9 -6
  245. package/SVF-doxygen/html/html/globals_type.html +15 -0
  246. package/SVF-doxygen/html/html/globals_u.html +5 -2
  247. package/SVF-doxygen/html/html/namespaceSVF.html +40 -130
  248. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +253 -220
  249. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +20 -20
  250. package/SVF-doxygen/html/html/namespacemembers.html +0 -3
  251. package/SVF-doxygen/html/html/namespacemembers_b.html +1 -4
  252. package/SVF-doxygen/html/html/namespacemembers_func.html +8 -5
  253. package/SVF-doxygen/html/html/namespacemembers_i.html +11 -8
  254. package/SVF-doxygen/html/html/namespacemembers_r.html +1 -4
  255. package/SVF-doxygen/html/html/namespacemembers_s.html +0 -3
  256. package/SVF-doxygen/html/html/namespacemembers_type.html +0 -15
  257. package/SVF-doxygen/html/html/namespacemembers_u.html +0 -3
  258. package/SVF-doxygen/html/html/search/all_1.js +4 -4
  259. package/SVF-doxygen/html/html/search/all_10.js +9 -9
  260. package/SVF-doxygen/html/html/search/all_12.js +4 -4
  261. package/SVF-doxygen/html/html/search/all_13.js +8 -8
  262. package/SVF-doxygen/html/html/search/all_14.js +7 -7
  263. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  264. package/SVF-doxygen/html/html/search/all_16.js +2 -2
  265. package/SVF-doxygen/html/html/search/all_2.js +1 -1
  266. package/SVF-doxygen/html/html/search/all_5.js +2 -2
  267. package/SVF-doxygen/html/html/search/all_7.js +1 -1
  268. package/SVF-doxygen/html/html/search/all_9.js +2 -2
  269. package/SVF-doxygen/html/html/search/all_c.js +1 -1
  270. package/SVF-doxygen/html/html/search/all_d.js +2 -2
  271. package/SVF-doxygen/html/html/search/all_e.js +2 -2
  272. package/SVF-doxygen/html/html/search/all_f.js +3 -3
  273. package/SVF-doxygen/html/html/search/functions_0.js +3 -3
  274. package/SVF-doxygen/html/html/search/functions_10.js +2 -2
  275. package/SVF-doxygen/html/html/search/functions_4.js +2 -2
  276. package/SVF-doxygen/html/html/search/functions_6.js +1 -1
  277. package/SVF-doxygen/html/html/search/functions_8.js +1 -1
  278. package/SVF-doxygen/html/html/search/functions_e.js +1 -1
  279. package/SVF-doxygen/html/html/search/typedefs_0.js +1 -1
  280. package/SVF-doxygen/html/html/search/typedefs_1.js +1 -1
  281. package/SVF-doxygen/html/html/search/typedefs_10.js +1 -1
  282. package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
  283. package/SVF-doxygen/html/html/search/typedefs_13.js +1 -1
  284. package/SVF-doxygen/html/html/search/variables_14.js +3 -3
  285. package/SVF-doxygen/html/html/search/variables_d.js +1 -1
  286. package/SVF-doxygen/html/html/search/variables_e.js +1 -1
  287. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PTACallGraph_01_5_01_4.html +2 -2
  288. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CallSite_01_4.html +3 -3
  289. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtProc_01_4.html +1 -1
  290. package/include/DDA/DDAVFSolver.h +3 -3
  291. package/include/MemoryModel/SymbolTableInfo.h +6 -4
  292. package/include/SABER/PathCondAllocator.h +8 -2
  293. package/include/SABER/SaberAnnotator.h +4 -4
  294. package/include/SVF-FE/BasicTypes.h +5 -0
  295. package/include/SVF-FE/LLVMUtil.h +13 -0
  296. package/include/Util/BasicTypes.h +0 -5
  297. package/include/Util/SVFUtil.h +0 -5
  298. package/lib/MSSA/MemRegion.cpp +4 -4
  299. package/lib/MemoryModel/PointerAnalysis.cpp +4 -4
  300. package/lib/MemoryModel/SymbolTableInfo.cpp +6 -8
  301. package/lib/SABER/PathCondAllocator.cpp +31 -26
  302. package/lib/SABER/ProgSlice.cpp +7 -4
  303. package/lib/SABER/SaberAnnotator.cpp +8 -8
  304. package/lib/SVF-FE/SymbolTableBuilder.cpp +1 -1
  305. package/package.json +1 -1
@@ -99,11 +99,11 @@ $(function() {
99
99
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_af69c7e623ab5a36644b6aeabaa1a1e28"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#af69c7e623ab5a36644b6aeabaa1a1e28">SVF::ConstraintNode::outgoingLoadsBegin</a></div><div class="ttdeci">const_iterator outgoingLoadsBegin() const</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00258">ConsGNode.h:258</a></div></div>
100
100
  <div class="ttc" id="classSVF_1_1FIFOWorkList_html"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html">SVF::FIFOWorkList&lt; NodeID &gt;</a></div></div>
101
101
  <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="AndersenSFR_8h_source.html#l00050">AndersenSFR.h:50</a></div></div>
102
- <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a202de7ad2bea0311e2f75894c030e7a9"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVF::SVFUtil::getLLVMCallSite</a></div><div class="ttdeci">CallSite getLLVMCallSite(const Instruction *inst)</div><div class="ttdoc">Return LLVM callsite given a instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00219">SVFUtil.h:219</a></div></div>
102
+ <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a202de7ad2bea0311e2f75894c030e7a9"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVF::SVFUtil::getLLVMCallSite</a></div><div class="ttdeci">CallSite getLLVMCallSite(const Instruction *inst)</div><div class="ttdoc">Return LLVM callsite given a instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00214">SVFUtil.h:214</a></div></div>
103
103
  <div class="ttc" id="classSVF_1_1Andersen_html_a8ba593bd16d4436310f2f25e75687c57"><div class="ttname"><a href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57">SVF::Andersen::addCopyEdge</a></div><div class="ttdeci">virtual bool addCopyEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add copy edge on constraint graph. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00328">Andersen.h:328</a></div></div>
104
104
  <div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="ContextDDA_8h_source.html#l00016">ContextDDA.h:16</a></div></div>
105
105
  <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#l00161">AndersenSCD.cpp:161</a></div></div>
106
- <div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00259">BasicTypes.h:259</a></div></div>
106
+ <div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00254">BasicTypes.h:254</a></div></div>
107
107
  <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#l00109">PointerAnalysis.h:109</a></div></div>
108
108
  <div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00165">GenericGraph.h:165</a></div></div>
109
109
  <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>
@@ -66,7 +66,7 @@ $(function() {
66
66
  <div class="title">AndersenSFR.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="AndersenSFR_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- AndersenSFR.cpp -- 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.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: 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">#include &quot;<a class="code" href="AndersenSFR_8h.html">WPA/AndersenSFR.h</a>&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointsTo_8h.html">MemoryModel/PointsTo.h</a>&quot;</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;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<a class="code" href="classSVF_1_1AndersenSFR.html">AndersenSFR</a> *<a class="code" href="classSVF_1_1AndersenSFR.html#abcf0f758174f224c5da066d0115beefb">AndersenSFR::sfrAndersen</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#a3b255068b3ea53041af94fd373a53bd4"> 41</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSFR.html#a3b255068b3ea53041af94fd373a53bd4">AndersenSFR::initialize</a>()</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;{</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a20617a69c112ad423b1b5021e48a8548">AndersenSCD::initialize</a>();</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; setPWCOpt(<span class="keyword">false</span>);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">if</span> (!csc)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; csc = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CSC.html">CSC</a>(_graph, scc);</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="comment">// detect and collapse cycles that only comprise copy edges</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; getSCCDetector()-&gt;find();</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; mergeSccCycle();</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#a7bb1bd307c5db4d732e51af810c5ad75"> 58</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSFR.html#a7bb1bd307c5db4d732e51af810c5ad75">AndersenSFR::PWCDetect</a>()</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;{</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="classSVF_1_1AndersenSCD.html#af155524f6f78424a846fe2eb575bb40a">AndersenSCD::PWCDetect</a>();</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; csc-&gt;find(getSCCDetector()-&gt;topoNodeStack());</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;}</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#ac5f406db5610347564fceff4d36f6a6f"> 68</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenSFR.html#ac5f406db5610347564fceff4d36f6a6f">AndersenSFR::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="l00069"></a><span class="lineno"> 69</span>&#160;{</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = consCG-&gt;getConstraintNode(nodeId);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">if</span> (!node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a873ba0c14dc57bd603c4a6b4d73e4278">strides</a>.empty())</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* newRepNode = consCG-&gt;getConstraintNode(newRepId);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; newRepNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a873ba0c14dc57bd603c4a6b4d73e4278">strides</a> |= node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a873ba0c14dc57bd603c4a6b4d73e4278">strides</a>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Andersen.html#ae6b1e54a389abc68994219e39539127e">AndersenSCD::mergeSrcToTgt</a>(nodeId, newRepId);</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;</div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#a654abe596f1f6f33e2373503af1f5038"> 83</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenSFR.html#a654abe596f1f6f33e2373503af1f5038">AndersenSFR::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="l00084"></a><span class="lineno"> 84</span>&#160;{</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* dst = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId = dst-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">if</span> (!dst-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a873ba0c14dc57bd603c4a6b4d73e4278">strides</a>.empty() &amp;&amp; SVFUtil::isa&lt;NormalGepCGEdge&gt;(edge)) <span class="comment">// dst is in pwc</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> tmpDstPts;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> srcInits = pts - getPts(dstId);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">if</span> (!srcInits.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</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; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> sortSrcInits;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd : srcInits)</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; sortSrcInits.insert(ptd);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> offset = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>&gt;(edge)-&gt;getConstantFieldIdx();</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; fieldExpand(sortSrcInits, offset, dst-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a873ba0c14dc57bd603c4a6b4d73e4278">strides</a>, tmpDstPts);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">if</span> (unionPts(dstId, tmpDstPts))</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; pushIntoWorklist(dstId);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Andersen.html#ac6b1efcaadfed48c226701ecf6bac55e">Andersen::processGepPts</a>(pts, edge);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;}</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#aa768e5cd0a762d17e2ec2baaad0486bf"> 119</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSFR.html#aa768e5cd0a762d17e2ec2baaad0486bf">AndersenSFR::fieldExpand</a>(<a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a>&amp; initials, <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> offset, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; strides, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; expandPts)</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; numOfFieldExpand++;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">while</span> (!initials.empty())</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> init = *initials.begin();</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; initials.erase(init);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">if</span> (consCG-&gt;isBlkObjOrConstantObj(init))</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; expandPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(init);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; {</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* initPN = pag-&gt;getGNode(init);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = pag-&gt;getBaseObj(init);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> maxLimit = obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">getMaxFieldOffsetLimit</a>();</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> initOffset;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *gepNode = SVFUtil::dyn_cast&lt;GepObjVar&gt;(initPN))</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; initOffset = gepNode-&gt;getConstantFieldIdx();</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;FIObjVar&gt;(initPN) || SVFUtil::isa&lt;DummyObjVar&gt;(initPN))</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; initOffset = 0;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Not an object node!!&quot;</span>);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;s32_t&gt;</a> offsets;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; offsets.insert(offset);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="comment">// calculate offsets</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordtype">bool</span> loopFlag = <span class="keyword">true</span>;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">while</span> (loopFlag)</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; {</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; loopFlag = <span class="keyword">false</span>;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> _f : offsets)</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> _s : strides)</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> _f1 = _f + _s;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; loopFlag = (offsets.find(_f1) == offsets.end()) &amp;&amp; ( (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>)(initOffset + _f1) &lt; maxLimit);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span> (loopFlag)</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; offsets.insert(_f1);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="comment">// get gep objs</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> _f : offsets)</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepId = consCG-&gt;getGepObjVar(init, <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(_f));</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; initials.erase(gepId); <span class="comment">// gep id in initials should be removed to avoid redundant derivation</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; expandPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(gepId);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;}</div><div class="ttc" id="classSVF_1_1MemObj_html"><div class="ttname"><a href="classSVF_1_1MemObj.html">SVF::MemObj</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00393">SymbolTableInfo.h:393</a></div></div>
69
+ <a href="AndersenSFR_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- AndersenSFR.cpp -- 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.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: 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">#include &quot;<a class="code" href="AndersenSFR_8h.html">WPA/AndersenSFR.h</a>&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="PointsTo_8h.html">MemoryModel/PointsTo.h</a>&quot;</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;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<a class="code" href="classSVF_1_1AndersenSFR.html">AndersenSFR</a> *<a class="code" href="classSVF_1_1AndersenSFR.html#abcf0f758174f224c5da066d0115beefb">AndersenSFR::sfrAndersen</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#a3b255068b3ea53041af94fd373a53bd4"> 41</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSFR.html#a3b255068b3ea53041af94fd373a53bd4">AndersenSFR::initialize</a>()</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;{</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="classSVF_1_1Andersen.html#a20617a69c112ad423b1b5021e48a8548">AndersenSCD::initialize</a>();</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; setPWCOpt(<span class="keyword">false</span>);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">if</span> (!csc)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; csc = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CSC.html">CSC</a>(_graph, scc);</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="comment">// detect and collapse cycles that only comprise copy edges</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; getSCCDetector()-&gt;find();</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; mergeSccCycle();</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#a7bb1bd307c5db4d732e51af810c5ad75"> 58</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSFR.html#a7bb1bd307c5db4d732e51af810c5ad75">AndersenSFR::PWCDetect</a>()</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;{</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="classSVF_1_1AndersenSCD.html#af155524f6f78424a846fe2eb575bb40a">AndersenSCD::PWCDetect</a>();</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; csc-&gt;find(getSCCDetector()-&gt;topoNodeStack());</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;}</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#ac5f406db5610347564fceff4d36f6a6f"> 68</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenSFR.html#ac5f406db5610347564fceff4d36f6a6f">AndersenSFR::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="l00069"></a><span class="lineno"> 69</span>&#160;{</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = consCG-&gt;getConstraintNode(nodeId);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">if</span> (!node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a873ba0c14dc57bd603c4a6b4d73e4278">strides</a>.empty())</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* newRepNode = consCG-&gt;getConstraintNode(newRepId);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; newRepNode-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a873ba0c14dc57bd603c4a6b4d73e4278">strides</a> |= node-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a873ba0c14dc57bd603c4a6b4d73e4278">strides</a>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Andersen.html#ae6b1e54a389abc68994219e39539127e">AndersenSCD::mergeSrcToTgt</a>(nodeId, newRepId);</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;</div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#a654abe596f1f6f33e2373503af1f5038"> 83</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1AndersenSFR.html#a654abe596f1f6f33e2373503af1f5038">AndersenSFR::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="l00084"></a><span class="lineno"> 84</span>&#160;{</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* dst = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstId = dst-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">if</span> (!dst-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a873ba0c14dc57bd603c4a6b4d73e4278">strides</a>.empty() &amp;&amp; SVFUtil::isa&lt;NormalGepCGEdge&gt;(edge)) <span class="comment">// dst is in pwc</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> tmpDstPts;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> srcInits = pts - getPts(dstId);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">if</span> (!srcInits.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</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; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> sortSrcInits;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd : srcInits)</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; sortSrcInits.insert(ptd);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> offset = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1NormalGepCGEdge.html">NormalGepCGEdge</a>&gt;(edge)-&gt;getConstantFieldIdx();</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; fieldExpand(sortSrcInits, offset, dst-&gt;<a class="code" href="classSVF_1_1ConstraintNode.html#a873ba0c14dc57bd603c4a6b4d73e4278">strides</a>, tmpDstPts);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">if</span> (unionPts(dstId, tmpDstPts))</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; pushIntoWorklist(dstId);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Andersen.html#ac6b1efcaadfed48c226701ecf6bac55e">Andersen::processGepPts</a>(pts, edge);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;}</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="classSVF_1_1AndersenSFR.html#aa768e5cd0a762d17e2ec2baaad0486bf"> 119</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1AndersenSFR.html#aa768e5cd0a762d17e2ec2baaad0486bf">AndersenSFR::fieldExpand</a>(<a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a>&amp; initials, <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> offset, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; strides, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; expandPts)</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; numOfFieldExpand++;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">while</span> (!initials.empty())</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> init = *initials.begin();</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; initials.erase(init);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">if</span> (consCG-&gt;isBlkObjOrConstantObj(init))</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; expandPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(init);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; {</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* initPN = pag-&gt;getGNode(init);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = pag-&gt;getBaseObj(init);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> maxLimit = obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">getMaxFieldOffsetLimit</a>();</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> initOffset;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *gepNode = SVFUtil::dyn_cast&lt;GepObjVar&gt;(initPN))</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; initOffset = gepNode-&gt;getConstantFieldIdx();</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;FIObjVar&gt;(initPN) || SVFUtil::isa&lt;DummyObjVar&gt;(initPN))</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; initOffset = 0;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Not an object node!!&quot;</span>);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;s32_t&gt;</a> offsets;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; offsets.insert(offset);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="comment">// calculate offsets</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordtype">bool</span> loopFlag = <span class="keyword">true</span>;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">while</span> (loopFlag)</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; {</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; loopFlag = <span class="keyword">false</span>;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> _f : offsets)</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> _s : strides)</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> _f1 = _f + _s;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; loopFlag = (offsets.find(_f1) == offsets.end()) &amp;&amp; ( (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>)(initOffset + _f1) &lt; maxLimit);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span> (loopFlag)</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; offsets.insert(_f1);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="comment">// get gep objs</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> _f : offsets)</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepId = consCG-&gt;getGepObjVar(init, <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(_f));</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; initials.erase(gepId); <span class="comment">// gep id in initials should be removed to avoid redundant derivation</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; expandPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(gepId);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;}</div><div class="ttc" id="classSVF_1_1MemObj_html"><div class="ttname"><a href="classSVF_1_1MemObj.html">SVF::MemObj</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00392">SymbolTableInfo.h:392</a></div></div>
70
70
  <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#l00118">SVFBasicTypes.h:118</a></div></div>
71
71
  <div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
72
72
  <div class="ttc" id="classSVF_1_1NormalGepCGEdge_html"><div class="ttname"><a href="classSVF_1_1NormalGepCGEdge.html">SVF::NormalGepCGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00265">ConsGEdge.h:265</a></div></div>
@@ -84,7 +84,7 @@ $(function() {
84
84
  <div class="ttc" id="namespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set&lt; Key, Hash, KeyEqual, Allocator &gt; Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00101">SVFBasicTypes.h:101</a></div></div>
85
85
  <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#l00183">Andersen.cpp:183</a></div></div>
86
86
  <div class="ttc" id="classSVF_1_1PointsTo_html_ac4688413177b49b37dbbfd3ed188d59b"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">SVF::PointsTo::empty</a></div><div class="ttdeci">bool empty(void) const</div><div class="ttdoc">Returns true if set is empty. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00094">PointsTo.cpp:94</a></div></div>
87
- <div class="ttc" id="classSVF_1_1MemObj_html_a51be7ad70bc2c6a4230bd2f6b86bdc88"><div class="ttname"><a href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">SVF::MemObj::getMaxFieldOffsetLimit</a></div><div class="ttdeci">u32_t getMaxFieldOffsetLimit() const</div><div class="ttdoc">Get max field offset limit. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00662">SymbolTableInfo.cpp:662</a></div></div>
87
+ <div class="ttc" id="classSVF_1_1MemObj_html_a51be7ad70bc2c6a4230bd2f6b86bdc88"><div class="ttname"><a href="classSVF_1_1MemObj.html#a51be7ad70bc2c6a4230bd2f6b86bdc88">SVF::MemObj::getMaxFieldOffsetLimit</a></div><div class="ttdeci">u32_t getMaxFieldOffsetLimit() const</div><div class="ttdoc">Get max field offset limit. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00660">SymbolTableInfo.cpp:660</a></div></div>
88
88
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_a873ba0c14dc57bd603c4a6b4d73e4278"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a873ba0c14dc57bd603c4a6b4d73e4278">SVF::ConstraintNode::strides</a></div><div class="ttdeci">NodeBS strides</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00078">ConsGNode.h:78</a></div></div>
89
89
  <div class="ttc" id="classSVF_1_1GepObjVar_html"><div class="ttname"><a href="classSVF_1_1GepObjVar.html">SVF::GepObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00442">SVFVariables.h:442</a></div></div>
90
90
  <div class="ttc" id="PointsTo_8h_html"><div class="ttname"><a href="PointsTo_8h.html">PointsTo.h</a></div></div>
@@ -89,7 +89,7 @@ $(function() {
89
89
  <div class="ttc" id="classSVF_1_1PointsTo_1_1PointsToIterator_html"><div class="ttname"><a href="classSVF_1_1PointsTo_1_1PointsToIterator.html">SVF::PointsTo::PointsToIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00174">PointsTo.h:174</a></div></div>
90
90
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_ab1868f04de44f6fe1e9ac14f3d4ee56b"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#ab1868f04de44f6fe1e9ac14f3d4ee56b">SVF::ConstraintNode::const_iterator</a></div><div class="ttdeci">ConstraintEdge::ConstraintEdgeSetTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00045">ConsGNode.h:45</a></div></div>
91
91
  <div class="ttc" id="classSVF_1_1GenericEdge_html_ae6792506a0150a9400d635eceab7f9e7"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">SVF::GenericEdge::getSrcID</a></div><div class="ttdeci">NodeID getSrcID() const</div><div class="ttdoc">get methods of the components </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00073">GenericGraph.h:73</a></div></div>
92
- <div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00184">BasicTypes.h:184</a></div></div>
92
+ <div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00179">BasicTypes.h:179</a></div></div>
93
93
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a69aae96fc1c99bf108075e5061f50f9e"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a69aae96fc1c99bf108075e5061f50f9e">SVF::AndersenBase::numOfProcessedLoad</a></div><div class="ttdeci">static u32_t numOfProcessedLoad</div><div class="ttdoc">Number of processed Gep edge. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00125">Andersen.h:125</a></div></div>
94
94
  <div class="ttc" id="classSVF_1_1Andersen_html_a6c60b761ddf3d6bf08c8a9c3f6fd9f0b"><div class="ttname"><a href="classSVF_1_1Andersen.html#a6c60b761ddf3d6bf08c8a9c3f6fd9f0b">SVF::Andersen::updateCallGraph</a></div><div class="ttdeci">virtual bool updateCallGraph(const CallSiteToFunPtrMap &amp;callsites)</div><div class="ttdoc">Update call graph for the input indirect callsites. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00627">Andersen.cpp:627</a></div></div>
95
95
  <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>
@@ -97,7 +97,7 @@ $(function() {
97
97
  <div class="ttc" id="cuddInt_8c_html_a5beb39637a978181c7c17714ac96672e"><div class="ttname"><a href="cuddInt_8c.html#a5beb39637a978181c7c17714ac96672e">empty</a></div><div class="ttdeci">static DdNode * empty</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8c_source.html#l28567">cuddInt.c:28567</a></div></div>
98
98
  <div class="ttc" id="classSVF_1_1SVFVar_html"><div class="ttname"><a href="classSVF_1_1SVFVar.html">SVF::SVFVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00046">SVFVariables.h:46</a></div></div>
99
99
  <div class="ttc" id="classSVF_1_1Options_html_adfc1a5c6098d3867e29fc65ca9ffa1cc"><div class="ttname"><a href="classSVF_1_1Options.html#adfc1a5c6098d3867e29fc65ca9ffa1cc">SVF::Options::MaxFieldLimit</a></div><div class="ttdeci">static const llvm::cl::opt&lt; unsigned &gt; MaxFieldLimit</div><div class="ttdoc">Maximum number of field derivations for an object. </div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00038">Options.h:38</a></div></div>
100
- <div class="ttc" id="classSVF_1_1CallSite_html_ab36a6a35eea673d4bdca615efc4336b1"><div class="ttname"><a href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">SVF::CallSite::getInstruction</a></div><div class="ttdeci">CallBase * getInstruction() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00266">BasicTypes.h:266</a></div></div>
100
+ <div class="ttc" id="classSVF_1_1CallSite_html_ab36a6a35eea673d4bdca615efc4336b1"><div class="ttname"><a href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">SVF::CallSite::getInstruction</a></div><div class="ttdeci">CallBase * getInstruction() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00261">BasicTypes.h:261</a></div></div>
101
101
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a28c0ede7e4765d2a686fc8ae0f5641a4"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">SVF::SVFUtil::getSourceLoc</a></div><div class="ttdeci">std::string getSourceLoc(const Value *val)</div><div class="ttdoc">Return source code including line number and file name from debug information. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00269">SVFUtil.cpp:269</a></div></div>
102
102
  <div class="ttc" id="namespaceSVF_html_ac82022f3f81965c3ce9b26c299f537a7"><div class="ttname"><a href="namespaceSVF.html#ac82022f3f81965c3ce9b26c299f537a7">SVF::NodePairSet</a></div><div class="ttdeci">Set&lt; NodePair &gt; NodePairSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00119">SVFBasicTypes.h:119</a></div></div>
103
103
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a04acd871bd1b98cd9e83e395334ac130"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a04acd871bd1b98cd9e83e395334ac130">SVF::AndersenBase::numOfProcessedCopy</a></div><div class="ttdeci">static u32_t numOfProcessedCopy</div><div class="ttdoc">Number of processed Addr edge. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00123">Andersen.h:123</a></div></div>
@@ -140,7 +140,7 @@ $(function() {
140
140
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a6b7d0e57f741c446d0bf178939960143"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a6b7d0e57f741c446d0bf178939960143">SVF::AndersenBase::timeOfSCCDetection</a></div><div class="ttdeci">static double timeOfSCCDetection</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00131">Andersen.h:131</a></div></div>
141
141
  <div class="ttc" id="classSVF_1_1Steensgaard_html"><div class="ttname"><a href="classSVF_1_1Steensgaard.html">SVF::Steensgaard</a></div><div class="ttdef"><b>Definition:</b> <a href="Steensgaard_8h_source.html#l00020">Steensgaard.h:20</a></div></div>
142
142
  <div class="ttc" id="classSVF_1_1Options_html_a98a521e5c99c5248eae8f8234453b116"><div class="ttname"><a href="classSVF_1_1Options.html#a98a521e5c99c5248eae8f8234453b116">SVF::Options::ReadAnder</a></div><div class="ttdeci">static const llvm::cl::opt&lt; std ::string &gt; ReadAnder</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00234">Options.h:234</a></div></div>
143
- <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a145abbd2958629718fbca41d25c3124d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVF::SVFUtil::getCallee</a></div><div class="ttdeci">const SVFFunction * getCallee(const CallSite cs)</div><div class="ttdoc">Return callee of a callsite. Return null if this is an indirect call. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00268">SVFUtil.h:268</a></div></div>
143
+ <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a145abbd2958629718fbca41d25c3124d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVF::SVFUtil::getCallee</a></div><div class="ttdeci">const SVFFunction * getCallee(const CallSite cs)</div><div class="ttdoc">Return callee of a callsite. Return null if this is an indirect call. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00263">SVFUtil.h:263</a></div></div>
144
144
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_a0ffe4f1ca1a6f70466cc1c6b3b12c90d"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a0ffe4f1ca1a6f70466cc1c6b3b12c90d">SVF::ConstraintNode::isPWCNode</a></div><div class="ttdeci">bool isPWCNode() const</div><div class="ttdoc">Whether a node involves in PWC, if so, all its points-to elements should become field-insensitive. </div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00094">ConsGNode.h:94</a></div></div>
145
145
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_a8d58f5224728bb6811f12c94826167f6"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a8d58f5224728bb6811f12c94826167f6">SVF::ConstraintNode::incomingStoresEnd</a></div><div class="ttdeci">const_iterator incomingStoresEnd() const</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00287">ConsGNode.h:287</a></div></div>
146
146
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
@@ -148,7 +148,7 @@ $(function() {
148
148
  <div class="ttc" id="classSVF_1_1GepObjVar_html"><div class="ttname"><a href="classSVF_1_1GepObjVar.html">SVF::GepObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00442">SVFVariables.h:442</a></div></div>
149
149
  <div class="ttc" id="classSVF_1_1PointsTo_html_a6c1885ddfcc72604463f7c4ea94d2f74"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a6c1885ddfcc72604463f7c4ea94d2f74">SVF::PointsTo::getCurrentBestNodeMapping</a></div><div class="ttdeci">static MappingPtr getCurrentBestNodeMapping(void)</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00345">PointsTo.cpp:345</a></div></div>
150
150
  <div class="ttc" id="PointsTo_8h_html"><div class="ttname"><a href="PointsTo_8h.html">PointsTo.h</a></div></div>
151
- <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a19b96a872d9096037f20e25122e469ea"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a19b96a872d9096037f20e25122e469ea">SVF::SVFUtil::isHeapAllocExtFunViaRet</a></div><div class="ttdeci">bool isHeapAllocExtFunViaRet(const SVFFunction *fun)</div><div class="ttdoc">Return true if the call is a heap allocator/reallocator. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00084">LLVMUtil.h:84</a></div></div>
151
+ <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a19b96a872d9096037f20e25122e469ea"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a19b96a872d9096037f20e25122e469ea">SVF::SVFUtil::isHeapAllocExtFunViaRet</a></div><div class="ttdeci">bool isHeapAllocExtFunViaRet(const SVFFunction *fun)</div><div class="ttdoc">Return true if the call is a heap allocator/reallocator. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00097">LLVMUtil.h:97</a></div></div>
152
152
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a28a1c3571cdee5e05004b29ace364e67"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a28a1c3571cdee5e05004b29ace364e67">SVF::AndersenBase::finalize</a></div><div class="ttdeci">virtual void finalize() override</div><div class="ttdoc">Finalize analysis. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00088">Andersen.cpp:88</a></div></div>
153
153
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a7486fd8e5350879ed1cbd835c0d4e191"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">SVF::SVFUtil::value2String</a></div><div class="ttdeci">const std::string value2String(const Value *value)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00390">SVFUtil.cpp:390</a></div></div>
154
154
  <div class="ttc" id="classSVF_1_1Andersen_html_ac4afe532655c3f311143ebbe15175ca2"><div class="ttname"><a href="classSVF_1_1Andersen.html#ac4afe532655c3f311143ebbe15175ca2">SVF::Andersen::processCopy</a></div><div class="ttdeci">virtual bool processCopy(NodeID node, const ConstraintEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00360">Andersen.cpp:360</a></div></div>
@@ -174,17 +174,17 @@ $(function() {
174
174
  <div class="ttc" id="classSVF_1_1Options_html_a69579e2f37962afdbb292a36782511ed"><div class="ttname"><a href="classSVF_1_1Options.html#a69579e2f37962afdbb292a36782511ed">SVF::Options::MergePWC</a></div><div class="ttdeci">static const llvm::cl::opt&lt; bool &gt; MergePWC</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00236">Options.h:236</a></div></div>
175
175
  <div class="ttc" id="classSVF_1_1CallICFGNode_html"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00364">ICFGNode.h:364</a></div></div>
176
176
  <div class="ttc" id="Steensgaard_8h_html"><div class="ttname"><a href="Steensgaard_8h.html">Steensgaard.h</a></div></div>
177
- <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a202de7ad2bea0311e2f75894c030e7a9"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVF::SVFUtil::getLLVMCallSite</a></div><div class="ttdeci">CallSite getLLVMCallSite(const Instruction *inst)</div><div class="ttdoc">Return LLVM callsite given a instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00219">SVFUtil.h:219</a></div></div>
177
+ <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a202de7ad2bea0311e2f75894c030e7a9"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVF::SVFUtil::getLLVMCallSite</a></div><div class="ttdeci">CallSite getLLVMCallSite(const Instruction *inst)</div><div class="ttdoc">Return LLVM callsite given a instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00214">SVFUtil.h:214</a></div></div>
178
178
  <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#l00389">Andersen.cpp:389</a></div></div>
179
179
  <div class="ttc" id="classSVF_1_1AndersenBase_html_abd73e930450b7c605f478672bdf9bdae"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#abd73e930450b7c605f478672bdf9bdae">SVF::AndersenBase::MaxPointsToSetSize</a></div><div class="ttdeci">static u32_t MaxPointsToSetSize</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00135">Andersen.h:135</a></div></div>
180
180
  <div class="ttc" id="classSVF_1_1Andersen_html_ad90c8cf193bd81870ce8dd88c9580e2c"><div class="ttname"><a href="classSVF_1_1Andersen.html#ad90c8cf193bd81870ce8dd88c9580e2c">SVF::Andersen::finalize</a></div><div class="ttdeci">virtual void finalize()</div><div class="ttdoc">Finalize analysis. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00199">Andersen.cpp:199</a></div></div>
181
181
  <div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="ContextDDA_8h_source.html#l00016">ContextDDA.h:16</a></div></div>
182
182
  <div class="ttc" id="classSVF_1_1AndersenBase_html_adaf738bee77a4b1fbb8d42911fabdb49"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#adaf738bee77a4b1fbb8d42911fabdb49">SVF::AndersenBase::AveragePointsToSetSize</a></div><div class="ttdeci">static u32_t AveragePointsToSetSize</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00134">Andersen.h:134</a></div></div>
183
- <div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00259">BasicTypes.h:259</a></div></div>
183
+ <div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00254">BasicTypes.h:254</a></div></div>
184
184
  <div class="ttc" id="classSVF_1_1Options_html_a8459d43a21bcf8a50fc55d14fcf5a81e"><div class="ttname"><a href="classSVF_1_1Options.html#a8459d43a21bcf8a50fc55d14fcf5a81e">SVF::Options::ClusterAnder</a></div><div class="ttdeci">static const llvm::cl::opt&lt; bool &gt; ClusterAnder</div><div class="ttdoc">Whether to stage Andersen&amp;#39;s with Steensgaard and cluster based on that data. </div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00041">Options.h:41</a></div></div>
185
185
  <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#l00109">PointerAnalysis.h:109</a></div></div>
186
186
  <div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00165">GenericGraph.h:165</a></div></div>
187
- <div class="ttc" id="classSVF_1_1CallSite_html_a9b7d53a345875e4e6c72eb23ac6475de"><div class="ttname"><a href="classSVF_1_1CallSite.html#a9b7d53a345875e4e6c72eb23ac6475de">SVF::CallSite::getType</a></div><div class="ttdeci">Type * getType() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00269">BasicTypes.h:269</a></div></div>
187
+ <div class="ttc" id="classSVF_1_1CallSite_html_a9b7d53a345875e4e6c72eb23ac6475de"><div class="ttname"><a href="classSVF_1_1CallSite.html#a9b7d53a345875e4e6c72eb23ac6475de">SVF::CallSite::getType</a></div><div class="ttdeci">Type * getType() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00264">BasicTypes.h:264</a></div></div>
188
188
  <div class="ttc" id="classSVF_1_1LocationSet_html"><div class="ttname"><a href="classSVF_1_1LocationSet.html">SVF::LocationSet</a></div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00048">LocationSet.h:48</a></div></div>
189
189
  <div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00092">SVFBasicTypes.h:92</a></div></div>
190
190
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_a19c1ed324f65f4cc58dd2fd21ed4a971"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#a19c1ed324f65f4cc58dd2fd21ed4a971">SVF::ConstraintNode::incomingAddrsBegin</a></div><div class="ttdeci">const_iterator incomingAddrsBegin() const</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00249">ConsGNode.h:249</a></div></div>
@@ -194,7 +194,7 @@ $(function() {
194
194
  <div class="ttc" id="classSVF_1_1AndersenBase_html_ad40b196c2c699bd115529b806d20de25"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#ad40b196c2c699bd115529b806d20de25">SVF::AndersenBase::timeOfCollapse</a></div><div class="ttdeci">static double timeOfCollapse</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00133">Andersen.h:133</a></div></div>
195
195
  <div class="ttc" id="classSVF_1_1Options_html_a620fe156ba70f997eace0ccb0d2c9f67"><div class="ttname"><a href="classSVF_1_1Options.html#a620fe156ba70f997eace0ccb0d2c9f67">SVF::Options::AnderTimeLimit</a></div><div class="ttdeci">static const llvm::cl::opt&lt; unsigned &gt; AnderTimeLimit</div><div class="ttdoc">Time limit for the Andersen&amp;#39;s analyses. </div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00075">Options.h:75</a></div></div>
196
196
  <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>
197
- <div class="ttc" id="classSVF_1_1SVFFunction_html_a3c1fa59deae39c75c72c97e47326d982"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#a3c1fa59deae39c75c72c97e47326d982">SVF::SVFFunction::isVarArg</a></div><div class="ttdeci">bool isVarArg() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00226">BasicTypes.h:226</a></div></div>
197
+ <div class="ttc" id="classSVF_1_1SVFFunction_html_a3c1fa59deae39c75c72c97e47326d982"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#a3c1fa59deae39c75c72c97e47326d982">SVF::SVFFunction::isVarArg</a></div><div class="ttdeci">bool isVarArg() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00221">BasicTypes.h:221</a></div></div>
198
198
  <div class="ttc" id="classSVF_1_1ConstraintNode_html_ae8ac9ad8e766b961c7ce06d7219f37af"><div class="ttname"><a href="classSVF_1_1ConstraintNode.html#ae8ac9ad8e766b961c7ce06d7219f37af">SVF::ConstraintNode::incomingAddrsEnd</a></div><div class="ttdeci">const_iterator incomingAddrsEnd() const</div><div class="ttdef"><b>Definition:</b> <a href="ConsGNode_8h_source.html#l00253">ConsGNode.h:253</a></div></div>
199
199
  <div class="ttc" id="classSVF_1_1Andersen_html_ac86ffd334568e4df5c08b3c827018bef"><div class="ttname"><a href="classSVF_1_1Andersen.html#ac86ffd334568e4df5c08b3c827018bef">SVF::Andersen::mergeSccCycle</a></div><div class="ttdeci">void mergeSccCycle()</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8cpp_source.html#l00480">Andersen.cpp:480</a></div></div>
200
200
  <div class="ttc" id="classSVF_1_1AndersenStat_html"><div class="ttname"><a href="classSVF_1_1AndersenStat.html">SVF::AndersenStat</a></div><div class="ttdef"><b>Definition:</b> <a href="WPAStat_8h_source.html#l00048">WPAStat.h:48</a></div></div>
@@ -98,7 +98,7 @@ $(function() {
98
98
  <div class="ttc" id="classSVF_1_1AndersenHCD_html_ab0414e29a745ed14e790c296042d1fe9"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#ab0414e29a745ed14e790c296042d1fe9">SVF::AndersenHCD::isaMergedNode</a></div><div class="ttdeci">bool isaMergedNode(NodeID node) const</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00601">Andersen.h:601</a></div></div>
99
99
  <div class="ttc" id="classSVF_1_1Andersen_html_a2f88b6035ecb480f7d11afe6bc666541"><div class="ttname"><a href="classSVF_1_1Andersen.html#a2f88b6035ecb480f7d11afe6bc666541">SVF::Andersen::callsite2DummyValPN</a></div><div class="ttdeci">CallSite2DummyValPN callsite2DummyValPN</div><div class="ttdoc">Map an instruction to a dummy obj which created at an indirect callsite, which invokes a heap allocat...</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00261">Andersen.h:261</a></div></div>
100
100
  <div class="ttc" id="classSVF_1_1DiffPTData_html_a0f422f826bb378ebb34199f0378e351d"><div class="ttname"><a href="classSVF_1_1DiffPTData.html#a0f422f826bb378ebb34199f0378e351d">SVF::DiffPTData::updatePropaPtsMap</a></div><div class="ttdeci">virtual void updatePropaPtsMap(Key &amp;src, Key &amp;dst)=0</div></div>
101
- <div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00184">BasicTypes.h:184</a></div></div>
101
+ <div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00179">BasicTypes.h:179</a></div></div>
102
102
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a69aae96fc1c99bf108075e5061f50f9e"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a69aae96fc1c99bf108075e5061f50f9e">SVF::AndersenBase::numOfProcessedLoad</a></div><div class="ttdeci">static u32_t numOfProcessedLoad</div><div class="ttdoc">Number of processed Gep edge. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00125">Andersen.h:125</a></div></div>
103
103
  <div class="ttc" id="classSVF_1_1WPASolver_html_a138b403af0370ad6fdf8cc6af0530392"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a138b403af0370ad6fdf8cc6af0530392">SVF::WPASolver::collapsePWCNode</a></div><div class="ttdeci">virtual void collapsePWCNode(NodeID)</div><div class="ttdoc">collapse positive weight cycles of a graph </div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00129">WPASolver.h:129</a></div></div>
104
104
  <div class="ttc" id="classSVF_1_1AndersenHCD_html_a33cb18543abbcd434861c5da7e588356"><div class="ttname"><a href="classSVF_1_1AndersenHCD.html#a33cb18543abbcd434861c5da7e588356">SVF::AndersenHCD::OSCC</a></div><div class="ttdeci">SCCDetection&lt; OfflineConsG * &gt; OSCC</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00552">Andersen.h:552</a></div></div>
@@ -212,7 +212,7 @@ $(function() {
212
212
  <div class="ttc" id="classSVF_1_1Andersen_html_a8ba593bd16d4436310f2f25e75687c57"><div class="ttname"><a href="classSVF_1_1Andersen.html#a8ba593bd16d4436310f2f25e75687c57">SVF::Andersen::addCopyEdge</a></div><div class="ttdeci">virtual bool addCopyEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add copy edge on constraint graph. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00328">Andersen.h:328</a></div></div>
213
213
  <div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="ContextDDA_8h_source.html#l00016">ContextDDA.h:16</a></div></div>
214
214
  <div class="ttc" id="classSVF_1_1AndersenBase_html_adaf738bee77a4b1fbb8d42911fabdb49"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#adaf738bee77a4b1fbb8d42911fabdb49">SVF::AndersenBase::AveragePointsToSetSize</a></div><div class="ttdeci">static u32_t AveragePointsToSetSize</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00134">Andersen.h:134</a></div></div>
215
- <div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00259">BasicTypes.h:259</a></div></div>
215
+ <div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00254">BasicTypes.h:254</a></div></div>
216
216
  <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#l00109">PointerAnalysis.h:109</a></div></div>
217
217
  <div class="ttc" id="classSVF_1_1DiffPTData_html_a7784c4a76aa41149975840af8b32c2a9"><div class="ttname"><a href="classSVF_1_1DiffPTData.html#a7784c4a76aa41149975840af8b32c2a9">SVF::DiffPTData::clearPropaPts</a></div><div class="ttdeci">virtual void clearPropaPts(Key &amp;var)=0</div><div class="ttdoc">Clear propagated points-to set of var. </div></div>
218
218
  <div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00092">SVFBasicTypes.h:92</a></div></div>
@@ -67,7 +67,7 @@ $(function() {
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
69
  <a href="BreakConstantExpr_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/* SVF - Static Value-Flow Analysis Framework</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">Copyright (C) 2015 Yulei Sui</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">Copyright (C) 2015 Jingling Xue</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">This library is free software; you can redistribute it and/or</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">modify it under the terms of the GNU Lesser General Public</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">License as published by the Free Software Foundation; either</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">version 2.1 of the License, or (at your option) any later version.</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">This library is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">Lesser General Public License for more details.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">You should have received a copy of the GNU Lesser General Public</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">License along with this library; if not, write to the Free Software</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment">Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</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"> * BreakConstantExpr.cpp</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment"> * Created on: Oct 8, 2013</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * Author: Yulei Sui</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;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment">//===- BreakConstantGEPs.cpp - Change constant GEPs into GEP instructions - --//</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment">// The SAFECode Compiler</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment">// This file was developed by the LLVM research group and is distributed under</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment">// the University of Illinois Open Source License. See LICENSE.TXT for details.</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment">// This pass changes all GEP constant expressions into GEP instructions. This</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="comment">// permits the rest of SAFECode to put run-time checks on them if necessary.</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="BreakConstantExpr_8cpp.html#ad78e062f62e0d6e453941fb4ca843e4d"> 43</a></span>&#160;<span class="preprocessor">#define DEBUG_TYPE &quot;break-constgeps&quot;</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#include &quot;llvm/ADT/Statistic.h&quot;</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#include &quot;llvm/IR/Constants.h&quot;</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#include &quot;llvm/IR/InstrTypes.h&quot;</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor">#include &quot;llvm/IR/Instruction.h&quot;</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="preprocessor">#include &quot;llvm/IR/Instructions.h&quot;</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#include &quot;llvm/IR/LLVMContext.h&quot;</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#include &quot;llvm/IR/InstIterator.h&quot;</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVF-FE_2BasicTypes_8h.html">SVF-FE/BasicTypes.h</a>&quot;</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="BreakConstantExpr_8h.html">SVF-FE/BreakConstantExpr.h</a>&quot;</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment">// Identifier variable for the pass</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="keywordtype">char</span> <a class="code" href="classSVF_1_1BreakConstantGEPs.html#a8010c4f5824ed5ebcb7ae283473ada22">BreakConstantGEPs::ID</a> = 0;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="keywordtype">char</span> <a class="code" href="classSVF_1_1MergeFunctionRets.html#a7a763ae6c9d3c72345495f01b0b4b458">MergeFunctionRets::ID</a> = 0;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="comment">// Statistics</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<a class="code" href="BreakConstantExpr_8cpp.html#a53fcf89c33901a1e4bf09351eb612a6a">STATISTIC</a> (GEPChanges, <span class="stringliteral">&quot;Number of Converted GEP Constant Expressions&quot;</span>);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<a class="code" href="BreakConstantExpr_8cpp.html#a53fcf89c33901a1e4bf09351eb612a6a">STATISTIC</a> (TotalChanges, <span class="stringliteral">&quot;Number of Converted Constant Expressions&quot;</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment">// Function: hasConstantGEP()</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment">// Description:</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment">// This function determines whether the given value is a constant expression</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment">// that has a constant GEP expression embedded within it.</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment">// Inputs:</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment">// V - The value to check.</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment">// Return value:</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment">// nullptr - This value is not a constant expression with a constant expression</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment">// GEP within it.</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment">// ~nullptr - A pointer to the value casted into a ConstantExpr is returned.</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="keyword">static</span> <a class="code" href="SVF-FE_2BasicTypes_8h.html#a60115de303225d173fb935cf7619a2cb">ConstantExpr</a> *</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="BreakConstantExpr_8cpp.html#a81381bb19688464256bd09ef22e965e4"> 85</a></span>&#160;<a class="code" href="BreakConstantExpr_8cpp.html#a81381bb19688464256bd09ef22e965e4">hasConstantGEP</a> (<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> * V)</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;{</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="SVF-FE_2BasicTypes_8h.html#a60115de303225d173fb935cf7619a2cb">ConstantExpr</a> * CE = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(V))</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; {</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">if</span> (CE-&gt;getOpcode() == Instruction::GetElementPtr)</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">return</span> CE;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">else</span></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; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> index = 0; index &lt; CE-&gt;getNumOperands(); ++index)</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="BreakConstantExpr_8cpp.html#a81381bb19688464256bd09ef22e965e4">hasConstantGEP</a> (CE-&gt;getOperand(index)))</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">return</span> CE;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; }</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;}</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="comment">// Function: convertExpression()</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="comment">// Description:</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="comment">// Convert a constant expression into an instruction. This routine does *not*</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="comment">// perform any recursion, so the resulting instruction may have constant</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="comment">// expression operands.</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="keyword">static</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *</div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="BreakConstantExpr_8cpp.html#a25cf7d9aff084a1cd1aa51c85a4a17e1"> 116</a></span>&#160;<a class="code" href="BreakConstantExpr_8cpp.html#a25cf7d9aff084a1cd1aa51c85a4a17e1">convertExpression</a> (<a class="code" href="SVF-FE_2BasicTypes_8h.html#a60115de303225d173fb935cf7619a2cb">ConstantExpr</a> * CE, <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> * InsertPt)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;{</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="comment">// Convert this constant expression into a regular instruction.</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">if</span> (CE-&gt;getOpcode() == Instruction::GetElementPtr)</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; ++GEPChanges;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; ++TotalChanges;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* Result = CE-&gt;getAsInstruction();</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; Result-&gt;insertBefore(InsertPt);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">return</span> Result;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;}</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="comment">// Method: runOnFunction()</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="comment">// Description:</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;<span class="comment">// Entry point for this LLVM pass.</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="comment">// Return value:</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="comment">// true - The function was modified.</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="comment">// false - The function was not modified.</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="keywordtype">bool</span></div><div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="classSVF_1_1BreakConstantGEPs.html#ae99ceb7923161d54e7d0a687f4f68e1a"> 140</a></span>&#160;<a class="code" href="classSVF_1_1BreakConstantGEPs.html#ae99ceb7923161d54e7d0a687f4f68e1a">BreakConstantGEPs::runOnModule</a> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp; module)</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="keywordtype">bool</span> modified = <span class="keyword">false</span>;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">for</span> (Module::iterator F = module.begin(), E = module.end(); F != E; ++F)</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="comment">// Worklist of values to check for constant GEP expressions</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; std::vector&lt;Instruction *&gt; Worklist;</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; <span class="comment">//</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">// Initialize the worklist by finding all instructions that have one or more</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="comment">// operands containing a constant GEP expression.</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">for</span> (Function::iterator BB = (*F).begin(); BB != (*F).end(); ++BB)</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">for</span> (BasicBlock::iterator i = BB-&gt;begin(); i != BB-&gt;end(); ++i)</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; <span class="comment">//</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="comment">// Scan through the operands of this instruction. If it is a constant</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="comment">// expression GEP, insert an instruction GEP before the instruction.</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> * I = &amp;(*i);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> index = 0; index &lt; I-&gt;getNumOperands(); ++index)</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="BreakConstantExpr_8cpp.html#a81381bb19688464256bd09ef22e965e4">hasConstantGEP</a> (I-&gt;getOperand(index)))</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; {</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; Worklist.push_back (I);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; }</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="comment">// Determine whether we will modify anything.</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">if</span> (Worklist.size()) modified = <span class="keyword">true</span>;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="comment">// While the worklist is not empty, take an item from it, convert the</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="comment">// operands into instructions if necessary, and determine if the newly</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="comment">// added instructions need to be processed as well.</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">while</span> (Worklist.size())</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> * I = Worklist.back();</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; Worklist.pop_back();</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="comment">// Scan through the operands of this instruction and convert each into an</span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="comment">// instruction. Note that this works a little differently for phi</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="comment">// instructions because the new instruction must be added to the</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="comment">// appropriate predecessor block.</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="SVF-FE_2BasicTypes_8h.html#a65732ea63bff4b444b225629ee7cf252">PHINode</a> * PHI = SVFUtil::dyn_cast&lt;PHINode&gt;(I))</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; {</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> index = 0; index &lt; PHI-&gt;getNumIncomingValues(); ++index)</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="comment">// For PHI Nodes, if an operand is a constant expression with a GEP, we</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="comment">// want to insert the new instructions in the predecessor basic block.</span></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="comment">// Note: It seems that it&#39;s possible for a phi to have the same</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="comment">// incoming basic block listed multiple times; this seems okay as long</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="comment">// the same value is listed for the incoming block.</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> * InsertPt = PHI-&gt;getIncomingBlock(index)-&gt;getTerminator();</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="SVF-FE_2BasicTypes_8h.html#a60115de303225d173fb935cf7619a2cb">ConstantExpr</a> * CE = <a class="code" href="BreakConstantExpr_8cpp.html#a81381bb19688464256bd09ef22e965e4">hasConstantGEP</a> (PHI-&gt;getIncomingValue(index)))</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> * NewInst = <a class="code" href="BreakConstantExpr_8cpp.html#a25cf7d9aff084a1cd1aa51c85a4a17e1">convertExpression</a> (CE, InsertPt);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i2 = index; i2 &lt; PHI-&gt;getNumIncomingValues(); ++i2)</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; {</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">if</span> ((PHI-&gt;getIncomingBlock (i2)) == PHI-&gt;getIncomingBlock (index))</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; PHI-&gt;setIncomingValue (i2, NewInst);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; Worklist.push_back (NewInst);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> index = 0; index &lt; I-&gt;getNumOperands(); ++index)</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="comment">// For other instructions, we want to insert instructions replacing</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="comment">// constant expressions immediently before the instruction using the</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="comment">// constant expression.</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="SVF-FE_2BasicTypes_8h.html#a60115de303225d173fb935cf7619a2cb">ConstantExpr</a> * CE = <a class="code" href="BreakConstantExpr_8cpp.html#a81381bb19688464256bd09ef22e965e4">hasConstantGEP</a> (I-&gt;getOperand(index)))</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; {</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> * NewInst = <a class="code" href="BreakConstantExpr_8cpp.html#a25cf7d9aff084a1cd1aa51c85a4a17e1">convertExpression</a> (CE, I);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; I-&gt;replaceUsesOfWith (CE, NewInst);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; Worklist.push_back (NewInst);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; }</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; }</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">return</span> modified;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;}</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;</div><div class="ttc" id="namespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00081">BasicTypes.h:81</a></div></div>
70
- <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a65732ea63bff4b444b225629ee7cf252"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a65732ea63bff4b444b225629ee7cf252">PHINode</a></div><div class="ttdeci">llvm::PHINode PHINode</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00041">BasicTypes.h:41</a></div></div>
70
+ <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a65732ea63bff4b444b225629ee7cf252"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a65732ea63bff4b444b225629ee7cf252">PHINode</a></div><div class="ttdeci">llvm::PHINode PHINode</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00045">BasicTypes.h:45</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1BreakConstantGEPs_html_a8010c4f5824ed5ebcb7ae283473ada22"><div class="ttname"><a href="classSVF_1_1BreakConstantGEPs.html#a8010c4f5824ed5ebcb7ae283473ada22">SVF::BreakConstantGEPs::ID</a></div><div class="ttdeci">static char ID</div><div class="ttdef"><b>Definition:</b> <a href="BreakConstantExpr_8h_source.html#l00038">BreakConstantExpr.h:38</a></div></div>
72
72
  <div class="ttc" id="BreakConstantExpr_8cpp_html_a53fcf89c33901a1e4bf09351eb612a6a"><div class="ttname"><a href="BreakConstantExpr_8cpp.html#a53fcf89c33901a1e4bf09351eb612a6a">STATISTIC</a></div><div class="ttdeci">STATISTIC(GEPChanges, &quot;Number of Converted GEP Constant Expressions&quot;)</div></div>
73
73
  <div class="ttc" id="SVF-FE_2BasicTypes_8h_html_a60115de303225d173fb935cf7619a2cb"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html#a60115de303225d173fb935cf7619a2cb">ConstantExpr</a></div><div class="ttdeci">llvm::ConstantExpr ConstantExpr</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00027">BasicTypes.h:27</a></div></div>