svf-tools 1.0.442 → 1.0.445

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 (518) hide show
  1. package/SVF-doxygen/html/html/AbstractPointsToDS_8h_source.html +1 -1
  2. package/SVF-doxygen/html/html/AndersenHCD_8cpp_source.html +1 -1
  3. package/SVF-doxygen/html/html/AndersenHLCD_8cpp_source.html +1 -1
  4. package/SVF-doxygen/html/html/AndersenLCD_8cpp_source.html +1 -1
  5. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +1 -1
  7. package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +1 -1
  8. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +1 -1
  9. package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +1 -1
  10. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +1 -1
  11. package/SVF-doxygen/html/html/Andersen_8h_source.html +1 -1
  12. package/SVF-doxygen/html/html/Annotator_8h_source.html +1 -1
  13. package/SVF-doxygen/html/html/BDDExpr_8cpp_source.html +1 -1
  14. package/SVF-doxygen/html/html/BDDExpr_8h_source.html +1 -1
  15. package/SVF-doxygen/html/html/BitVector_8cpp_source.html +1 -1
  16. package/SVF-doxygen/html/html/BitVector_8h_source.html +1 -1
  17. package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +1 -1
  18. package/SVF-doxygen/html/html/BreakConstantExpr_8h_source.html +1 -1
  19. package/SVF-doxygen/html/html/CFGNormalizer_8cpp.html +86 -0
  20. package/SVF-doxygen/html/html/CFGNormalizer_8cpp_source.html +104 -0
  21. package/SVF-doxygen/html/html/CFGNormalizer_8h.html +95 -0
  22. package/SVF-doxygen/html/html/CFGNormalizer_8h_source.html +95 -0
  23. package/SVF-doxygen/html/html/CFLAlias_8h.html +100 -0
  24. package/SVF-doxygen/html/html/CFLAlias_8h_source.html +136 -0
  25. package/SVF-doxygen/html/html/CFLGrammar_8cpp.html +81 -0
  26. package/SVF-doxygen/html/html/CFLGrammar_8cpp_source.html +90 -0
  27. package/SVF-doxygen/html/html/CFLGrammar_8h.html +97 -0
  28. package/SVF-doxygen/html/html/CFLGrammar_8h_source.html +114 -0
  29. package/SVF-doxygen/html/html/CFLGraph_8cpp.html +96 -0
  30. package/SVF-doxygen/html/html/CFLGraph_8cpp_source.html +123 -0
  31. package/SVF-doxygen/html/html/CFLGraph_8h.html +124 -0
  32. package/SVF-doxygen/html/html/CFLGraph_8h_source.html +114 -0
  33. package/SVF-doxygen/html/html/CFLSolver_8cpp.html +80 -0
  34. package/SVF-doxygen/html/html/CFLSolver_8cpp_source.html +107 -0
  35. package/SVF-doxygen/html/html/CFLSolver_8h.html +6 -5
  36. package/SVF-doxygen/html/html/CFLSolver_8h_source.html +27 -33
  37. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +1 -1
  38. package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +1 -1
  39. package/SVF-doxygen/html/html/CHG_8cpp_source.html +2 -2
  40. package/SVF-doxygen/html/html/CHG_8h_source.html +3 -3
  41. package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +1 -1
  42. package/SVF-doxygen/html/html/CPPUtil_8h_source.html +1 -1
  43. package/SVF-doxygen/html/html/CSC_8cpp_source.html +1 -1
  44. package/SVF-doxygen/html/html/CSC_8h_source.html +1 -1
  45. package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +1 -1
  46. package/SVF-doxygen/html/html/CallGraphBuilder_8h_source.html +1 -1
  47. package/SVF-doxygen/html/html/Casting_8h_source.html +1 -1
  48. package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +1 -1
  49. package/SVF-doxygen/html/html/ConsGEdge_8h_source.html +1 -1
  50. package/SVF-doxygen/html/html/ConsGNode_8h_source.html +6 -6
  51. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +2 -2
  52. package/SVF-doxygen/html/html/ConsG_8h_source.html +2 -2
  53. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +1 -1
  54. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +2 -2
  55. package/SVF-doxygen/html/html/CoreBitVector_8cpp_source.html +1 -1
  56. package/SVF-doxygen/html/html/CoreBitVector_8h_source.html +1 -1
  57. package/SVF-doxygen/html/html/CxtStmt_8h_source.html +1 -1
  58. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +1 -1
  59. package/SVF-doxygen/html/html/DCHG_8h_source.html +2 -2
  60. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +1 -1
  61. package/SVF-doxygen/html/html/DDAClient_8h_source.html +1 -1
  62. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
  63. package/SVF-doxygen/html/html/DDAPass_8h_source.html +1 -1
  64. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +1 -1
  65. package/SVF-doxygen/html/html/DDAStat_8h_source.html +1 -1
  66. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +1 -1
  67. package/SVF-doxygen/html/html/DPItem_8h_source.html +1 -1
  68. package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +2 -2
  69. package/SVF-doxygen/html/html/DataFlowUtil_8h_source.html +1 -1
  70. package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +1 -1
  71. package/SVF-doxygen/html/html/DoubleFreeChecker_8h_source.html +1 -1
  72. package/SVF-doxygen/html/html/ExeState_8cpp_source.html +1 -1
  73. package/SVF-doxygen/html/html/ExeState_8h_source.html +1 -1
  74. package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +1 -1
  75. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +1 -1
  76. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +1 -1
  77. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
  78. package/SVF-doxygen/html/html/FileChecker_8cpp_source.html +1 -1
  79. package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
  80. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +1 -1
  81. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
  82. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +1 -1
  83. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +1 -1
  84. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +1 -1
  85. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +1 -1
  86. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +1 -1
  87. package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h_source.html +1 -1
  88. package/SVF-doxygen/html/html/GenericGraph_8h_source.html +2 -2
  89. package/SVF-doxygen/html/html/GrammarBuilder_8cpp.html +94 -0
  90. package/SVF-doxygen/html/html/GrammarBuilder_8cpp_source.html +92 -0
  91. package/SVF-doxygen/html/html/GrammarBuilder_8h.html +96 -0
  92. package/SVF-doxygen/html/html/GrammarBuilder_8h_source.html +87 -0
  93. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +1 -1
  94. package/SVF-doxygen/html/html/Graph2Json_8h_source.html +1 -1
  95. package/SVF-doxygen/html/html/GraphPrinter_8h_source.html +1 -1
  96. package/SVF-doxygen/html/html/GraphReachSolver_8h.html +96 -0
  97. package/SVF-doxygen/html/html/GraphReachSolver_8h_source.html +113 -0
  98. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +1 -1
  99. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
  100. package/SVF-doxygen/html/html/ICFGEdge_8h_source.html +1 -1
  101. package/SVF-doxygen/html/html/ICFGNode_8h_source.html +1 -1
  102. package/SVF-doxygen/html/html/ICFGStat_8h_source.html +1 -1
  103. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +2 -2
  104. package/SVF-doxygen/html/html/ICFG_8h_source.html +2 -2
  105. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +1 -1
  106. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +2 -2
  107. package/SVF-doxygen/html/html/IRGraph_8h_source.html +3 -3
  108. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +1 -1
  109. package/SVF-doxygen/html/html/LLVMModule_8h_source.html +1 -1
  110. package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +1 -1
  111. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +1 -1
  112. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +2 -2
  113. package/SVF-doxygen/html/html/LeakChecker_8h_source.html +2 -2
  114. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +1 -1
  115. package/SVF-doxygen/html/html/LocationSet_8h_source.html +1 -1
  116. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +1 -1
  117. package/SVF-doxygen/html/html/LockAnalysis_8h_source.html +1 -1
  118. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
  119. package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +1 -1
  120. package/SVF-doxygen/html/html/MHP_8cpp_source.html +1 -1
  121. package/SVF-doxygen/html/html/MHP_8h_source.html +1 -1
  122. package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +1 -1
  123. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
  124. package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +1 -1
  125. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -1
  126. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +1 -1
  127. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +1 -1
  128. package/SVF-doxygen/html/html/MTAStat_8h_source.html +1 -1
  129. package/SVF-doxygen/html/html/MTA_8cpp_source.html +1 -1
  130. package/SVF-doxygen/html/html/MTA_8h_source.html +1 -1
  131. package/SVF-doxygen/html/html/MemPartition_8cpp_source.html +1 -1
  132. package/SVF-doxygen/html/html/MemPartition_8h_source.html +1 -1
  133. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +1 -1
  134. package/SVF-doxygen/html/html/MemRegion_8h_source.html +1 -1
  135. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +1 -1
  136. package/SVF-doxygen/html/html/MemSSA_8h_source.html +1 -1
  137. package/SVF-doxygen/html/html/MutablePointsToDS_8h_source.html +1 -1
  138. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +1 -1
  139. package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +1 -1
  140. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +2 -2
  141. package/SVF-doxygen/html/html/OfflineConsG_8h_source.html +2 -2
  142. package/SVF-doxygen/html/html/Options_8cpp_source.html +7 -2
  143. package/SVF-doxygen/html/html/Options_8h_source.html +7 -2
  144. package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +1 -1
  145. package/SVF-doxygen/html/html/PAGBuilderFromFile_8h_source.html +1 -1
  146. package/SVF-doxygen/html/html/PCG_8cpp_source.html +1 -1
  147. package/SVF-doxygen/html/html/PCG_8h_source.html +1 -1
  148. package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +2 -2
  149. package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +2 -2
  150. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +1 -1
  151. package/SVF-doxygen/html/html/PTAStat_8h_source.html +1 -1
  152. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +1 -1
  153. package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +1 -1
  154. package/SVF-doxygen/html/html/PersistentPointsToCache_8h_source.html +1 -1
  155. package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +1 -1
  156. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +1 -1
  157. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +1 -1
  158. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +1 -1
  159. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +5 -5
  160. package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +1 -1
  161. package/SVF-doxygen/html/html/PointsTo_8h_source.html +1 -1
  162. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +1 -1
  163. package/SVF-doxygen/html/html/ProgSlice_8h_source.html +1 -1
  164. package/SVF-doxygen/html/html/SCC_8h_source.html +1 -1
  165. package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +2 -2
  166. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +1 -1
  167. package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +1 -1
  168. package/SVF-doxygen/html/html/SVFGEdge_8h_source.html +1 -1
  169. package/SVF-doxygen/html/html/SVFGNode_8h_source.html +1 -1
  170. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +1 -1
  171. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +1 -1
  172. package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +1 -1
  173. package/SVF-doxygen/html/html/SVFGStat_8h_source.html +1 -1
  174. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +2 -2
  175. package/SVF-doxygen/html/html/SVFG_8h_source.html +2 -2
  176. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +1 -1
  177. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +1 -1
  178. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +1 -1
  179. package/SVF-doxygen/html/html/SVFIR_8h_source.html +1 -1
  180. package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +1 -1
  181. package/SVF-doxygen/html/html/SVFModule_8h_source.html +1 -1
  182. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
  183. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +1 -1
  184. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +1 -1
  185. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +1 -1
  186. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +1 -1
  187. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +1 -1
  188. package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +1 -1
  189. package/SVF-doxygen/html/html/SaberAnnotator_8h_source.html +1 -1
  190. package/SVF-doxygen/html/html/SaberCheckerAPI_8cpp_source.html +1 -1
  191. package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +1 -1
  192. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +1 -1
  193. package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +1 -1
  194. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +4 -4
  195. package/SVF-doxygen/html/html/SrcSnkDDA_8h.html +3 -3
  196. package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +61 -61
  197. package/SVF-doxygen/html/html/SrcSnkSolver_8h_source.html +1 -1
  198. package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +1 -1
  199. package/SVF-doxygen/html/html/Steensgaard_8h_source.html +1 -1
  200. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +1 -1
  201. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +1 -1
  202. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +1 -1
  203. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +1 -1
  204. package/SVF-doxygen/html/html/TCT_8cpp_source.html +2 -2
  205. package/SVF-doxygen/html/html/TCT_8h_source.html +2 -2
  206. package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +1 -1
  207. package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +1 -1
  208. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
  209. package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +1 -1
  210. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +1 -1
  211. package/SVF-doxygen/html/html/TypeAnalysis_8h_source.html +1 -1
  212. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +1 -1
  213. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +1 -1
  214. package/SVF-doxygen/html/html/Util_2BasicTypes_8h_source.html +1 -1
  215. package/SVF-doxygen/html/html/VFGEdge_8h_source.html +1 -1
  216. package/SVF-doxygen/html/html/VFGNode_8h_source.html +1 -1
  217. package/SVF-doxygen/html/html/VFG_8cpp_source.html +2 -2
  218. package/SVF-doxygen/html/html/VFG_8h_source.html +2 -2
  219. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +1 -1
  220. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +3 -3
  221. package/SVF-doxygen/html/html/VersionedFlowSensitive_8h_source.html +1 -1
  222. package/SVF-doxygen/html/html/WPAFSSolver_8h_source.html +1 -1
  223. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +1 -1
  224. package/SVF-doxygen/html/html/WPAPass_8h_source.html +1 -1
  225. package/SVF-doxygen/html/html/WPASolver_8h_source.html +1 -1
  226. package/SVF-doxygen/html/html/WPAStat_8h_source.html +1 -1
  227. package/SVF-doxygen/html/html/WorkList_8h_source.html +1 -1
  228. package/SVF-doxygen/html/html/Z3Expr_8h_source.html +1 -1
  229. package/SVF-doxygen/html/html/annotated.html +302 -288
  230. package/SVF-doxygen/html/html/cfl_8cpp.html +171 -0
  231. package/SVF-doxygen/html/html/cfl_8cpp_source.html +95 -0
  232. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +51 -51
  233. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +3 -3
  234. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +39 -39
  235. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +3 -3
  236. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +56 -56
  237. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +3 -3
  238. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +55 -55
  239. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +3 -3
  240. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +51 -51
  241. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +3 -3
  242. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +52 -52
  243. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +3 -3
  244. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +59 -59
  245. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +3 -3
  246. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +53 -53
  247. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +3 -3
  248. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +33 -33
  249. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +3 -3
  250. package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer-members.html +90 -0
  251. package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer.html +458 -0
  252. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias-members.html +216 -0
  253. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +801 -0
  254. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.png +0 -0
  255. package/SVF-doxygen/html/html/classSVF_1_1CFLEdge-members.html +96 -0
  256. package/SVF-doxygen/html/html/classSVF_1_1CFLEdge.html +216 -0
  257. package/SVF-doxygen/html/html/classSVF_1_1CFLEdge.png +0 -0
  258. package/SVF-doxygen/html/html/classSVF_1_1CFLGrammar-members.html +110 -0
  259. package/SVF-doxygen/html/html/classSVF_1_1CFLGrammar.html +591 -0
  260. package/SVF-doxygen/html/html/classSVF_1_1CFLGrammar.png +0 -0
  261. package/SVF-doxygen/html/html/classSVF_1_1CFLGraph-members.html +122 -0
  262. package/SVF-doxygen/html/html/classSVF_1_1CFLGraph.html +756 -0
  263. package/SVF-doxygen/html/html/classSVF_1_1CFLGraph.png +0 -0
  264. package/SVF-doxygen/html/html/classSVF_1_1CFLNode-members.html +118 -0
  265. package/SVF-doxygen/html/html/classSVF_1_1CFLNode.html +257 -0
  266. package/SVF-doxygen/html/html/classSVF_1_1CFLNode.png +0 -0
  267. package/SVF-doxygen/html/html/classSVF_1_1CFLSolver-members.html +17 -28
  268. package/SVF-doxygen/html/html/classSVF_1_1CFLSolver.html +181 -548
  269. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl-members.html +36 -36
  270. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +3 -3
  271. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode-members.html +26 -26
  272. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +43 -43
  273. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA-members.html +57 -57
  274. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +3 -3
  275. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker-members.html +55 -55
  276. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +64 -64
  277. package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.png +0 -0
  278. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +55 -55
  279. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +3 -3
  280. package/SVF-doxygen/html/html/classSVF_1_1FileChecker-members.html +57 -57
  281. package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +66 -66
  282. package/SVF-doxygen/html/html/classSVF_1_1FileChecker.png +0 -0
  283. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +48 -48
  284. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +3 -3
  285. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +47 -47
  286. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +3 -3
  287. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +59 -59
  288. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +3 -3
  289. package/SVF-doxygen/html/html/classSVF_1_1GenericEdge.html +8 -24
  290. package/SVF-doxygen/html/html/classSVF_1_1GenericEdge.png +0 -0
  291. package/SVF-doxygen/html/html/classSVF_1_1GenericGraph.html +10 -9
  292. package/SVF-doxygen/html/html/classSVF_1_1GenericGraph.png +0 -0
  293. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +21 -20
  294. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
  295. package/SVF-doxygen/html/html/classSVF_1_1GrammarBase-members.html +93 -0
  296. package/SVF-doxygen/html/html/classSVF_1_1GrammarBase.html +399 -0
  297. package/SVF-doxygen/html/html/classSVF_1_1GrammarBase.png +0 -0
  298. package/SVF-doxygen/html/html/classSVF_1_1GrammarBuilder-members.html +85 -0
  299. package/SVF-doxygen/html/html/classSVF_1_1GrammarBuilder.html +226 -0
  300. package/SVF-doxygen/html/html/classSVF_1_1GraphReachSolver-members.html +106 -0
  301. package/SVF-doxygen/html/html/classSVF_1_1GraphReachSolver.html +937 -0
  302. package/SVF-doxygen/html/html/classSVF_1_1GraphReachSolver.png +0 -0
  303. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker-members.html +55 -55
  304. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +81 -81
  305. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.png +0 -0
  306. package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +80 -75
  307. package/SVF-doxygen/html/html/classSVF_1_1Options.html +130 -0
  308. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +25 -25
  309. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +17 -16
  310. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.png +0 -0
  311. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA-members.html +51 -51
  312. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +207 -207
  313. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.png +0 -0
  314. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkSolver.html +0 -12
  315. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +42 -42
  316. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +3 -3
  317. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +45 -45
  318. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +3 -3
  319. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +61 -61
  320. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +5 -5
  321. package/SVF-doxygen/html/html/classes.html +103 -101
  322. package/SVF-doxygen/html/html/cuddInt_8c.html +6 -6
  323. package/SVF-doxygen/html/html/cuddInt_8c_source.html +2 -2
  324. package/SVF-doxygen/html/html/cudd_8h.html +4 -4
  325. package/SVF-doxygen/html/html/dda_8cpp.html +2 -46
  326. package/SVF-doxygen/html/html/dda_8cpp_source.html +4 -5
  327. package/SVF-doxygen/html/html/dir_1870ebf480d659cc38d2dd7ac3aa8993.html +2 -0
  328. package/SVF-doxygen/html/html/dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html +2 -0
  329. package/SVF-doxygen/html/html/dir_95e22971b5dbae2382075a3453e365b4.html +2 -0
  330. package/SVF-doxygen/html/html/dir_97aefd0d527b934f1d99a682da8fe6a9.html +2 -0
  331. package/SVF-doxygen/html/html/dir_98f9a352f241e0e917d4efaa4086f6e8.html +89 -0
  332. package/SVF-doxygen/html/html/dir_ae8aa099e368efaa962140c6624142bc.html +91 -0
  333. package/SVF-doxygen/html/html/dir_d44c64559bbebec7f509842c48db8b23.html +2 -0
  334. package/SVF-doxygen/html/html/dir_e6cca4e14eddbb730e0cbe3cab632ce5.html +83 -0
  335. package/SVF-doxygen/html/html/dir_fa02919a30fec2d2c2d591b4d920d648.html +2 -0
  336. package/SVF-doxygen/html/html/files.html +268 -252
  337. package/SVF-doxygen/html/html/functions.html +2 -1
  338. package/SVF-doxygen/html/html/functions_0x7e.html +18 -0
  339. package/SVF-doxygen/html/html/functions_a.html +16 -14
  340. package/SVF-doxygen/html/html/functions_b.html +16 -5
  341. package/SVF-doxygen/html/html/functions_c.html +69 -26
  342. package/SVF-doxygen/html/html/functions_d.html +3 -1
  343. package/SVF-doxygen/html/html/functions_e.html +19 -4
  344. package/SVF-doxygen/html/html/functions_eval.html +0 -6
  345. package/SVF-doxygen/html/html/functions_eval_c.html +9 -0
  346. package/SVF-doxygen/html/html/functions_eval_f.html +0 -3
  347. package/SVF-doxygen/html/html/functions_f.html +28 -21
  348. package/SVF-doxygen/html/html/functions_func.html +18 -10
  349. package/SVF-doxygen/html/html/functions_func_0x7e.html +18 -0
  350. package/SVF-doxygen/html/html/functions_func_b.html +19 -8
  351. package/SVF-doxygen/html/html/functions_func_c.html +42 -18
  352. package/SVF-doxygen/html/html/functions_func_d.html +4 -2
  353. package/SVF-doxygen/html/html/functions_func_e.html +10 -1
  354. package/SVF-doxygen/html/html/functions_func_f.html +6 -3
  355. package/SVF-doxygen/html/html/functions_func_g.html +56 -10
  356. package/SVF-doxygen/html/html/functions_func_h.html +12 -2
  357. package/SVF-doxygen/html/html/functions_func_i.html +19 -9
  358. package/SVF-doxygen/html/html/functions_func_n.html +7 -1
  359. package/SVF-doxygen/html/html/functions_func_p.html +8 -4
  360. package/SVF-doxygen/html/html/functions_func_s.html +20 -6
  361. package/SVF-doxygen/html/html/functions_func_v.html +3 -2
  362. package/SVF-doxygen/html/html/functions_g.html +86 -21
  363. package/SVF-doxygen/html/html/functions_h.html +15 -5
  364. package/SVF-doxygen/html/html/functions_i.html +27 -12
  365. package/SVF-doxygen/html/html/functions_l.html +5 -2
  366. package/SVF-doxygen/html/html/functions_n.html +22 -7
  367. package/SVF-doxygen/html/html/functions_o.html +6 -6
  368. package/SVF-doxygen/html/html/functions_p.html +23 -16
  369. package/SVF-doxygen/html/html/functions_r.html +11 -6
  370. package/SVF-doxygen/html/html/functions_s.html +53 -17
  371. package/SVF-doxygen/html/html/functions_t.html +11 -7
  372. package/SVF-doxygen/html/html/functions_type_c.html +5 -1
  373. package/SVF-doxygen/html/html/functions_type_g.html +6 -3
  374. package/SVF-doxygen/html/html/functions_type_i.html +4 -2
  375. package/SVF-doxygen/html/html/functions_type_n.html +6 -3
  376. package/SVF-doxygen/html/html/functions_type_p.html +9 -0
  377. package/SVF-doxygen/html/html/functions_type_s.html +6 -0
  378. package/SVF-doxygen/html/html/functions_type_w.html +3 -1
  379. package/SVF-doxygen/html/html/functions_v.html +2 -1
  380. package/SVF-doxygen/html/html/functions_vars.html +2 -1
  381. package/SVF-doxygen/html/html/functions_vars_c.html +6 -0
  382. package/SVF-doxygen/html/html/functions_vars_e.html +6 -0
  383. package/SVF-doxygen/html/html/functions_vars_f.html +9 -0
  384. package/SVF-doxygen/html/html/functions_vars_g.html +17 -1
  385. package/SVF-doxygen/html/html/functions_vars_i.html +3 -0
  386. package/SVF-doxygen/html/html/functions_vars_l.html +3 -0
  387. package/SVF-doxygen/html/html/functions_vars_n.html +6 -0
  388. package/SVF-doxygen/html/html/functions_vars_r.html +3 -0
  389. package/SVF-doxygen/html/html/functions_vars_s.html +16 -0
  390. package/SVF-doxygen/html/html/functions_vars_t.html +6 -0
  391. package/SVF-doxygen/html/html/functions_vars_w.html +3 -1
  392. package/SVF-doxygen/html/html/functions_w.html +15 -1
  393. package/SVF-doxygen/html/html/globals_func_i.html +3 -10
  394. package/SVF-doxygen/html/html/globals_func_m.html +12 -11
  395. package/SVF-doxygen/html/html/globals_func_s.html +1 -0
  396. package/SVF-doxygen/html/html/globals_i.html +3 -10
  397. package/SVF-doxygen/html/html/globals_m.html +14 -13
  398. package/SVF-doxygen/html/html/globals_s.html +8 -7
  399. package/SVF-doxygen/html/html/hierarchy.html +433 -417
  400. package/SVF-doxygen/html/html/mta_8cpp.html +2 -46
  401. package/SVF-doxygen/html/html/mta_8cpp_source.html +3 -4
  402. package/SVF-doxygen/html/html/namespaceSVF.html +83 -6
  403. package/SVF-doxygen/html/html/namespacellvm.html +9 -0
  404. package/SVF-doxygen/html/html/namespacemembers_c.html +1 -1
  405. package/SVF-doxygen/html/html/namespacemembers_g.html +11 -2
  406. package/SVF-doxygen/html/html/namespacemembers_type.html +10 -1
  407. package/SVF-doxygen/html/html/saber_8cpp.html +2 -46
  408. package/SVF-doxygen/html/html/saber_8cpp_source.html +4 -5
  409. package/SVF-doxygen/html/html/search/all_0.js +1 -1
  410. package/SVF-doxygen/html/html/search/all_1.js +4 -4
  411. package/SVF-doxygen/html/html/search/all_10.js +8 -6
  412. package/SVF-doxygen/html/html/search/all_12.js +2 -1
  413. package/SVF-doxygen/html/html/search/all_13.js +20 -11
  414. package/SVF-doxygen/html/html/search/all_14.js +5 -3
  415. package/SVF-doxygen/html/html/search/all_16.js +2 -2
  416. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  417. package/SVF-doxygen/html/html/search/all_1b.js +6 -0
  418. package/SVF-doxygen/html/html/search/all_2.js +6 -4
  419. package/SVF-doxygen/html/html/search/all_3.js +27 -4
  420. package/SVF-doxygen/html/html/search/all_4.js +3 -2
  421. package/SVF-doxygen/html/html/search/all_5.js +5 -0
  422. package/SVF-doxygen/html/html/search/all_6.js +8 -5
  423. package/SVF-doxygen/html/html/search/all_7.js +40 -13
  424. package/SVF-doxygen/html/html/search/all_8.js +4 -1
  425. package/SVF-doxygen/html/html/search/all_9.js +9 -7
  426. package/SVF-doxygen/html/html/search/all_c.js +2 -1
  427. package/SVF-doxygen/html/html/search/all_d.js +2 -2
  428. package/SVF-doxygen/html/html/search/all_e.js +9 -5
  429. package/SVF-doxygen/html/html/search/all_f.js +4 -4
  430. package/SVF-doxygen/html/html/search/classes_2.js +7 -0
  431. package/SVF-doxygen/html/html/search/classes_3.js +1 -0
  432. package/SVF-doxygen/html/html/search/classes_5.js +1 -0
  433. package/SVF-doxygen/html/html/search/classes_6.js +7 -0
  434. package/SVF-doxygen/html/html/search/enumvalues_0.js +0 -2
  435. package/SVF-doxygen/html/html/search/enumvalues_2.js +3 -0
  436. package/SVF-doxygen/html/html/search/enumvalues_5.js +0 -1
  437. package/SVF-doxygen/html/html/search/files_2.js +11 -1
  438. package/SVF-doxygen/html/html/search/files_6.js +4 -1
  439. package/SVF-doxygen/html/html/search/functions_0.js +4 -2
  440. package/SVF-doxygen/html/html/search/functions_1.js +6 -4
  441. package/SVF-doxygen/html/html/search/functions_10.js +7 -3
  442. package/SVF-doxygen/html/html/search/functions_13.js +1 -1
  443. package/SVF-doxygen/html/html/search/functions_16.js +6 -0
  444. package/SVF-doxygen/html/html/search/functions_2.js +8 -0
  445. package/SVF-doxygen/html/html/search/functions_3.js +2 -2
  446. package/SVF-doxygen/html/html/search/functions_4.js +3 -0
  447. package/SVF-doxygen/html/html/search/functions_5.js +3 -3
  448. package/SVF-doxygen/html/html/search/functions_6.js +22 -10
  449. package/SVF-doxygen/html/html/search/functions_7.js +4 -1
  450. package/SVF-doxygen/html/html/search/functions_8.js +5 -4
  451. package/SVF-doxygen/html/html/search/functions_b.js +1 -1
  452. package/SVF-doxygen/html/html/search/functions_c.js +2 -0
  453. package/SVF-doxygen/html/html/search/functions_e.js +2 -2
  454. package/SVF-doxygen/html/html/search/typedefs_11.js +1 -0
  455. package/SVF-doxygen/html/html/search/typedefs_15.js +1 -1
  456. package/SVF-doxygen/html/html/search/typedefs_2.js +3 -2
  457. package/SVF-doxygen/html/html/search/typedefs_6.js +6 -3
  458. package/SVF-doxygen/html/html/search/typedefs_8.js +2 -2
  459. package/SVF-doxygen/html/html/search/typedefs_d.js +3 -3
  460. package/SVF-doxygen/html/html/search/typedefs_f.js +2 -0
  461. package/SVF-doxygen/html/html/search/variables_0.js +1 -1
  462. package/SVF-doxygen/html/html/search/variables_12.js +1 -0
  463. package/SVF-doxygen/html/html/search/variables_13.js +5 -0
  464. package/SVF-doxygen/html/html/search/variables_14.js +3 -1
  465. package/SVF-doxygen/html/html/search/variables_17.js +1 -1
  466. package/SVF-doxygen/html/html/search/variables_3.js +2 -0
  467. package/SVF-doxygen/html/html/search/variables_5.js +3 -1
  468. package/SVF-doxygen/html/html/search/variables_6.js +3 -0
  469. package/SVF-doxygen/html/html/search/variables_7.js +5 -1
  470. package/SVF-doxygen/html/html/search/variables_9.js +1 -0
  471. package/SVF-doxygen/html/html/search/variables_c.js +1 -0
  472. package/SVF-doxygen/html/html/search/variables_d.js +1 -1
  473. package/SVF-doxygen/html/html/search/variables_e.js +2 -0
  474. package/SVF-doxygen/html/html/st_8c.html +4 -4
  475. package/SVF-doxygen/html/html/st_8c_source.html +2 -2
  476. package/SVF-doxygen/html/html/st_8h.html +4 -4
  477. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CFLGraph_01_5_01_4-members.html +87 -0
  478. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CFLGraph_01_5_01_4.html +381 -0
  479. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CFLGraph_01_5_01_4.png +0 -0
  480. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1CFLNode_01_5_01_4_01_4.html +100 -0
  481. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1CFLNode_01_5_01_4_01_4.png +0 -0
  482. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CFLGraph_01_5_01_4-members.html +81 -0
  483. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CFLGraph_01_5_01_4.html +122 -0
  484. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CFLGraph_01_5_01_4.png +0 -0
  485. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CFLNode_01_5_01_4.html +96 -0
  486. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CFLNode_01_5_01_4.png +0 -0
  487. package/SVF-doxygen/html/html/svf-ex_8cpp.html +10 -54
  488. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +8 -9
  489. package/SVF-doxygen/html/html/tools_2CFL_2CMakeLists_8txt.html +102 -0
  490. package/SVF-doxygen/html/html/wpa_8cpp.html +2 -46
  491. package/SVF-doxygen/html/html/wpa_8cpp_source.html +3 -4
  492. package/include/CFL/CFGNormalizer.h +70 -0
  493. package/include/CFL/CFLAlias.h +124 -0
  494. package/include/CFL/CFLGrammar.h +127 -0
  495. package/include/CFL/CFLSolver.h +94 -0
  496. package/include/CFL/GrammarBuilder.h +65 -0
  497. package/include/Graphs/CFLGraph.h +175 -0
  498. package/include/Graphs/IRGraph.h +1 -1
  499. package/include/MemoryModel/PointerAnalysis.h +3 -3
  500. package/include/SABER/SrcSnkDDA.h +3 -2
  501. package/include/Util/GraphReachSolver.h +186 -0
  502. package/include/Util/Options.h +6 -0
  503. package/lib/CFL/CFGNormalizer.cpp +329 -0
  504. package/lib/CFL/CFLGrammar.cpp +101 -0
  505. package/lib/CFL/CFLSolver.cpp +106 -0
  506. package/lib/CFL/GrammarBuilder.cpp +155 -0
  507. package/lib/CMakeLists.txt +1 -0
  508. package/lib/Graphs/CFLGraph.cpp +225 -0
  509. package/lib/Util/Options.cpp +31 -0
  510. package/package.json +1 -1
  511. package/tools/CFL/CMakeLists.txt +12 -0
  512. package/tools/CFL/cfl.cpp +80 -0
  513. package/tools/CMakeLists.txt +1 -0
  514. package/tools/DDA/dda.cpp +0 -3
  515. package/tools/Example/svf-ex.cpp +0 -3
  516. package/tools/MTA/mta.cpp +0 -4
  517. package/tools/SABER/saber.cpp +0 -3
  518. package/tools/WPA/wpa.cpp +0 -4
