svf-tools 1.0.583 → 1.0.585

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 (210) hide show
  1. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +3 -3
  2. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp.html +1 -1
  3. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +3 -3
  4. package/SVF-doxygen/html/html/BreakConstantExpr_8h_source.html +3 -3
  5. package/SVF-doxygen/html/html/CFLAlias_8h_source.html +1 -1
  6. package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +3 -3
  7. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +6 -6
  8. package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +1 -1
  9. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +2 -2
  10. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +2 -2
  11. package/SVF-doxygen/html/html/ConsG_8h_source.html +8 -8
  12. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +3 -3
  13. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +14 -14
  14. package/SVF-doxygen/html/html/DCHG_8h_source.html +5 -5
  15. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +2 -2
  16. package/SVF-doxygen/html/html/DDAClient_8h_source.html +2 -2
  17. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +3 -3
  18. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +1 -1
  19. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +8 -8
  20. package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +5 -5
  21. package/SVF-doxygen/html/html/DataFlowUtil_8h_source.html +7 -7
  22. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +3 -3
  23. package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h_source.html +1 -1
  24. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +14 -10
  25. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +9 -9
  26. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +35 -42
  27. package/SVF-doxygen/html/html/ICFG_8h_source.html +29 -28
  28. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +3 -3
  29. package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +2 -2
  30. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +12 -12
  31. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +2 -2
  32. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +8 -8
  33. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +4 -4
  34. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +5 -5
  35. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +1 -1
  36. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +5 -5
  37. package/SVF-doxygen/html/html/MHP_8cpp.html +1 -1
  38. package/SVF-doxygen/html/html/MHP_8cpp_source.html +6 -6
  39. package/SVF-doxygen/html/html/MHP_8h_source.html +2 -2
  40. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +4 -4
  41. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +4 -4
  42. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +1 -1
  43. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +1 -1
  44. package/SVF-doxygen/html/html/MTA_8cpp_source.html +5 -5
  45. package/SVF-doxygen/html/html/MTA_8h_source.html +4 -4
  46. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +15 -15
  47. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +2 -2
  48. package/SVF-doxygen/html/html/PCG_8cpp_source.html +1 -1
  49. package/SVF-doxygen/html/html/PCG_8h_source.html +1 -1
  50. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +5 -5
  51. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +2 -2
  52. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +5 -5
  53. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +12 -12
  54. package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h.html +1 -0
  55. package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h_source.html +85 -85
  56. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +4 -4
  57. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +12 -12
  58. package/SVF-doxygen/html/html/SVFG_8h_source.html +5 -5
  59. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +30 -27
  60. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +95 -95
  61. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +40 -44
  62. package/SVF-doxygen/html/html/SVFIR_8h_source.html +112 -109
  63. package/SVF-doxygen/html/html/SVFStat_8cpp_source.html +6 -6
  64. package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +1 -1
  65. package/SVF-doxygen/html/html/SaberCondAllocator_8h_source.html +2 -2
  66. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +4 -4
  67. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +2 -2
  68. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +16 -16
  69. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +1 -1
  70. package/SVF-doxygen/html/html/TCT_8cpp_source.html +4 -4
  71. package/SVF-doxygen/html/html/TCT_8h_source.html +4 -4
  72. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
  73. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -2
  74. package/SVF-doxygen/html/html/VFG_8cpp_source.html +15 -15
  75. package/SVF-doxygen/html/html/VFG_8h_source.html +9 -9
  76. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +3 -3
  77. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +3 -3
  78. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +4 -4
  79. package/SVF-doxygen/html/html/WPAPass_8h_source.html +1 -1
  80. package/SVF-doxygen/html/html/cfl_8cpp.html +1 -2
  81. package/SVF-doxygen/html/html/cfl_8cpp_source.html +2 -2
  82. package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +1 -1
  83. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +18 -18
  84. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +1 -1
  85. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +1 -1
  86. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +3 -3
  87. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +9 -9
  88. package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +3 -3
  89. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +18 -18
  90. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +10 -10
  91. package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +2 -2
  92. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +2 -2
  93. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +8 -8
  94. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +3 -3
  95. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +47 -47
  96. package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +3 -3
  97. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +3 -4
  98. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +1 -1
  99. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +10 -10
  100. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +1 -1
  101. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +5 -5
  102. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +4 -4
  103. package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +4 -4
  104. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +1 -1
  105. package/SVF-doxygen/html/html/classSVF_1_1ICFG-members.html +78 -77
  106. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +111 -86
  107. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +42 -36
  108. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter-members.html +68 -67
  109. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +3 -1
  110. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +8 -8
  111. package/SVF-doxygen/html/html/classSVF_1_1IteratedDominanceFrontier.html +2 -2
  112. package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +2 -2
  113. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +16 -16
  114. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +5 -5
  115. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +1 -1
  116. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +5 -5
  117. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +2 -2
  118. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +20 -20
  119. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +4 -5
  120. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +4 -4
  121. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +6 -6
  122. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +1 -1
  123. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +6 -6
  124. package/SVF-doxygen/html/html/classSVF_1_1MergeFunctionRets.html +1 -1
  125. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +12 -12
  126. package/SVF-doxygen/html/html/classSVF_1_1PCG.html +2 -2
  127. package/SVF-doxygen/html/html/classSVF_1_1PTACFInfoBuilder.html +4 -4
  128. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +21 -21
  129. package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +1 -1
  130. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +23 -23
  131. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +5 -5
  132. package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +15 -12
  133. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +355 -268
  134. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +3 -3
  135. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +232 -224
  136. package/SVF-doxygen/html/html/classSVF_1_1SVFStat.html +6 -6
  137. package/SVF-doxygen/html/html/classSVF_1_1SaberCondAllocator.html +3 -3
  138. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +4 -4
  139. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +1 -2
  140. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +19 -19
  141. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +3 -3
  142. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +1 -1
  143. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +2 -2
  144. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +2 -2
  145. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +30 -30
  146. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +5 -5
  147. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +4 -4
  148. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +7 -8
  149. package/SVF-doxygen/html/html/functions_a.html +8 -5
  150. package/SVF-doxygen/html/html/functions_b.html +1 -1
  151. package/SVF-doxygen/html/html/functions_func.html +12 -9
  152. package/SVF-doxygen/html/html/functions_func_b.html +1 -1
  153. package/SVF-doxygen/html/html/functions_func_i.html +3 -3
  154. package/SVF-doxygen/html/html/functions_func_s.html +15 -11
  155. package/SVF-doxygen/html/html/functions_i.html +2 -2
  156. package/SVF-doxygen/html/html/functions_l.html +8 -8
  157. package/SVF-doxygen/html/html/functions_n.html +3 -3
  158. package/SVF-doxygen/html/html/functions_o.html +11 -11
  159. package/SVF-doxygen/html/html/functions_p.html +16 -12
  160. package/SVF-doxygen/html/html/functions_r.html +1 -1
  161. package/SVF-doxygen/html/html/functions_s.html +22 -19
  162. package/SVF-doxygen/html/html/functions_t.html +7 -7
  163. package/SVF-doxygen/html/html/functions_v.html +3 -3
  164. package/SVF-doxygen/html/html/functions_vars_s.html +2 -1
  165. package/SVF-doxygen/html/html/namespaceSVF.html +86 -86
  166. package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +22 -22
  167. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +5 -5
  168. package/SVF-doxygen/html/html/search/all_1.js +1 -0
  169. package/SVF-doxygen/html/html/search/all_10.js +4 -4
  170. package/SVF-doxygen/html/html/search/all_11.js +1 -1
  171. package/SVF-doxygen/html/html/search/all_12.js +10 -9
  172. package/SVF-doxygen/html/html/search/all_13.js +6 -6
  173. package/SVF-doxygen/html/html/search/all_15.js +2 -2
  174. package/SVF-doxygen/html/html/search/all_16.js +1 -1
  175. package/SVF-doxygen/html/html/search/all_2.js +1 -1
  176. package/SVF-doxygen/html/html/search/all_9.js +2 -2
  177. package/SVF-doxygen/html/html/search/all_b.js +1 -1
  178. package/SVF-doxygen/html/html/search/all_c.js +5 -5
  179. package/SVF-doxygen/html/html/search/all_d.js +1 -1
  180. package/SVF-doxygen/html/html/search/all_e.js +1 -1
  181. package/SVF-doxygen/html/html/search/all_f.js +3 -3
  182. package/SVF-doxygen/html/html/search/functions_0.js +1 -0
  183. package/SVF-doxygen/html/html/search/functions_1.js +1 -1
  184. package/SVF-doxygen/html/html/search/functions_11.js +4 -3
  185. package/SVF-doxygen/html/html/search/functions_8.js +1 -1
  186. package/SVF-doxygen/html/html/search/variables_12.js +2 -2
  187. package/SVF-doxygen/html/html/search/variables_13.js +3 -3
  188. package/SVF-doxygen/html/html/search/variables_9.js +1 -1
  189. package/SVF-doxygen/html/html/search/variables_c.js +1 -1
  190. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +16 -16
  191. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1ICFGNode_01_5_01_4_01_4.html +1 -1
  192. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ICFGNode_01_5_01_4.html +1 -1
  193. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ICFG_01_5_01_4.html +2 -2
  194. package/SVF-doxygen/html/html/svf-ex_8cpp.html +3 -4
  195. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +4 -4
  196. package/include/Graphs/ICFG.h +5 -0
  197. package/include/MemoryModel/SVFIR.h +14 -4
  198. package/include/SVF-FE/BasicTypes.h +1 -0
  199. package/include/SVF-FE/SVFIRBuilder.h +3 -3
  200. package/lib/DDA/DDAPass.cpp +2 -2
  201. package/lib/Graphs/ICFG.cpp +0 -3
  202. package/lib/MTA/MTA.cpp +2 -2
  203. package/lib/MemoryModel/SVFIR.cpp +0 -3
  204. package/lib/SABER/SrcSnkDDA.cpp +2 -2
  205. package/lib/SVF-FE/ICFGBuilder.cpp +4 -0
  206. package/lib/SVF-FE/SVFIRBuilder.cpp +13 -4
  207. package/lib/WPA/WPAPass.cpp +2 -2
  208. package/package.json +1 -1
  209. package/tools/CFL/cfl.cpp +2 -2
  210. package/tools/Example/svf-ex.cpp +2 -2