@@ -129,7 +129,7 @@ $(function() {
129
129
  <div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
130
130
  <div class="ttc" id="classSVF_1_1Options_html_ab6115b28808af348e1f6a6b58b4cd84f"><div class="ttname"><a href="classSVF_1_1Options.html#ab6115b28808af348e1f6a6b58b4cd84f">SVF::Options::RegionedClustering</a></div><div class="ttdeci">static const llvm::cl::opt&lt; bool &gt; RegionedClustering</div><div class="ttdoc">Cluster partitions separately. </div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00058">Options.h:58</a></div></div>
131
131
  <div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115">HCLUST_METHOD_AVERAGE</a></div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00071">fastcluster.h:71</a></div></div>
132
- <div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="ContextDDA_8h_source.html#l00016">ContextDDA.h:16</a></div></div>
132
+ <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>
133
133
  <div class="ttc" id="classSVF_1_1NodeIDAllocator_html_a2bd3ca30fc9669d9a0327544bdb4557b"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">SVF::NodeIDAllocator::get</a></div><div class="ttdeci">static NodeIDAllocator * get(void)</div><div class="ttdoc">Return (singleton) allocator. </div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00025">NodeIDAllocator.cpp:25</a></div></div>
134
134
  <div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a09d2dbb2faab0a0e03bfa353534116a8"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a09d2dbb2faab0a0e03bfa353534116a8">SVF::NodeIDAllocator::Clusterer::DistanceMatrixTime</a></div><div class="ttdeci">static const std::string DistanceMatrixTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00116">NodeIDAllocator.h:116</a></div></div>
135
135
  <div class="ttc" id="fastcluster_8h_html"><div class="ttname"><a href="fastcluster_8h.html">fastcluster.h</a></div></div>
@@ -111,7 +111,7 @@ $(function() {
111
111
  <div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_adf415d244ef1fafe7a7de3c360553c0f"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#adf415d244ef1fafe7a7de3c360553c0f">SVF::NodeIDAllocator::Clusterer::getDistanceMatrix</a></div><div class="ttdeci">static double * getDistanceMatrix(const std::vector&lt; std::pair&lt; const PointsTo *, unsigned &gt;&gt; pointsToSets, const size_t numObjects, const Map&lt; NodeID, unsigned &gt; &amp;nodeMap, double &amp;distanceMatrixTime)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00431">NodeIDAllocator.cpp:431</a></div></div>
112
112
  <div class="ttc" id="classSVF_1_1NodeIDAllocator_html_a1e3a98be74d5dfd3b4c1b5f9c0941353"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator.html#a1e3a98be74d5dfd3b4c1b5f9c0941353">SVF::NodeIDAllocator::nullPointerId</a></div><div class="ttdeci">static const NodeID nullPointerId</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00050">NodeIDAllocator.h:50</a></div></div>
113
113
  <div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a1f74f1e72a844166f742d2d46efbbb5e"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a1f74f1e72a844166f742d2d46efbbb5e">SVF::NodeIDAllocator::Clusterer::DistOccMap</a></div><div class="ttdeci">Map&lt; NodePair, std::pair&lt; unsigned, unsigned &gt; &gt; DistOccMap</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00110">NodeIDAllocator.h:110</a></div></div>
114
- <div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="ContextDDA_8h_source.html#l00016">ContextDDA.h:16</a></div></div>
114
+ <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>
115
115
  <div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a09d2dbb2faab0a0e03bfa353534116a8"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a09d2dbb2faab0a0e03bfa353534116a8">SVF::NodeIDAllocator::Clusterer::DistanceMatrixTime</a></div><div class="ttdeci">static const std::string DistanceMatrixTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00116">NodeIDAllocator.h:116</a></div></div>
116
116
  <div class="ttc" id="fastcluster_8h_html"><div class="ttname"><a href="fastcluster_8h.html">fastcluster.h</a></div></div>
117
117
  <div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_afef85f0ecacd681357b3945f97d52964"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#afef85f0ecacd681357b3945f97d52964">SVF::NodeIDAllocator::Clusterer::TotalTime</a></div><div class="ttdeci">static const std::string TotalTime</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8h_source.html#l00120">NodeIDAllocator.h:120</a></div></div>
@@ -67,7 +67,7 @@ $(function() {
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
69
  <a href="OfflineConsG_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">//===- OfflineConsG.cpp -- Offline constraint graph -----------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * OfflineConsG.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: Oct 28, 2018</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Yuxiang Lei</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="OfflineConsG_8h.html">Graphs/OfflineConsG.h</a>&quot;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#ac6197a5515ace76b2d51451f5149aef7"> 39</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1OfflineConsG.html#ac6197a5515ace76b2d51451f5149aef7">OfflineConsG::buildOfflineCG</a>()</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;{</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <a class="code" href="classSVF_1_1OfflineConsG.html#a832953ac86452c45f55aa6ff3c545f36">LoadEdges</a> loads;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <a class="code" href="classSVF_1_1OfflineConsG.html#a9880cb387e24fa2c87297487411f95ea">StoreEdges</a> stores;</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="comment">// Add a copy edge between the ref node of src node and dst node</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">for</span> (ConstraintEdge::ConstraintEdgeSetTy::iterator it = LoadCGEdgeSet.begin(), eit =</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; LoadCGEdgeSet.end(); it != eit; ++it)</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; <a class="code" href="classSVF_1_1LoadCGEdge.html">LoadCGEdge</a> *load = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1LoadCGEdge.html">LoadCGEdge</a>&gt;(*it);</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; loads.insert(load);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = load-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>();</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = load-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; addRefLoadEdge(src, dst);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="comment">// Add a copy edge between src node and the ref node of dst node</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">for</span> (ConstraintEdge::ConstraintEdgeSetTy::iterator it = StoreCGEdgeSet.begin(), eit =</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; StoreCGEdgeSet.end(); it != eit; ++it)</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="classSVF_1_1StoreCGEdge.html">StoreCGEdge</a> *store = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1StoreCGEdge.html">StoreCGEdge</a>&gt;(*it);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; stores.insert(store);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = store-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>();</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = store-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; addRefStoreEdge(src, dst);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="comment">// Dump offline graph with all edges</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; dump(<span class="stringliteral">&quot;oCG_initial&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"> 68</span>&#160; <span class="comment">// Remove load and store edges in offline constraint graph</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">for</span> (LoadEdges::iterator it = loads.begin(), eit = loads.end(); it != eit; ++it)</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; removeLoadEdge(*it);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; }</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">for</span> (StoreEdges::iterator it = stores.begin(), eit = stores.end(); it != eit; ++it)</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; removeStoreEdge(*it);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; }</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="comment">// Dump offline graph with removed load and store edges</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; dump(<span class="stringliteral">&quot;oCG_final&quot;</span>);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;}</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a6c8afd3dc37fc60aecc6efd238312940"> 86</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a6c8afd3dc37fc60aecc6efd238312940">OfflineConsG::addRefLoadEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst)</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;{</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; createRefNode(src);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ref = nodeToRefMap[src];</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">return</span> addCopyCGEdge(ref, dst);</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;</div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a99e2de184d8f532074666881b67e0b17"> 97</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a99e2de184d8f532074666881b67e0b17">OfflineConsG::addRefStoreEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst)</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;{</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; createRefNode(dst);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ref = nodeToRefMap[dst];</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">return</span> addCopyCGEdge(src, ref);</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="l00107"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a984e82f3185be03b8d1cb942685b2010"> 107</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a984e82f3185be03b8d1cb942685b2010">OfflineConsG::createRefNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</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="keywordflow">if</span> (hasRef(nodeId))</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> refId = pag-&gt;addDummyValNode();</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>* node = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a>(refId);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; addConstraintNode(node, refId);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; refNodes.insert(refId);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; nodeToRefMap[nodeId] = refId;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;}</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#ab7d06ed7e5e186b97452391c1162b181"> 124</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1OfflineConsG.html#ab7d06ed7e5e186b97452391c1162b181">OfflineConsG::solveOfflineSCC</a>(<a class="code" href="classSVF_1_1SCCDetection.html">OSCC</a>* oscc)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;{</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="comment">// Build offline nodeToRepMap</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; buildOfflineMap(oscc);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;}</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div><div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#afc60c6d897517437597c54e8f83622eb"> 133</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1OfflineConsG.html#afc60c6d897517437597c54e8f83622eb">OfflineConsG::buildOfflineMap</a>(<a class="code" href="classSVF_1_1SCCDetection.html">OSCC</a>* oscc)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;{</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">for</span> (NodeToRepMap::const_iterator it = nodeToRefMap.begin(); it != nodeToRefMap.end(); ++it)</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node = it-&gt;first;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ref = getRef(node);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rep = solveRep(oscc,oscc-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a3a5fdc9330a657240f77199f5aee602d">repNode</a>(ref));</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">if</span> (!isaRef(rep) &amp;&amp; !isaRef(node))</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; setNorRep(node, rep);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;}</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#aeb069df3700dafcf365f11d697501c8f"> 149</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1OfflineConsG.html#aeb069df3700dafcf365f11d697501c8f">OfflineConsG::solveRep</a>(<a class="code" href="classSVF_1_1SCCDetection.html">OSCC</a>* oscc, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rep)</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;{</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">if</span> (isaRef(rep))</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; {</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> subNodes = oscc-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a6ab5eff6a576e6d8703c1ea29b7f425d">subNodes</a>(rep);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator subIt = subNodes.begin(), subEit = subNodes.end(); subIt != subEit; ++subIt)</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">if</span> (isaRef(*subIt))</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; rep = *subIt;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">return</span> rep;</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;</div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a727c635892986998167f30ff23a75f4c"> 169</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a727c635892986998167f30ff23a75f4c">OfflineConsG::dump</a>(std::string name)</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;{</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a2780c16611375631cd48bf9487f9e0bf">Options::OCGDotGraph</a>)</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="classllvm_1_1GraphPrinter.html#af6ed328e74882d2b5e2b4039cb836928">GraphPrinter::WriteGraphToFile</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>(), name, <span class="keyword">this</span>);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;}</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="comment">// --- GraphTraits specialization for offline constraint graph ---</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacellvm.html">llvm</a></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;{</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html"> 182</a></span>&#160;<span class="keyword">struct </span>DOTGraphTraits&lt;<a class="code" href="classSVF_1_1OfflineConsG.html">OfflineConsG</a>*&gt; : <span class="keyword">public</span> DOTGraphTraits&lt;SVFIR*&gt;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;{</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html#a4de1b76db4f60446aa2db97535fff54f"> 185</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1ConstraintNode.html">ConstraintNode</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html#a4de1b76db4f60446aa2db97535fff54f">NodeType</a>;</div><div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html#aa51e1638f3a8423a7eb77f7ba153a1c3"> 186</a></span>&#160; <a class="code" href="structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html#aa51e1638f3a8423a7eb77f7ba153a1c3">DOTGraphTraits</a>(<span class="keywordtype">bool</span> isSimple = <span class="keyword">false</span>) :</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; DOTGraphTraits&lt;<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>*&gt;(isSimple)</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; }</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;</div><div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html#af55f35dde97c37966d9d3396662e00aa"> 192</a></span>&#160; <span class="keyword">static</span> std::string <a class="code" href="structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html#af55f35dde97c37966d9d3396662e00aa">getGraphName</a>(<a class="code" href="classSVF_1_1OfflineConsG.html">OfflineConsG</a>*)</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; {</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Offline Constraint Graph&quot;</span>;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;</div><div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html#aacbbb986a293424442c6560d3a2cf357"> 199</a></span>&#160; <span class="keyword">static</span> std::string <a class="code" href="structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html#aacbbb986a293424442c6560d3a2cf357">getNodeLabel</a>(NodeType *n, <a class="code" href="classSVF_1_1OfflineConsG.html">OfflineConsG</a>*)</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; std::string str;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>()-&gt;getGNode(n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>()))</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; {</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *node = <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>()-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordtype">bool</span> briefDisplay = <span class="keyword">true</span>;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordtype">bool</span> nameDisplay = <span class="keyword">true</span>;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">if</span> (briefDisplay)</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> (SVFUtil::isa&lt;ValVar&gt;(node))</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">if</span> (nameDisplay)</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a54b2a5ed3ed21e54eaf04182f0338333">getValueName</a>();</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</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; rawstr &lt;&lt; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; {</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="comment">// print the whole value</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;DummyValVar&gt;(node) &amp;&amp; !SVFUtil::isa&lt;DummyObjVar&gt;(node))</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; rawstr &lt;&lt; *node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>();</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">return</span> rawstr.str();</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; <span class="keywordflow">else</span></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; rawstr&lt;&lt; n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div><div class="line"><a name="l00241"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html#abd16485dc137eaede56cbf8d895ea111"> 241</a></span>&#160; <span class="keyword">static</span> std::string <a class="code" href="structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html#abd16485dc137eaede56cbf8d895ea111">getNodeAttributes</a>(NodeType *n, <a class="code" href="classSVF_1_1OfflineConsG.html">OfflineConsG</a>*)</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; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>()-&gt;getGNode(n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>()))</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; {</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *node = <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>()-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(n-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;ValVar&gt;(node))</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; {</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;GepValVar&gt;(node))</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=hexagon&quot;</span>;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;DummyValVar&gt;(node))</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=diamond&quot;</span>;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=box&quot;</span>;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; }</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ObjVar&gt;(node))</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; {</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;GepObjVar&gt;(node))</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=doubleoctagon&quot;</span>;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;FIObjVar&gt;(node))</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=box3d&quot;</span>;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;DummyObjVar&gt;(node))</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=tab&quot;</span>;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=component&quot;</span>;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;RetPN&gt;(node))</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; {</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=Mrecord&quot;</span>;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; }</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;VarArgPN&gt;(node))</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; {</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=octagon&quot;</span>;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; }</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; {</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(0 &amp;&amp; <span class="stringliteral">&quot;no such kind!!&quot;</span>);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; }</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;shape=folder&quot;</span>;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; }</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span> EdgeIter&gt;</div><div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html#a0cda5ff37828cb37d152c25878fa208d"> 287</a></span>&#160; <span class="keyword">static</span> std::string <a class="code" href="structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html#a0cda5ff37828cb37d152c25878fa208d">getEdgeAttributes</a>(NodeType*, EdgeIter EI, <a class="code" href="classSVF_1_1OfflineConsG.html">OfflineConsG</a>*)</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; {</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <a class="code" href="classSVF_1_1ConstraintEdge.html">ConstraintEdge</a>* edge = *(EI.getCurrent());</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge &amp;&amp; <span class="stringliteral">&quot;No edge found!!&quot;</span>);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375aed68bc43e8aae49e8590e140eb0ffaf3">ConstraintEdge::Addr</a>)</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; {</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;color=green&quot;</span>;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; }</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a29b0aa3353f866ef1655ab6d4716feb9">ConstraintEdge::Copy</a>)</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; {</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;color=black&quot;</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375acfd0a194af0da66162545f0089eb4baa">ConstraintEdge::NormalGep</a></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; || edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375ae5df3ce07dd670b48916f7b8ab33ae5a">ConstraintEdge::VariantGep</a>)</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;color=purple&quot;</span>;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a20d6a102ddc06257a822ffffcc5a3b47">ConstraintEdge::Store</a>)</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;color=blue&quot;</span>;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; }</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>() == <a class="code" href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a1bdeb9a06641d16b43391120812b40b2">ConstraintEdge::Load</a>)</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;color=red&quot;</span>;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; }</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; {</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(0 &amp;&amp; <span class="stringliteral">&quot;No such kind edge!!&quot;</span>);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; }</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span> EdgeIter&gt;</div><div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html#a046f087794d334eb303a2cea66aad3c3"> 320</a></span>&#160; <span class="keyword">static</span> std::string <a class="code" href="structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html#a046f087794d334eb303a2cea66aad3c3">getEdgeSourceLabel</a>(NodeType*, EdgeIter)</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; {</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; }</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;};</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;} <span class="comment">// End namespace llvm</span></div><div class="ttc" id="classSVF_1_1GenericEdge_html_abe8525c542def8162b094c169a01993b"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">SVF::GenericEdge::getEdgeKind</a></div><div class="ttdeci">GEdgeKind getEdgeKind() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00081">GenericGraph.h:81</a></div></div>
70
- <div class="ttc" id="namespacellvm_html"><div class="ttname"><a href="namespacellvm.html">llvm</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00328">CHG.h:328</a></div></div>
70
+ <div class="ttc" id="namespacellvm_html"><div class="ttname"><a href="namespacellvm.html">llvm</a></div><div class="ttdef"><b>Definition:</b> <a href="CFLGraph_8h_source.html#l00152">CFLGraph.h:152</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1SCCDetection_html_a6ab5eff6a576e6d8703c1ea29b7f425d"><div class="ttname"><a href="classSVF_1_1SCCDetection.html#a6ab5eff6a576e6d8703c1ea29b7f425d">SVF::SCCDetection::subNodes</a></div><div class="ttdeci">const NodeBS &amp; subNodes(NodeID n) const</div><div class="ttdoc">get all subnodes in one scc, if size is empty insert itself into the set </div><div class="ttdef"><b>Definition:</b> <a href="SCC_8h_source.html#l00173">SCC.h:173</a></div></div>
72
72
  <div class="ttc" id="classSVF_1_1ConstraintEdge_html_a663af27955ba0c545f34fa1f076b7375ae5df3ce07dd670b48916f7b8ab33ae5a"><div class="ttname"><a href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375ae5df3ce07dd670b48916f7b8ab33ae5a">SVF::ConstraintEdge::VariantGep</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00056">ConsGEdge.h:56</a></div></div>
73
73
  <div class="ttc" id="classSVF_1_1ConstraintEdge_html_a663af27955ba0c545f34fa1f076b7375a1bdeb9a06641d16b43391120812b40b2"><div class="ttname"><a href="classSVF_1_1ConstraintEdge.html#a663af27955ba0c545f34fa1f076b7375a1bdeb9a06641d16b43391120812b40b2">SVF::ConstraintEdge::Load</a></div><div class="ttdef"><b>Definition:</b> <a href="ConsGEdge_8h_source.html#l00056">ConsGEdge.h:56</a></div></div>
@@ -111,7 +111,7 @@ $(function() {
111
111
  <div class="ttc" id="classSVF_1_1OfflineConsG_html_a727c635892986998167f30ff23a75f4c"><div class="ttname"><a href="classSVF_1_1OfflineConsG.html#a727c635892986998167f30ff23a75f4c">SVF::OfflineConsG::dump</a></div><div class="ttdeci">void dump(std::string name)</div><div class="ttdef"><b>Definition:</b> <a href="OfflineConsG_8cpp_source.html#l00169">OfflineConsG.cpp:169</a></div></div>
112
112
  <div class="ttc" id="classSVF_1_1SVFVar_html_a54b2a5ed3ed21e54eaf04182f0338333"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a54b2a5ed3ed21e54eaf04182f0338333">SVF::SVFVar::getValueName</a></div><div class="ttdeci">virtual const std::string getValueName() const =0</div><div class="ttdoc">Get name of the LLVM value. </div></div>
113
113
  <div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4_html_a046f087794d334eb303a2cea66aad3c3"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html#a046f087794d334eb303a2cea66aad3c3">llvm::DOTGraphTraits&lt; OfflineConsG * &gt;::getEdgeSourceLabel</a></div><div class="ttdeci">static std::string getEdgeSourceLabel(NodeType *, EdgeIter)</div><div class="ttdef"><b>Definition:</b> <a href="OfflineConsG_8cpp_source.html#l00320">OfflineConsG.cpp:320</a></div></div>
114
- <div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="ContextDDA_8h_source.html#l00016">ContextDDA.h:16</a></div></div>
114
+ <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>
115
115
  <div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00165">GenericGraph.h:165</a></div></div>
116
116
  <div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00092">SVFBasicTypes.h:92</a></div></div>
117
117
  <div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4_html_af55f35dde97c37966d9d3396662e00aa"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html#af55f35dde97c37966d9d3396662e00aa">llvm::DOTGraphTraits&lt; OfflineConsG * &gt;::getGraphName</a></div><div class="ttdeci">static std::string getGraphName(OfflineConsG *)</div><div class="ttdoc">Return name of the graph. </div><div class="ttdef"><b>Definition:</b> <a href="OfflineConsG_8cpp_source.html#l00192">OfflineConsG.cpp:192</a></div></div>
@@ -66,7 +66,7 @@ $(function() {
66
66
  <div class="title">OfflineConsG.h</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="OfflineConsG_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">//===- OfflineConsG.h -- Offline constraint graph -----------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * OfflineConsG.h</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: Oct 28, 2018</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Yuxiang Lei</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#ifndef OFFLINECONSG_H</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#define OFFLINECONSG_H</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="ConsG_8h.html">Graphs/ConsG.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SCC_8h.html">Util/SCC.h</a>&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;{</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html"> 44</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1OfflineConsG.html">OfflineConsG</a>: <span class="keyword">public</span> <a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</a></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#ab7ce6d127d85cedfdeb6501195b8818f"> 48</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1SCCDetection.html">SCCDetection&lt;OfflineConsG*&gt;</a> <a class="code" href="classSVF_1_1OfflineConsG.html#ab7ce6d127d85cedfdeb6501195b8818f">OSCC</a>;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a832953ac86452c45f55aa6ff3c545f36"> 49</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;LoadCGEdge*&gt;</a> <a class="code" href="classSVF_1_1OfflineConsG.html#a832953ac86452c45f55aa6ff3c545f36">LoadEdges</a>;</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a9880cb387e24fa2c87297487411f95ea"> 50</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;StoreCGEdge*&gt;</a> <a class="code" href="classSVF_1_1OfflineConsG.html#a9880cb387e24fa2c87297487411f95ea">StoreEdges</a>;</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="keyword">protected</span>:</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a381e656d0034b91935f62aeb7924dd4e"> 53</a></span>&#160; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> <a class="code" href="classSVF_1_1OfflineConsG.html#a381e656d0034b91935f62aeb7924dd4e">refNodes</a>;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#aebeb8a44fcfbb677a738fa04c8e9c5e1"> 54</a></span>&#160; <a class="code" href="classSVF_1_1ConstraintGraph.html#afe34ca6bdbb22b188799a4297fd19004">NodeToRepMap</a> <a class="code" href="classSVF_1_1OfflineConsG.html#aebeb8a44fcfbb677a738fa04c8e9c5e1">nodeToRefMap</a>; <span class="comment">// a --&gt; *a</span></div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a6eff43757344f75cd3775d473f14fd9c"> 55</a></span>&#160; <a class="code" href="classSVF_1_1ConstraintGraph.html#afe34ca6bdbb22b188799a4297fd19004">NodeToRepMap</a> <a class="code" href="classSVF_1_1OfflineConsG.html#a6eff43757344f75cd3775d473f14fd9c">norToRepMap</a>; <span class="comment">// for each *a construct a --&gt; rep, i.e., mapping a node of to a rep node for online constraint solving</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#ae61c4f509b90dd43f63a07560ba3562f"> 58</a></span>&#160; <a class="code" href="classSVF_1_1OfflineConsG.html#ae61c4f509b90dd43f63a07560ba3562f">OfflineConsG</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a> *p) : <a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</a>(p),</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; nodeToRefMap( {}), <a class="code" href="classSVF_1_1OfflineConsG.html#a6eff43757344f75cd3775d473f14fd9c">norToRepMap</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; <a class="code" href="classSVF_1_1OfflineConsG.html#ac6197a5515ace76b2d51451f5149aef7">buildOfflineCG</a>();</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="comment">// Determine whether a node has a OCG rep node</span></div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a0a03ef009894059fa2591ea5f9ef87d9"> 65</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a0a03ef009894059fa2591ea5f9ef87d9">hasOCGRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)<span class="keyword"> const</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1OfflineConsG.html#af61052f5a84ca45304833de7eaf85319">hasNorRep</a>(node);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="comment">// Get a node&#39;s OCG rep node</span></div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a3f390900ee8761055c6d59107bc0ad27"> 70</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1OfflineConsG.html#a3f390900ee8761055c6d59107bc0ad27">getOCGRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)<span class="keyword"> const</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a5deba2c74d1a3dc24ec55e3ecf3227be">getNorRep</a>(node);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// Get the OCG node to rep map (this map is const and should not be modified)</span></div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a4c27bd33977816db33d0e7d92036239a"> 75</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#afe34ca6bdbb22b188799a4297fd19004">NodeToRepMap</a>&amp; <a class="code" href="classSVF_1_1OfflineConsG.html#a4c27bd33977816db33d0e7d92036239a">getOCGRepMap</a> ()<span class="keyword"> const</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a6eff43757344f75cd3775d473f14fd9c">norToRepMap</a>;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; }</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="comment">// Determine whether a node is a ref node</span></div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#ac2e7ddb9b7b45f9db47b60d8a0be06ae"> 81</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1OfflineConsG.html#ac2e7ddb9b7b45f9db47b60d8a0be06ae">isaRef</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)<span class="keyword"> const</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; NodeSet::const_iterator it = refNodes.find(node);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">return</span> it != refNodes.end();</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; };</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="comment">// Determine whether a node has ref nodes</span></div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a576cfa438bb109b7e451b410cd3a8569"> 87</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a576cfa438bb109b7e451b410cd3a8569">hasRef</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)<span class="keyword"> const</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; NodeToRepMap::const_iterator it = nodeToRefMap.find(node);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">return</span> it != nodeToRefMap.end();</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">// Use a constraint node to track its corresponding ref node</span></div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#af701f54b1db07a16e926cd40ab17eb12"> 93</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1OfflineConsG.html#af701f54b1db07a16e926cd40ab17eb12">getRef</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)<span class="keyword"> const</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; NodeToRepMap::const_iterator it = nodeToRefMap.find(node);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != nodeToRefMap.end() &amp;&amp; <span class="stringliteral">&quot;No such ref node in ref to node map!&quot;</span>);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</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;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">// Constraint solver of offline constraint graph</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="comment">//{@</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1OfflineConsG.html#ab7d06ed7e5e186b97452391c1162b181">solveOfflineSCC</a>(OSCC* oscc);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1OfflineConsG.html#afc60c6d897517437597c54e8f83622eb">buildOfflineMap</a>(OSCC* oscc);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="comment">// Dump graph into dot file</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a727c635892986998167f30ff23a75f4c">dump</a>(std::string name);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#af61052f5a84ca45304833de7eaf85319"> 110</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1OfflineConsG.html#af61052f5a84ca45304833de7eaf85319">hasNorRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nor)<span class="keyword"> const</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; NodeToRepMap::const_iterator it = norToRepMap.find(nor);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">return</span> it != norToRepMap.end();</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; };</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a3cb6384160b50bd0a94de3fd2eb6facd"> 116</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a3cb6384160b50bd0a94de3fd2eb6facd">setNorRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nor, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rep)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; norToRepMap.insert(std::pair&lt;NodeID, NodeID&gt;(nor, rep));</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; };</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a5deba2c74d1a3dc24ec55e3ecf3227be"> 121</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1OfflineConsG.html#a5deba2c74d1a3dc24ec55e3ecf3227be">getNorRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nor)<span class="keyword"> const</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; NodeToRepMap::const_iterator it = norToRepMap.find(nor);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != norToRepMap.end() &amp;&amp; <span class="stringliteral">&quot;No such rep node in nor to rep map!&quot;</span>);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; };</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1OfflineConsG.html#aeb069df3700dafcf365f11d697501c8f">solveRep</a>(OSCC* oscc, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rep);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1OfflineConsG.html#ac6197a5515ace76b2d51451f5149aef7">buildOfflineCG</a>();</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a6c8afd3dc37fc60aecc6efd238312940">addRefLoadEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a99e2de184d8f532074666881b67e0b17">addRefStoreEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a984e82f3185be03b8d1cb942685b2010">createRefNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;};</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacellvm.html">llvm</a></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;{</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="comment">/* !</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="comment"> * GraphTraits specializations for the generic graph algorithms.</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="comment"> * Provide graph traits for traversing from a constraint node using standard graph traversals.</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1OfflineConsG_01_5_01_4.html"> 144</a></span>&#160;<span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>GraphTraits&lt;<a class="code" href="namespaceSVF.html">SVF</a>::<a class="code" href="classSVF_1_1OfflineConsG.html#ae61c4f509b90dd43f63a07560ba3562f">OfflineConsG</a>*&gt; : <span class="keyword">public</span> GraphTraits&lt;SVF::GenericGraph&lt;SVF::ConstraintNode,SVF::ConstraintEdge&gt;* &gt;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;{</div><div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1OfflineConsG_01_5_01_4.html#acc7fa524cd8c4c4b786136c642ee2d58"> 146</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1ConstraintNode.html">SVF::ConstraintNode</a> *<a class="code" href="structllvm_1_1GraphTraits_3_01SVF_1_1OfflineConsG_01_5_01_4.html#acc7fa524cd8c4c4b786136c642ee2d58">NodeRef</a>;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;};</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;} <span class="comment">// End namespace llvm</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="preprocessor">#endif //OFFLINECONSG_H</span></div><div class="ttc" id="namespacellvm_html"><div class="ttname"><a href="namespacellvm.html">llvm</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00328">CHG.h:328</a></div></div>
69
+ <a href="OfflineConsG_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">//===- OfflineConsG.h -- Offline constraint graph -----------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * OfflineConsG.h</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: Oct 28, 2018</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Yuxiang Lei</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#ifndef OFFLINECONSG_H</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#define OFFLINECONSG_H</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="ConsG_8h.html">Graphs/ConsG.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SCC_8h.html">Util/SCC.h</a>&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;{</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html"> 44</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1OfflineConsG.html">OfflineConsG</a>: <span class="keyword">public</span> <a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</a></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#ab7ce6d127d85cedfdeb6501195b8818f"> 48</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1SCCDetection.html">SCCDetection&lt;OfflineConsG*&gt;</a> <a class="code" href="classSVF_1_1OfflineConsG.html#ab7ce6d127d85cedfdeb6501195b8818f">OSCC</a>;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a832953ac86452c45f55aa6ff3c545f36"> 49</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;LoadCGEdge*&gt;</a> <a class="code" href="classSVF_1_1OfflineConsG.html#a832953ac86452c45f55aa6ff3c545f36">LoadEdges</a>;</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a9880cb387e24fa2c87297487411f95ea"> 50</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;StoreCGEdge*&gt;</a> <a class="code" href="classSVF_1_1OfflineConsG.html#a9880cb387e24fa2c87297487411f95ea">StoreEdges</a>;</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="keyword">protected</span>:</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a381e656d0034b91935f62aeb7924dd4e"> 53</a></span>&#160; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> <a class="code" href="classSVF_1_1OfflineConsG.html#a381e656d0034b91935f62aeb7924dd4e">refNodes</a>;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#aebeb8a44fcfbb677a738fa04c8e9c5e1"> 54</a></span>&#160; <a class="code" href="classSVF_1_1ConstraintGraph.html#afe34ca6bdbb22b188799a4297fd19004">NodeToRepMap</a> <a class="code" href="classSVF_1_1OfflineConsG.html#aebeb8a44fcfbb677a738fa04c8e9c5e1">nodeToRefMap</a>; <span class="comment">// a --&gt; *a</span></div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a6eff43757344f75cd3775d473f14fd9c"> 55</a></span>&#160; <a class="code" href="classSVF_1_1ConstraintGraph.html#afe34ca6bdbb22b188799a4297fd19004">NodeToRepMap</a> <a class="code" href="classSVF_1_1OfflineConsG.html#a6eff43757344f75cd3775d473f14fd9c">norToRepMap</a>; <span class="comment">// for each *a construct a --&gt; rep, i.e., mapping a node of to a rep node for online constraint solving</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#ae61c4f509b90dd43f63a07560ba3562f"> 58</a></span>&#160; <a class="code" href="classSVF_1_1OfflineConsG.html#ae61c4f509b90dd43f63a07560ba3562f">OfflineConsG</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a> *p) : <a class="code" href="classSVF_1_1ConstraintGraph.html">ConstraintGraph</a>(p),</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; nodeToRefMap( {}), <a class="code" href="classSVF_1_1OfflineConsG.html#a6eff43757344f75cd3775d473f14fd9c">norToRepMap</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; <a class="code" href="classSVF_1_1OfflineConsG.html#ac6197a5515ace76b2d51451f5149aef7">buildOfflineCG</a>();</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="comment">// Determine whether a node has a OCG rep node</span></div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a0a03ef009894059fa2591ea5f9ef87d9"> 65</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a0a03ef009894059fa2591ea5f9ef87d9">hasOCGRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)<span class="keyword"> const</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1OfflineConsG.html#af61052f5a84ca45304833de7eaf85319">hasNorRep</a>(node);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="comment">// Get a node&#39;s OCG rep node</span></div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a3f390900ee8761055c6d59107bc0ad27"> 70</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1OfflineConsG.html#a3f390900ee8761055c6d59107bc0ad27">getOCGRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)<span class="keyword"> const</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a5deba2c74d1a3dc24ec55e3ecf3227be">getNorRep</a>(node);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// Get the OCG node to rep map (this map is const and should not be modified)</span></div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a4c27bd33977816db33d0e7d92036239a"> 75</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1ConstraintGraph.html#afe34ca6bdbb22b188799a4297fd19004">NodeToRepMap</a>&amp; <a class="code" href="classSVF_1_1OfflineConsG.html#a4c27bd33977816db33d0e7d92036239a">getOCGRepMap</a> ()<span class="keyword"> const</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a6eff43757344f75cd3775d473f14fd9c">norToRepMap</a>;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; }</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="comment">// Determine whether a node is a ref node</span></div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#ac2e7ddb9b7b45f9db47b60d8a0be06ae"> 81</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1OfflineConsG.html#ac2e7ddb9b7b45f9db47b60d8a0be06ae">isaRef</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)<span class="keyword"> const</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; NodeSet::const_iterator it = refNodes.find(node);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">return</span> it != refNodes.end();</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; };</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="comment">// Determine whether a node has ref nodes</span></div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a576cfa438bb109b7e451b410cd3a8569"> 87</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a576cfa438bb109b7e451b410cd3a8569">hasRef</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)<span class="keyword"> const</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; NodeToRepMap::const_iterator it = nodeToRefMap.find(node);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">return</span> it != nodeToRefMap.end();</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">// Use a constraint node to track its corresponding ref node</span></div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#af701f54b1db07a16e926cd40ab17eb12"> 93</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1OfflineConsG.html#af701f54b1db07a16e926cd40ab17eb12">getRef</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)<span class="keyword"> const</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; NodeToRepMap::const_iterator it = nodeToRefMap.find(node);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != nodeToRefMap.end() &amp;&amp; <span class="stringliteral">&quot;No such ref node in ref to node map!&quot;</span>);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</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;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">// Constraint solver of offline constraint graph</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="comment">//{@</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1OfflineConsG.html#ab7d06ed7e5e186b97452391c1162b181">solveOfflineSCC</a>(OSCC* oscc);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1OfflineConsG.html#afc60c6d897517437597c54e8f83622eb">buildOfflineMap</a>(OSCC* oscc);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="comment">// Dump graph into dot file</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a727c635892986998167f30ff23a75f4c">dump</a>(std::string name);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#af61052f5a84ca45304833de7eaf85319"> 110</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1OfflineConsG.html#af61052f5a84ca45304833de7eaf85319">hasNorRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nor)<span class="keyword"> const</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; NodeToRepMap::const_iterator it = norToRepMap.find(nor);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">return</span> it != norToRepMap.end();</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; };</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a3cb6384160b50bd0a94de3fd2eb6facd"> 116</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a3cb6384160b50bd0a94de3fd2eb6facd">setNorRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nor, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rep)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; norToRepMap.insert(std::pair&lt;NodeID, NodeID&gt;(nor, rep));</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; };</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="classSVF_1_1OfflineConsG.html#a5deba2c74d1a3dc24ec55e3ecf3227be"> 121</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1OfflineConsG.html#a5deba2c74d1a3dc24ec55e3ecf3227be">getNorRep</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nor)<span class="keyword"> const</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; NodeToRepMap::const_iterator it = norToRepMap.find(nor);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it != norToRepMap.end() &amp;&amp; <span class="stringliteral">&quot;No such rep node in nor to rep map!&quot;</span>);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; };</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1OfflineConsG.html#aeb069df3700dafcf365f11d697501c8f">solveRep</a>(OSCC* oscc, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rep);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1OfflineConsG.html#ac6197a5515ace76b2d51451f5149aef7">buildOfflineCG</a>();</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a6c8afd3dc37fc60aecc6efd238312940">addRefLoadEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a99e2de184d8f532074666881b67e0b17">addRefStoreEdge</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1OfflineConsG.html#a984e82f3185be03b8d1cb942685b2010">createRefNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;};</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacellvm.html">llvm</a></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;{</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="comment">/* !</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="comment"> * GraphTraits specializations for the generic graph algorithms.</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="comment"> * Provide graph traits for traversing from a constraint node using standard graph traversals.</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1OfflineConsG_01_5_01_4.html"> 144</a></span>&#160;<span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>GraphTraits&lt;<a class="code" href="namespaceSVF.html">SVF</a>::<a class="code" href="classSVF_1_1OfflineConsG.html#ae61c4f509b90dd43f63a07560ba3562f">OfflineConsG</a>*&gt; : <span class="keyword">public</span> GraphTraits&lt;SVF::GenericGraph&lt;SVF::ConstraintNode,SVF::ConstraintEdge&gt;* &gt;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;{</div><div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="structllvm_1_1GraphTraits_3_01SVF_1_1OfflineConsG_01_5_01_4.html#acc7fa524cd8c4c4b786136c642ee2d58"> 146</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1ConstraintNode.html">SVF::ConstraintNode</a> *<a class="code" href="structllvm_1_1GraphTraits_3_01SVF_1_1OfflineConsG_01_5_01_4.html#acc7fa524cd8c4c4b786136c642ee2d58">NodeRef</a>;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;};</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;} <span class="comment">// End namespace llvm</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="preprocessor">#endif //OFFLINECONSG_H</span></div><div class="ttc" id="namespacellvm_html"><div class="ttname"><a href="namespacellvm.html">llvm</a></div><div class="ttdef"><b>Definition:</b> <a href="CFLGraph_8h_source.html#l00152">CFLGraph.h:152</a></div></div>
70
70
  <div class="ttc" id="namespaceSVF_html_a212231734fa43d5c7414137deaac7df3"><div class="ttname"><a href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">SVF::NodeSet</a></div><div class="ttdeci">Set&lt; NodeID &gt; NodeSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00118">SVFBasicTypes.h:118</a></div></div>
71
71
  <div class="ttc" id="ConsG_8h_html"><div class="ttname"><a href="ConsG_8h.html">ConsG.h</a></div></div>
72
72
  <div class="ttc" id="classSVF_1_1OfflineConsG_html_a0a03ef009894059fa2591ea5f9ef87d9"><div class="ttname"><a href="classSVF_1_1OfflineConsG.html#a0a03ef009894059fa2591ea5f9ef87d9">SVF::OfflineConsG::hasOCGRep</a></div><div class="ttdeci">bool hasOCGRep(NodeID node) const</div><div class="ttdef"><b>Definition:</b> <a href="OfflineConsG_8h_source.html#l00065">OfflineConsG.h:65</a></div></div>
@@ -100,7 +100,7 @@ $(function() {
100
100
  <div class="ttc" id="classSVF_1_1OfflineConsG_html_afc60c6d897517437597c54e8f83622eb"><div class="ttname"><a href="classSVF_1_1OfflineConsG.html#afc60c6d897517437597c54e8f83622eb">SVF::OfflineConsG::buildOfflineMap</a></div><div class="ttdeci">void buildOfflineMap(OSCC *oscc)</div><div class="ttdef"><b>Definition:</b> <a href="OfflineConsG_8cpp_source.html#l00133">OfflineConsG.cpp:133</a></div></div>
101
101
  <div class="ttc" id="classSVF_1_1OfflineConsG_html_aeb069df3700dafcf365f11d697501c8f"><div class="ttname"><a href="classSVF_1_1OfflineConsG.html#aeb069df3700dafcf365f11d697501c8f">SVF::OfflineConsG::solveRep</a></div><div class="ttdeci">NodeID solveRep(OSCC *oscc, NodeID rep)</div><div class="ttdef"><b>Definition:</b> <a href="OfflineConsG_8cpp_source.html#l00149">OfflineConsG.cpp:149</a></div></div>
102
102
  <div class="ttc" id="classSVF_1_1OfflineConsG_html_a727c635892986998167f30ff23a75f4c"><div class="ttname"><a href="classSVF_1_1OfflineConsG.html#a727c635892986998167f30ff23a75f4c">SVF::OfflineConsG::dump</a></div><div class="ttdeci">void dump(std::string name)</div><div class="ttdef"><b>Definition:</b> <a href="OfflineConsG_8cpp_source.html#l00169">OfflineConsG.cpp:169</a></div></div>
103
- <div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="ContextDDA_8h_source.html#l00016">ContextDDA.h:16</a></div></div>
103
+ <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>
104
104
  <div class="ttc" id="classSVF_1_1OfflineConsG_html_ae61c4f509b90dd43f63a07560ba3562f"><div class="ttname"><a href="classSVF_1_1OfflineConsG.html#ae61c4f509b90dd43f63a07560ba3562f">SVF::OfflineConsG::OfflineConsG</a></div><div class="ttdeci">OfflineConsG(SVFIR *p)</div><div class="ttdef"><b>Definition:</b> <a href="OfflineConsG_8h_source.html#l00058">OfflineConsG.h:58</a></div></div>
105
105
  <div class="ttc" id="classSVF_1_1SVFIR_html"><div class="ttname"><a href="classSVF_1_1SVFIR.html">SVF::SVFIR</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00043">SVFIR.h:43</a></div></div>
106
106
  <div class="ttc" id="classSVF_1_1OfflineConsG_html_af701f54b1db07a16e926cd40ab17eb12"><div class="ttname"><a href="classSVF_1_1OfflineConsG.html#af701f54b1db07a16e926cd40ab17eb12">SVF::OfflineConsG::getRef</a></div><div class="ttdeci">NodeID getRef(NodeID node) const</div><div class="ttdef"><b>Definition:</b> <a href="OfflineConsG_8h_source.html#l00093">OfflineConsG.h:93</a></div></div>