@@ -114,16 +114,16 @@ $(function() {
114
114
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a25b00d9ca71cbdd27530fc5d0dc84ee5"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a25b00d9ca71cbdd27530fc5d0dc84ee5">SVF::AndersenBase::numOfSfrs</a></div><div class="ttdeci">static u32_t numOfSfrs</div><div class="ttdoc">Number of processed Store edge. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00128">Andersen.h:128</a></div></div>
115
115
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a2b763519509ce21cf40893c01f8357b6"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a2b763519509ce21cf40893c01f8357b6">SVF::AndersenBase::numOfProcessedStore</a></div><div class="ttdeci">static u32_t numOfProcessedStore</div><div class="ttdoc">Number of processed Load edge. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00127">Andersen.h:127</a></div></div>
116
116
  <div class="ttc" id="classSVF_1_1ConstraintGraph_html_a84468bc9355d31e8c3e18369036ddf5c"><div class="ttname"><a href="classSVF_1_1ConstraintGraph.html#a84468bc9355d31e8c3e18369036ddf5c">SVF::ConstraintGraph::isPWCNode</a></div><div class="ttdeci">bool isPWCNode(NodeID nodeId)</div><div class="ttdoc">Check/Set PWC (positive weight cycle) flag. </div><div class="ttdef"><b>Definition:</b> <a href="ConsG_8h_source.html#l00348">ConsG.h:348</a></div></div>
117
- <div class="ttc" id="classSVF_1_1SVFIR_html_a3bbaafd80dfcae6ccc82c3d8b9d303ea"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a3bbaafd80dfcae6ccc82c3d8b9d303ea">SVF::SVFIR::getFieldObjNodeNum</a></div><div class="ttdeci">u32_t getFieldObjNodeNum() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00288">SVFIR.h:288</a></div></div>
117
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a3bbaafd80dfcae6ccc82c3d8b9d303ea"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a3bbaafd80dfcae6ccc82c3d8b9d303ea">SVF::SVFIR::getFieldObjNodeNum</a></div><div class="ttdeci">u32_t getFieldObjNodeNum() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00298">SVFIR.h:298</a></div></div>
118
118
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a4bef15157423cef48dc7333a803cd27d"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">SVF::GenericGraph::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00369">GenericGraph.h:369</a></div></div>
119
119
  <div class="ttc" id="classSVF_1_1AndersenBase_html"><div class="ttname"><a href="classSVF_1_1AndersenBase.html">SVF::AndersenBase</a></div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00055">Andersen.h:55</a></div></div>
120
120
  <div class="ttc" id="classSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph&lt; ConstraintNode, ConstraintEdge &gt;::iterator</a></div><div class="ttdeci">IDToNodeMapTy::iterator iterator</div><div class="ttdoc">Node Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00342">GenericGraph.h:342</a></div></div>
121
121
  <div class="ttc" id="classSVF_1_1SVFStat_html_a178fcefed6ffffc78bbe9b23e0e1babe"><div class="ttname"><a href="classSVF_1_1SVFStat.html#a178fcefed6ffffc78bbe9b23e0e1babe">SVF::SVFStat::printStat</a></div><div class="ttdeci">virtual void printStat(std::string str=&quot;&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="SVFStat_8cpp_source.html#l00066">SVFStat.cpp:66</a></div></div>
122
122
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_aee289e298e421448caaa604b7eb34fcb"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">SVF::BVDataPTAImpl::getPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getPts(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00099">PointerAnalysisImpl.h:99</a></div></div>
123
- <div class="ttc" id="classSVF_1_1SVFIR_html_a8a24e0bf9f95fc1519d4013e0e82dec9"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a8a24e0bf9f95fc1519d4013e0e82dec9">SVF::SVFIR::getFieldValNodeNum</a></div><div class="ttdeci">u32_t getFieldValNodeNum() const</div><div class="ttdoc">Node and edge statistics. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00284">SVFIR.h:284</a></div></div>
123
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a8a24e0bf9f95fc1519d4013e0e82dec9"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a8a24e0bf9f95fc1519d4013e0e82dec9">SVF::SVFIR::getFieldValNodeNum</a></div><div class="ttdeci">u32_t getFieldValNodeNum() const</div><div class="ttdoc">Node and edge statistics. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00294">SVFIR.h:294</a></div></div>
124
124
  <div class="ttc" id="classSVF_1_1PointsTo_html_a879783ba6629e500af9aa7dfcda2563d"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a879783ba6629e500af9aa7dfcda2563d">SVF::PointsTo::count</a></div><div class="ttdeci">u32_t count(void) const</div><div class="ttdoc">Returns number of elements. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00107">PointsTo.cpp:107</a></div></div>
125
125
  <div class="ttc" id="classSVF_1_1SVFVar_html_a927733580b47be5ffcfced44ba9fd6c3"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a927733580b47be5ffcfced44ba9fd6c3">SVF::SVFVar::getOutgoingEdges</a></div><div class="ttdeci">SVFStmt::SVFStmtSetTy &amp; getOutgoingEdges(SVFStmt::PEDGEK kind)</div><div class="ttdoc">Get outgoing SVFIR statements (edges) </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00147">SVFVariables.h:147</a></div></div>
126
- <div class="ttc" id="classSVF_1_1SVFIR_html_a5c3b194ebada47baaccf0e9f3ab1a139"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a5c3b194ebada47baaccf0e9f3ab1a139">SVF::SVFIR::isValidTopLevelPtr</a></div><div class="ttdeci">bool isValidTopLevelPtr(const SVFVar *node)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00705">SVFIR.cpp:705</a></div></div>
126
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a5c3b194ebada47baaccf0e9f3ab1a139"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a5c3b194ebada47baaccf0e9f3ab1a139">SVF::SVFIR::isValidTopLevelPtr</a></div><div class="ttdeci">bool isValidTopLevelPtr(const SVFVar *node)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00702">SVFIR.cpp:702</a></div></div>
127
127
  <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>
128
128
  <div class="ttc" id="namespaceSVFUtil_html"><div class="ttname"><a href="namespaceSVFUtil.html">SVFUtil</a></div></div>
129
129
  <div class="ttc" id="classSVF_1_1AndersenBase_html_a0d7298cbf83568f24fd2bd1926a32968"><div class="ttname"><a href="classSVF_1_1AndersenBase.html#a0d7298cbf83568f24fd2bd1926a32968">SVF::AndersenBase::numOfSCCDetection</a></div><div class="ttdeci">static u32_t numOfSCCDetection</div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00131">Andersen.h:131</a></div></div>
@@ -184,7 +184,7 @@ Functions</h2></td></tr>
184
184
  <p class="definition">Definition at line <a class="el" href="BreakConstantExpr_8cpp_source.html#l00087">87</a> of file <a class="el" href="BreakConstantExpr_8cpp_source.html">BreakConstantExpr.cpp</a>.</p>
185
185
  <div class="fragment"><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> (<a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> * CE = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(V))</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">if</span> (CE-&gt;getOpcode() == Instruction::GetElementPtr)</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">return</span> CE;</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">else</span></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">for</span> (<span class="keywordtype">unsigned</span> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> &lt; CE-&gt;getNumOperands(); ++<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>)</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="BreakConstantExpr_8cpp.html#a81381bb19688464256bd09ef22e965e4">hasConstantGEP</a> (CE-&gt;getOperand(<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>)))</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">return</span> CE;</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; }</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; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;}</div><div class="ttc" id="cJSON_8h_html_a750b5d744c39a06bfb13e6eb010e35d0"><div class="ttname"><a href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a></div><div class="ttdeci">int index</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00170">cJSON.h:170</a></div></div>
186
186
  <div class="ttc" id="BreakConstantExpr_8cpp_html_a81381bb19688464256bd09ef22e965e4"><div class="ttname"><a href="BreakConstantExpr_8cpp.html#a81381bb19688464256bd09ef22e965e4">hasConstantGEP</a></div><div class="ttdeci">static ConstantExpr * hasConstantGEP(Value *V)</div><div class="ttdef"><b>Definition:</b> <a href="BreakConstantExpr_8cpp_source.html#l00087">BreakConstantExpr.cpp:87</a></div></div>
187
- <div class="ttc" id="namespaceSVF_html_a911dbaab38cb42deb9c195c7f687853d"><div class="ttname"><a href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">SVF::ConstantExpr</a></div><div class="ttdeci">llvm::ConstantExpr ConstantExpr</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00065">BasicTypes.h:65</a></div></div>
187
+ <div class="ttc" id="namespaceSVF_html_a911dbaab38cb42deb9c195c7f687853d"><div class="ttname"><a href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">SVF::ConstantExpr</a></div><div class="ttdeci">llvm::ConstantExpr ConstantExpr</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00066">BasicTypes.h:66</a></div></div>
188
188
  </div><!-- fragment -->
189
189
  </div>
190
190
  </div>
@@ -67,8 +67,8 @@ $(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"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#include &quot;llvm/ADT/Statistic.h&quot;</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#include &quot;llvm/IR/Constants.h&quot;</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#include &quot;llvm/IR/InstrTypes.h&quot;</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#include &quot;llvm/IR/Instruction.h&quot;</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor">#include &quot;llvm/IR/Instructions.h&quot;</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="preprocessor">#include &quot;llvm/IR/LLVMContext.h&quot;</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#include &quot;llvm/IR/InstIterator.h&quot;</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</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="l00053"></a><span class="lineno"> 53</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="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment">// Identifier variable for the pass</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</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="l00063"></a><span class="lineno"> 63</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="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="BreakConstantExpr_8cpp.html#ad78e062f62e0d6e453941fb4ca843e4d"> 65</a></span>&#160;<span class="preprocessor">#define DEBUG_TYPE &quot;break-constgeps&quot;</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment">// Statistics</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</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="l00069"></a><span class="lineno"> 69</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="l00070"></a><span class="lineno"> 70</span>&#160;</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">// Function: hasConstantGEP()</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment">// Description:</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment">// This function determines whether the given value is a constant expression</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment">// that has a constant GEP expression embedded within it.</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment">// Inputs:</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment">// V - The value to check.</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment">// Return value:</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment">// nullptr - This value is not a constant expression with a constant expression</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment">// GEP within it.</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment">// ~nullptr - A pointer to the value casted into a ConstantExpr is returned.</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="keyword">static</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> *</div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="BreakConstantExpr_8cpp.html#a81381bb19688464256bd09ef22e965e4"> 87</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="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> (<a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> * CE = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(V))</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">if</span> (CE-&gt;getOpcode() == Instruction::GetElementPtr)</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">return</span> CE;</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">else</span></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">for</span> (<span class="keywordtype">unsigned</span> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> &lt; CE-&gt;getNumOperands(); ++<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>)</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="BreakConstantExpr_8cpp.html#a81381bb19688464256bd09ef22e965e4">hasConstantGEP</a> (CE-&gt;getOperand(<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>)))</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">return</span> CE;</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; }</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; <span class="keywordflow">return</span> 0;</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;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="comment">// Function: convertExpression()</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="comment">// Description:</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="comment">// Convert a constant expression into an instruction. This routine does *not*</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="comment">// perform any recursion, so the resulting instruction may have constant</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="comment">// expression operands.</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="keyword">static</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *</div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="BreakConstantExpr_8cpp.html#a25cf7d9aff084a1cd1aa51c85a4a17e1"> 118</a></span>&#160;<a class="code" href="BreakConstantExpr_8cpp.html#a25cf7d9aff084a1cd1aa51c85a4a17e1">convertExpression</a> (<a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> * CE, <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> * InsertPt)</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;{</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="comment">// Convert this constant expression into a regular instruction.</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">if</span> (CE-&gt;getOpcode() == Instruction::GetElementPtr)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; ++GEPChanges;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; ++TotalChanges;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* Result = CE-&gt;getAsInstruction();</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; Result-&gt;insertBefore(InsertPt);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">return</span> Result;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;}</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="comment">// Method: runOnFunction()</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="comment">// Description:</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="comment">// Entry point for this LLVM pass.</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="comment">// Return value:</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="comment">// true - The function was modified.</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="comment">// false - The function was not modified.</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="keywordtype">bool</span></div><div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="classSVF_1_1BreakConstantGEPs.html#ae99ceb7923161d54e7d0a687f4f68e1a"> 142</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="l00143"></a><span class="lineno"> 143</span>&#160;{</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordtype">bool</span> modified = <span class="keyword">false</span>;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">for</span> (Module::iterator F = module.begin(), E = module.end(); F != E; ++F)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="comment">// Worklist of values to check for constant GEP expressions</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; std::vector&lt;Instruction *&gt; Worklist;</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; <span class="comment">//</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="comment">// Initialize the worklist by finding all instructions that have one or more</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">// operands containing a constant GEP expression.</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">for</span> (Function::iterator BB = (*F).begin(); BB != (*F).end(); ++BB)</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="keywordflow">for</span> (BasicBlock::iterator i = BB-&gt;begin(); i != BB-&gt;end(); ++i)</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; {</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="comment">// Scan through the operands of this instruction. If it is a constant</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="comment">// expression GEP, insert an instruction GEP before the instruction.</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> * I = &amp;(*i);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> &lt; I-&gt;getNumOperands(); ++<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>)</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; <span class="keywordflow">if</span> (<a class="code" href="BreakConstantExpr_8cpp.html#a81381bb19688464256bd09ef22e965e4">hasConstantGEP</a> (I-&gt;getOperand(<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>)))</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; Worklist.push_back (I);</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; }</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</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="comment">// Determine whether we will modify anything.</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">if</span> (Worklist.size()) modified = <span class="keyword">true</span>;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</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="l00180"></a><span class="lineno"> 180</span>&#160; <span class="comment">// operands into instructions if necessary, and determine if the newly</span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="comment">// added instructions need to be processed as well.</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">while</span> (Worklist.size())</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> * I = Worklist.back();</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; Worklist.pop_back();</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="comment">// Scan through the operands of this instruction and convert each into an</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="comment">// instruction. Note that this works a little differently for phi</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="comment">// instructions because the new instruction must be added to the</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="comment">// appropriate predecessor block.</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#ac8d4990439af7a2ecca7e15383119674">PHINode</a> * PHI = SVFUtil::dyn_cast&lt;PHINode&gt;(I))</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> &lt; PHI-&gt;getNumIncomingValues(); ++<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>)</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</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="l00200"></a><span class="lineno"> 200</span>&#160; <span class="comment">// want to insert the new instructions in the predecessor basic block.</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</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="l00203"></a><span class="lineno"> 203</span>&#160; <span class="comment">// incoming basic block listed multiple times; this seems okay as long</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="comment">// the same value is listed for the incoming block.</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> * InsertPt = PHI-&gt;getIncomingBlock(<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>)-&gt;getTerminator();</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> * CE = <a class="code" href="BreakConstantExpr_8cpp.html#a81381bb19688464256bd09ef22e965e4">hasConstantGEP</a> (PHI-&gt;getIncomingValue(<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>)))</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; {</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <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="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i2 = <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>; i2 &lt; PHI-&gt;getNumIncomingValues(); ++i2)</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; {</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">if</span> ((PHI-&gt;getIncomingBlock (i2)) == PHI-&gt;getIncomingBlock (<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>))</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; PHI-&gt;setIncomingValue (i2, 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; Worklist.push_back (NewInst);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; }</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0; <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> &lt; I-&gt;getNumOperands(); ++<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>)</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; {</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="comment">// For other instructions, we want to insert instructions replacing</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="comment">// constant expressions immediently before the instruction using the</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="comment">// constant expression.</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a> * CE = <a class="code" href="BreakConstantExpr_8cpp.html#a81381bb19688464256bd09ef22e965e4">hasConstantGEP</a> (I-&gt;getOperand(<a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>)))</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <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="l00231"></a><span class="lineno"> 231</span>&#160; I-&gt;replaceUsesOfWith (CE, NewInst);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; Worklist.push_back (NewInst);</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;</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; <span class="keywordflow">return</span> modified;</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="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div><div class="ttc" id="cJSON_8h_html_a750b5d744c39a06bfb13e6eb010e35d0"><div class="ttname"><a href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a></div><div class="ttdeci">int index</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00170">cJSON.h:170</a></div></div>
70
- <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="SVF-FE_2BasicTypes_8h_source.html#l00045">BasicTypes.h:45</a></div></div>
71
- <div class="ttc" id="namespaceSVF_html_ac8d4990439af7a2ecca7e15383119674"><div class="ttname"><a href="namespaceSVF.html#ac8d4990439af7a2ecca7e15383119674">SVF::PHINode</a></div><div class="ttdeci">llvm::PHINode PHINode</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
70
+ <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="SVF-FE_2BasicTypes_8h_source.html#l00046">BasicTypes.h:46</a></div></div>
71
+ <div class="ttc" id="namespaceSVF_html_ac8d4990439af7a2ecca7e15383119674"><div class="ttname"><a href="namespaceSVF.html#ac8d4990439af7a2ecca7e15383119674">SVF::PHINode</a></div><div class="ttdeci">llvm::PHINode PHINode</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
72
72
  <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>
73
73
  <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>
74
74
  <div class="ttc" id="SVF-FE_2BasicTypes_8h_html"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html">BasicTypes.h</a></div></div>
@@ -79,7 +79,7 @@ $(function() {
79
79
  <div class="ttc" id="BreakConstantExpr_8cpp_html_a81381bb19688464256bd09ef22e965e4"><div class="ttname"><a href="BreakConstantExpr_8cpp.html#a81381bb19688464256bd09ef22e965e4">hasConstantGEP</a></div><div class="ttdeci">static ConstantExpr * hasConstantGEP(Value *V)</div><div class="ttdef"><b>Definition:</b> <a href="BreakConstantExpr_8cpp_source.html#l00087">BreakConstantExpr.cpp:87</a></div></div>
80
80
  <div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8h_source.html#l00035">CFGNormalizer.h:35</a></div></div>
81
81
  <div class="ttc" id="classSVF_1_1MergeFunctionRets_html_a7a763ae6c9d3c72345495f01b0b4b458"><div class="ttname"><a href="classSVF_1_1MergeFunctionRets.html#a7a763ae6c9d3c72345495f01b0b4b458">SVF::MergeFunctionRets::ID</a></div><div class="ttdeci">static char ID</div><div class="ttdef"><b>Definition:</b> <a href="BreakConstantExpr_8h_source.html#l00062">BreakConstantExpr.h:62</a></div></div>
82
- <div class="ttc" id="namespaceSVF_html_a911dbaab38cb42deb9c195c7f687853d"><div class="ttname"><a href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">SVF::ConstantExpr</a></div><div class="ttdeci">llvm::ConstantExpr ConstantExpr</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00065">BasicTypes.h:65</a></div></div>
82
+ <div class="ttc" id="namespaceSVF_html_a911dbaab38cb42deb9c195c7f687853d"><div class="ttname"><a href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">SVF::ConstantExpr</a></div><div class="ttdeci">llvm::ConstantExpr ConstantExpr</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00066">BasicTypes.h:66</a></div></div>
83
83
  <div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00071">BasicTypes.h:71</a></div></div>
84
84
  </div><!-- fragment --></div><!-- contents -->
85
85
  <!-- start footer part -->
@@ -66,9 +66,9 @@ $(function() {
66
66
  <div class="title">BreakConstantExpr.h</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="BreakConstantExpr_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- BreakConstantGEPs.h - Change constant GEPs into GEP instructions --- --//</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">// The SAFECode Compiler</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 file was developed by the LLVM research group and is distributed under</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// the University of Illinois Open Source License. See LICENSE.TXT for details.</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</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 pass changes all GEP constant expressions into GEP instructions. This</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</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="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef BREAKCONSTANTGEPS_H</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define BREAKCONSTANTGEPS_H</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="preprocessor">#include &quot;<a class="code" href="Util_2BasicTypes_8h.html">Util/BasicTypes.h</a>&quot;</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="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</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">// Pass: BreakConstantGEPs</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">// Description:</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment">// This pass modifies a function so that it uses GEP instructions instead of</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment">// GEP constant expressions.</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classSVF_1_1BreakConstantGEPs.html"> 30</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1BreakConstantGEPs.html">BreakConstantGEPs</a> : <span class="keyword">public</span> <a class="code" href="namespaceSVF.html#ac226d84f86637126d17f6814632c8a90">ModulePass</a></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="comment">// Private methods</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="comment">// Private variables</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classSVF_1_1BreakConstantGEPs.html#a8010c4f5824ed5ebcb7ae283473ada22"> 38</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">char</span> <a class="code" href="classSVF_1_1BreakConstantGEPs.html#a8010c4f5824ed5ebcb7ae283473ada22">ID</a>;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classSVF_1_1BreakConstantGEPs.html#a5397ce21e78d09c8d1cdc3f912d53a7f"> 39</a></span>&#160; <a class="code" href="classSVF_1_1BreakConstantGEPs.html#a5397ce21e78d09c8d1cdc3f912d53a7f">BreakConstantGEPs</a>() : <a class="code" href="namespaceSVF.html#ac226d84f86637126d17f6814632c8a90">ModulePass</a>(ID) {}</div><div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classSVF_1_1BreakConstantGEPs.html#a182830d0a9d07015628211ec5eb0d4c6"> 40</a></span>&#160; llvm::StringRef <a class="code" href="classSVF_1_1BreakConstantGEPs.html#a182830d0a9d07015628211ec5eb0d4c6">getPassName</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Remove Constant GEP Expressions&quot;</span>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BreakConstantGEPs.html#ae99ceb7923161d54e7d0a687f4f68e1a">runOnModule</a> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp; M);</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;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="comment">// Pass: MergeFunctionRets</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment">// Description:</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment">// This pass modifies a function so that each function only have one unified exit basic block</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1MergeFunctionRets.html"> 54</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1MergeFunctionRets.html">MergeFunctionRets</a> : <span class="keyword">public</span> <a class="code" href="namespaceSVF.html#ac226d84f86637126d17f6814632c8a90">ModulePass</a></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="keyword">private</span>:</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="comment">// Private methods</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="comment">// Private variables</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classSVF_1_1MergeFunctionRets.html#a7a763ae6c9d3c72345495f01b0b4b458"> 62</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">char</span> <a class="code" href="classSVF_1_1MergeFunctionRets.html#a7a763ae6c9d3c72345495f01b0b4b458">ID</a>;</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classSVF_1_1MergeFunctionRets.html#a2b989707893cd81dd275be6a3b8c79fc"> 63</a></span>&#160; <a class="code" href="classSVF_1_1MergeFunctionRets.html#a2b989707893cd81dd275be6a3b8c79fc">MergeFunctionRets</a>() : <a class="code" href="namespaceSVF.html#ac226d84f86637126d17f6814632c8a90">ModulePass</a>(ID) {}</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classSVF_1_1MergeFunctionRets.html#a436a61f00b607dd0e5728daad9dd2e93"> 64</a></span>&#160; llvm::StringRef <a class="code" href="classSVF_1_1MergeFunctionRets.html#a436a61f00b607dd0e5728daad9dd2e93">getPassName</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;unify function exit into one dummy exit basic block&quot;</span>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classSVF_1_1MergeFunctionRets.html#a8fe74477a43f80104fb3461d006ad392"> 68</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MergeFunctionRets.html#a8fe74477a43f80104fb3461d006ad392">runOnModule</a> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp; M)</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; UnifyFunctionExit(M);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</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"><a class="line" href="classSVF_1_1MergeFunctionRets.html#a8c04750179ee48d283c5db4d84b3eca1"> 73</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MergeFunctionRets.html#a8c04750179ee48d283c5db4d84b3eca1">UnifyFunctionExit</a>(<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>&amp; module)</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">for</span> (Module::const_iterator iter = module.begin(), eiter = module.end();</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; iter != eiter; ++iter)</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&amp; fun = *iter;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">if</span>(fun.isDeclaration())</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; getUnifyExit(fun)-&gt;runOnFunction(const_cast&lt;Function&amp;&gt;(fun));</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classSVF_1_1MergeFunctionRets.html#a0644ac0f560911632855d9129f3d71ca"> 85</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#ae5853f7df76735b195ff93949ca4256b">UnifyFunctionExitNodes</a>* <a class="code" href="classSVF_1_1MergeFunctionRets.html#a0644ac0f560911632855d9129f3d71ca">getUnifyExit</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&amp; fn)</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; assert(!fn.isDeclaration() &amp;&amp; <span class="stringliteral">&quot;external function does not have DF&quot;</span>);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">return</span> &amp;getAnalysis&lt;UnifyFunctionExitNodes&gt;(<span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&amp;<span class="keyword">&gt;</span>(fn));</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;};</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="preprocessor">#endif</span></div><div class="ttc" id="namespaceSVF_html_ae5853f7df76735b195ff93949ca4256b"><div class="ttname"><a href="namespaceSVF.html#ae5853f7df76735b195ff93949ca4256b">SVF::UnifyFunctionExitNodes</a></div><div class="ttdeci">llvm::UnifyFunctionExitNodes UnifyFunctionExitNodes</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00042">BasicTypes.h:42</a></div></div>
70
- <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="SVF-FE_2BasicTypes_8h_source.html#l00045">BasicTypes.h:45</a></div></div>
71
- <div class="ttc" id="namespaceSVF_html_ac226d84f86637126d17f6814632c8a90"><div class="ttname"><a href="namespaceSVF.html#ac226d84f86637126d17f6814632c8a90">SVF::ModulePass</a></div><div class="ttdeci">llvm::ModulePass ModulePass</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00037">BasicTypes.h:37</a></div></div>
69
+ <a href="BreakConstantExpr_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- BreakConstantGEPs.h - Change constant GEPs into GEP instructions --- --//</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">// The SAFECode Compiler</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 file was developed by the LLVM research group and is distributed under</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// the University of Illinois Open Source License. See LICENSE.TXT for details.</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</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 pass changes all GEP constant expressions into GEP instructions. This</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</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="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef BREAKCONSTANTGEPS_H</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define BREAKCONSTANTGEPS_H</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="preprocessor">#include &quot;<a class="code" href="Util_2BasicTypes_8h.html">Util/BasicTypes.h</a>&quot;</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="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</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">// Pass: BreakConstantGEPs</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">// Description:</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment">// This pass modifies a function so that it uses GEP instructions instead of</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment">// GEP constant expressions.</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classSVF_1_1BreakConstantGEPs.html"> 30</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1BreakConstantGEPs.html">BreakConstantGEPs</a> : <span class="keyword">public</span> <a class="code" href="namespaceSVF.html#ac226d84f86637126d17f6814632c8a90">ModulePass</a></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="comment">// Private methods</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="comment">// Private variables</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classSVF_1_1BreakConstantGEPs.html#a8010c4f5824ed5ebcb7ae283473ada22"> 38</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">char</span> <a class="code" href="classSVF_1_1BreakConstantGEPs.html#a8010c4f5824ed5ebcb7ae283473ada22">ID</a>;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classSVF_1_1BreakConstantGEPs.html#a5397ce21e78d09c8d1cdc3f912d53a7f"> 39</a></span>&#160; <a class="code" href="classSVF_1_1BreakConstantGEPs.html#a5397ce21e78d09c8d1cdc3f912d53a7f">BreakConstantGEPs</a>() : <a class="code" href="namespaceSVF.html#ac226d84f86637126d17f6814632c8a90">ModulePass</a>(ID) {}</div><div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classSVF_1_1BreakConstantGEPs.html#a182830d0a9d07015628211ec5eb0d4c6"> 40</a></span>&#160; llvm::StringRef <a class="code" href="classSVF_1_1BreakConstantGEPs.html#a182830d0a9d07015628211ec5eb0d4c6">getPassName</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Remove Constant GEP Expressions&quot;</span>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BreakConstantGEPs.html#ae99ceb7923161d54e7d0a687f4f68e1a">runOnModule</a> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp; M);</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;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="comment">// Pass: MergeFunctionRets</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment">// Description:</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment">// This pass modifies a function so that each function only have one unified exit basic block</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1MergeFunctionRets.html"> 54</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1MergeFunctionRets.html">MergeFunctionRets</a> : <span class="keyword">public</span> <a class="code" href="namespaceSVF.html#ac226d84f86637126d17f6814632c8a90">ModulePass</a></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="keyword">private</span>:</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="comment">// Private methods</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="comment">// Private variables</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classSVF_1_1MergeFunctionRets.html#a7a763ae6c9d3c72345495f01b0b4b458"> 62</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">char</span> <a class="code" href="classSVF_1_1MergeFunctionRets.html#a7a763ae6c9d3c72345495f01b0b4b458">ID</a>;</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classSVF_1_1MergeFunctionRets.html#a2b989707893cd81dd275be6a3b8c79fc"> 63</a></span>&#160; <a class="code" href="classSVF_1_1MergeFunctionRets.html#a2b989707893cd81dd275be6a3b8c79fc">MergeFunctionRets</a>() : <a class="code" href="namespaceSVF.html#ac226d84f86637126d17f6814632c8a90">ModulePass</a>(ID) {}</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classSVF_1_1MergeFunctionRets.html#a436a61f00b607dd0e5728daad9dd2e93"> 64</a></span>&#160; llvm::StringRef <a class="code" href="classSVF_1_1MergeFunctionRets.html#a436a61f00b607dd0e5728daad9dd2e93">getPassName</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;unify function exit into one dummy exit basic block&quot;</span>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classSVF_1_1MergeFunctionRets.html#a8fe74477a43f80104fb3461d006ad392"> 68</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MergeFunctionRets.html#a8fe74477a43f80104fb3461d006ad392">runOnModule</a> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp; M)</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; UnifyFunctionExit(M);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</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"><a class="line" href="classSVF_1_1MergeFunctionRets.html#a8c04750179ee48d283c5db4d84b3eca1"> 73</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MergeFunctionRets.html#a8c04750179ee48d283c5db4d84b3eca1">UnifyFunctionExit</a>(<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>&amp; module)</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">for</span> (Module::const_iterator iter = module.begin(), eiter = module.end();</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; iter != eiter; ++iter)</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&amp; fun = *iter;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">if</span>(fun.isDeclaration())</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; getUnifyExit(fun)-&gt;runOnFunction(const_cast&lt;Function&amp;&gt;(fun));</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classSVF_1_1MergeFunctionRets.html#a0644ac0f560911632855d9129f3d71ca"> 85</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#ae5853f7df76735b195ff93949ca4256b">UnifyFunctionExitNodes</a>* <a class="code" href="classSVF_1_1MergeFunctionRets.html#a0644ac0f560911632855d9129f3d71ca">getUnifyExit</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&amp; fn)</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; assert(!fn.isDeclaration() &amp;&amp; <span class="stringliteral">&quot;external function does not have DF&quot;</span>);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">return</span> &amp;getAnalysis&lt;UnifyFunctionExitNodes&gt;(<span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&amp;<span class="keyword">&gt;</span>(fn));</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;};</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="preprocessor">#endif</span></div><div class="ttc" id="namespaceSVF_html_ae5853f7df76735b195ff93949ca4256b"><div class="ttname"><a href="namespaceSVF.html#ae5853f7df76735b195ff93949ca4256b">SVF::UnifyFunctionExitNodes</a></div><div class="ttdeci">llvm::UnifyFunctionExitNodes UnifyFunctionExitNodes</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00043">BasicTypes.h:43</a></div></div>
70
+ <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="SVF-FE_2BasicTypes_8h_source.html#l00046">BasicTypes.h:46</a></div></div>
71
+ <div class="ttc" id="namespaceSVF_html_ac226d84f86637126d17f6814632c8a90"><div class="ttname"><a href="namespaceSVF.html#ac226d84f86637126d17f6814632c8a90">SVF::ModulePass</a></div><div class="ttdeci">llvm::ModulePass ModulePass</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00038">BasicTypes.h:38</a></div></div>
72
72
  <div class="ttc" id="Util_2BasicTypes_8h_html"><div class="ttname"><a href="Util_2BasicTypes_8h.html">BasicTypes.h</a></div></div>
73
73
  <div class="ttc" id="classSVF_1_1BreakConstantGEPs_html_a5397ce21e78d09c8d1cdc3f912d53a7f"><div class="ttname"><a href="classSVF_1_1BreakConstantGEPs.html#a5397ce21e78d09c8d1cdc3f912d53a7f">SVF::BreakConstantGEPs::BreakConstantGEPs</a></div><div class="ttdeci">BreakConstantGEPs()</div><div class="ttdef"><b>Definition:</b> <a href="BreakConstantExpr_8h_source.html#l00039">BreakConstantExpr.h:39</a></div></div>
74
74
  <div class="ttc" id="classSVF_1_1BreakConstantGEPs_html"><div class="ttname"><a href="classSVF_1_1BreakConstantGEPs.html">SVF::BreakConstantGEPs</a></div><div class="ttdef"><b>Definition:</b> <a href="BreakConstantExpr_8h_source.html#l00030">BreakConstantExpr.h:30</a></div></div>
@@ -78,7 +78,7 @@ $(function() {
78
78
  <div class="ttc" id="classSVF_1_1CFLSolver_html_afc745dc72fd0572a145a78fe6a93ae5c"><div class="ttname"><a href="classSVF_1_1CFLSolver.html#afc745dc72fd0572a145a78fe6a93ae5c">SVF::CFLSolver::pushIntoWorklist</a></div><div class="ttdeci">bool pushIntoWorklist(const CFLEdge *item)</div><div class="ttdef"><b>Definition:</b> <a href="CFLSolver_8h_source.html#l00082">CFLSolver.h:82</a></div></div>
79
79
  <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#l00114">BasicTypes.h:114</a></div></div>
80
80
  <div class="ttc" id="classSVF_1_1CFLAlias_html_a40841c2b47cf690af5c13ba7662d0863"><div class="ttname"><a href="classSVF_1_1CFLAlias.html#a40841c2b47cf690af5c13ba7662d0863">SVF::CFLAlias::heapAllocatorViaIndCall</a></div><div class="ttdeci">void heapAllocatorViaIndCall(CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="CFLAlias_8cpp_source.html#l00148">CFLAlias.cpp:148</a></div></div>
81
- <div class="ttc" id="classSVF_1_1SVFIR_html_a5298f34143ec3a2e6bb74ebad668cbbc"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a5298f34143ec3a2e6bb74ebad668cbbc">SVF::SVFIR::getBaseValVar</a></div><div class="ttdeci">NodeID getBaseValVar(NodeID nodeId)</div><div class="ttdoc">Base and Offset methods for Value and Object node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00521">SVFIR.cpp:521</a></div></div>
81
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a5298f34143ec3a2e6bb74ebad668cbbc"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a5298f34143ec3a2e6bb74ebad668cbbc">SVF::SVFIR::getBaseValVar</a></div><div class="ttdeci">NodeID getBaseValVar(NodeID nodeId)</div><div class="ttdoc">Base and Offset methods for Value and Object node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00518">SVFIR.cpp:518</a></div></div>
82
82
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85a164c6de3baace1c63db75a228a5816bb"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a164c6de3baace1c63db75a228a5816bb">SVF::PointerAnalysis::CFLFICI_WPA</a></div><div class="ttdoc">Flow-, context-, insensitive CFL-reachability-based analysis. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00077">PointerAnalysis.h:77</a></div></div>
83
83
  <div class="ttc" id="namespaceSVF_html_a61c01e2e687ab3a001fb806737583943"><div class="ttname"><a href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">SVF::AliasResult</a></div><div class="ttdeci">AliasResult</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00196">SVFBasicTypes.h:196</a></div></div>
84
84
  <div class="ttc" id="classSVF_1_1CFLBase_html_af7b0e90b8f8998ab6cf4e05155c7a503"><div class="ttname"><a href="classSVF_1_1CFLBase.html#af7b0e90b8f8998ab6cf4e05155c7a503">SVF::CFLBase::grammar</a></div><div class="ttdeci">CFLGrammar * grammar</div><div class="ttdef"><b>Definition:</b> <a href="CFLBase_8h_source.html#l00106">CFLBase.h:106</a></div></div>