svf-tools 1.0.418 → 1.0.419

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 (253) hide show
  1. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +9 -9
  2. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +1 -1
  3. package/SVF-doxygen/html/html/Conditions_8cpp.html +0 -1
  4. package/SVF-doxygen/html/html/Conditions_8cpp_source.html +58 -49
  5. package/SVF-doxygen/html/html/Conditions_8h.html +6 -2
  6. package/SVF-doxygen/html/html/Conditions_8h_source.html +68 -60
  7. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +2 -2
  8. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +1 -1
  9. package/SVF-doxygen/html/html/DCHG_8cpp_source.html +1 -1
  10. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +9 -9
  11. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +3 -3
  12. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +2 -2
  13. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +7 -7
  14. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +1 -1
  15. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +1 -1
  16. package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
  17. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +1 -1
  18. package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
  19. package/SVF-doxygen/html/html/MHP_8cpp_source.html +1 -1
  20. package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
  21. package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -1
  22. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +1 -1
  23. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +1 -1
  24. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +2 -2
  25. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +6 -6
  26. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +1 -1
  27. package/SVF-doxygen/html/html/Options_8cpp_source.html +114 -113
  28. package/SVF-doxygen/html/html/Options_8h.html +1 -0
  29. package/SVF-doxygen/html/html/Options_8h_source.html +117 -115
  30. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +2 -2
  31. package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +41 -23
  32. package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +74 -74
  33. package/SVF-doxygen/html/html/PathDPItem_8h_source.html +7 -7
  34. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +4 -4
  35. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +12 -12
  36. package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +1 -1
  37. package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +1 -1
  38. package/SVF-doxygen/html/html/ProgSlice_8h_source.html +13 -13
  39. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +5 -5
  40. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +4 -4
  41. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +1 -1
  42. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +3 -3
  43. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
  44. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +1 -1
  45. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +1 -1
  46. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +4 -4
  47. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +3 -3
  48. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +3 -3
  49. package/SVF-doxygen/html/html/TCT_8cpp_source.html +1 -1
  50. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +1 -1
  51. package/SVF-doxygen/html/html/VFG_8cpp_source.html +1 -1
  52. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +3 -3
  53. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +4 -4
  54. package/SVF-doxygen/html/html/annotated.html +7 -5
  55. package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +1 -1
  56. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +5 -5
  57. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +6 -6
  58. package/SVF-doxygen/html/html/classSVF_1_1BDDExpr-members.html +92 -0
  59. package/SVF-doxygen/html/html/classSVF_1_1BDDExpr.html +304 -0
  60. package/SVF-doxygen/html/html/classSVF_1_1BDDExpr.png +0 -0
  61. package/SVF-doxygen/html/html/classSVF_1_1BDDManager-members.html +124 -0
  62. package/SVF-doxygen/html/html/classSVF_1_1BDDManager.html +1139 -0
  63. package/SVF-doxygen/html/html/classSVF_1_1BDDManager.png +0 -0
  64. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +5 -5
  65. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +1 -1
  66. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +1 -1
  67. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +1 -1
  68. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
  69. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +1 -1
  70. package/SVF-doxygen/html/html/classSVF_1_1CondExpr-members.html +5 -8
  71. package/SVF-doxygen/html/html/classSVF_1_1CondExpr.html +22 -151
  72. package/SVF-doxygen/html/html/classSVF_1_1CondExpr.png +0 -0
  73. package/SVF-doxygen/html/html/classSVF_1_1CondManager-members.html +25 -36
  74. package/SVF-doxygen/html/html/classSVF_1_1CondManager.html +276 -605
  75. package/SVF-doxygen/html/html/classSVF_1_1CondManager.png +0 -0
  76. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +1 -1
  77. package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +1 -1
  78. package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +1 -1
  79. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +9 -9
  80. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +1 -1
  81. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +1 -1
  82. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +9 -9
  83. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +7 -7
  84. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +1 -1
  85. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +1 -1
  86. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +1 -1
  87. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +1 -1
  88. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +2 -2
  89. package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +1 -1
  90. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +1 -1
  91. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +1 -1
  92. package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +1 -1
  93. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +1 -1
  94. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +1 -1
  95. package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +4 -4
  96. package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +3 -3
  97. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +6 -6
  98. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +1 -1
  99. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +2 -2
  100. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator.html +1 -1
  101. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +6 -6
  102. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
  103. package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +1 -1
  104. package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +103 -102
  105. package/SVF-doxygen/html/html/classSVF_1_1Options.html +141 -115
  106. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +3 -3
  107. package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator-members.html +1 -1
  108. package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +189 -196
  109. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +1 -1
  110. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +13 -13
  111. package/SVF-doxygen/html/html/classSVF_1_1PointsTo.html +1 -1
  112. package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +20 -20
  113. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
  114. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +5 -5
  115. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +5 -5
  116. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +4 -4
  117. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +5 -5
  118. package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +1 -1
  119. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +8 -8
  120. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +1 -1
  121. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +3 -3
  122. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +5 -5
  123. package/SVF-doxygen/html/html/classSVF_1_1TCT.html +2 -2
  124. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
  125. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
  126. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +1 -1
  127. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +1 -1
  128. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +1 -1
  129. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +1 -1
  130. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +3 -3
  131. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +11 -11
  132. package/SVF-doxygen/html/html/classSVF_1_1Z3Expr-members.html +95 -0
  133. package/SVF-doxygen/html/html/classSVF_1_1Z3Expr.html +396 -0
  134. package/SVF-doxygen/html/html/classSVF_1_1Z3Expr.png +0 -0
  135. package/SVF-doxygen/html/html/classSVF_1_1Z3Manager-members.html +122 -0
  136. package/SVF-doxygen/html/html/classSVF_1_1Z3Manager.html +1066 -0
  137. package/SVF-doxygen/html/html/classSVF_1_1Z3Manager.png +0 -0
  138. package/SVF-doxygen/html/html/classes.html +12 -11
  139. package/SVF-doxygen/html/html/functions_0x7e.html +9 -3
  140. package/SVF-doxygen/html/html/functions_a.html +4 -6
  141. package/SVF-doxygen/html/html/functions_b.html +33 -34
  142. package/SVF-doxygen/html/html/functions_c.html +43 -32
  143. package/SVF-doxygen/html/html/functions_d.html +5 -4
  144. package/SVF-doxygen/html/html/functions_e.html +8 -7
  145. package/SVF-doxygen/html/html/functions_enum.html +3 -0
  146. package/SVF-doxygen/html/html/functions_eval_b.html +6 -3
  147. package/SVF-doxygen/html/html/functions_eval_z.html +79 -0
  148. package/SVF-doxygen/html/html/functions_f.html +3 -3
  149. package/SVF-doxygen/html/html/functions_func.html +8 -7
  150. package/SVF-doxygen/html/html/functions_func_0x7e.html +9 -3
  151. package/SVF-doxygen/html/html/functions_func_b.html +10 -10
  152. package/SVF-doxygen/html/html/functions_func_c.html +23 -20
  153. package/SVF-doxygen/html/html/functions_func_d.html +5 -4
  154. package/SVF-doxygen/html/html/functions_func_e.html +3 -2
  155. package/SVF-doxygen/html/html/functions_func_g.html +33 -24
  156. package/SVF-doxygen/html/html/functions_func_i.html +17 -11
  157. package/SVF-doxygen/html/html/functions_func_n.html +4 -3
  158. package/SVF-doxygen/html/html/functions_func_o.html +4 -3
  159. package/SVF-doxygen/html/html/functions_func_p.html +3 -3
  160. package/SVF-doxygen/html/html/functions_func_s.html +2 -2
  161. package/SVF-doxygen/html/html/functions_func_z.html +79 -0
  162. package/SVF-doxygen/html/html/functions_g.html +35 -26
  163. package/SVF-doxygen/html/html/functions_i.html +30 -15
  164. package/SVF-doxygen/html/html/functions_l.html +8 -8
  165. package/SVF-doxygen/html/html/functions_m.html +1 -1
  166. package/SVF-doxygen/html/html/functions_n.html +4 -3
  167. package/SVF-doxygen/html/html/functions_o.html +9 -14
  168. package/SVF-doxygen/html/html/functions_p.html +10 -10
  169. package/SVF-doxygen/html/html/functions_r.html +7 -7
  170. package/SVF-doxygen/html/html/functions_rela.html +4 -0
  171. package/SVF-doxygen/html/html/functions_s.html +13 -15
  172. package/SVF-doxygen/html/html/functions_t.html +1 -3
  173. package/SVF-doxygen/html/html/functions_type_b.html +5 -6
  174. package/SVF-doxygen/html/html/functions_type_c.html +1 -1
  175. package/SVF-doxygen/html/html/functions_type_i.html +4 -1
  176. package/SVF-doxygen/html/html/functions_type_z.html +77 -0
  177. package/SVF-doxygen/html/html/functions_v.html +3 -3
  178. package/SVF-doxygen/html/html/functions_vars_a.html +0 -3
  179. package/SVF-doxygen/html/html/functions_vars_b.html +6 -9
  180. package/SVF-doxygen/html/html/functions_vars_c.html +5 -2
  181. package/SVF-doxygen/html/html/functions_vars_e.html +1 -1
  182. package/SVF-doxygen/html/html/functions_vars_i.html +6 -0
  183. package/SVF-doxygen/html/html/functions_vars_m.html +1 -1
  184. package/SVF-doxygen/html/html/functions_vars_n.html +1 -1
  185. package/SVF-doxygen/html/html/functions_vars_s.html +1 -1
  186. package/SVF-doxygen/html/html/functions_z.html +16 -0
  187. package/SVF-doxygen/html/html/hierarchy.html +436 -434
  188. package/SVF-doxygen/html/html/menudata.js +5 -2
  189. package/SVF-doxygen/html/html/namespaceSVF.html +8 -4
  190. package/SVF-doxygen/html/html/search/all_1.js +1 -2
  191. package/SVF-doxygen/html/html/search/all_10.js +11 -11
  192. package/SVF-doxygen/html/html/search/all_12.js +1 -1
  193. package/SVF-doxygen/html/html/search/all_13.js +8 -8
  194. package/SVF-doxygen/html/html/search/all_14.js +1 -1
  195. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  196. package/SVF-doxygen/html/html/search/all_16.js +1 -1
  197. package/SVF-doxygen/html/html/search/all_1a.js +5 -0
  198. package/SVF-doxygen/html/html/search/all_1b.js +5 -3
  199. package/SVF-doxygen/html/html/search/all_2.js +10 -9
  200. package/SVF-doxygen/html/html/search/all_3.js +9 -7
  201. package/SVF-doxygen/html/html/search/all_4.js +3 -3
  202. package/SVF-doxygen/html/html/search/all_5.js +2 -2
  203. package/SVF-doxygen/html/html/search/all_6.js +1 -1
  204. package/SVF-doxygen/html/html/search/all_7.js +13 -11
  205. package/SVF-doxygen/html/html/search/all_9.js +8 -6
  206. package/SVF-doxygen/html/html/search/all_c.js +5 -5
  207. package/SVF-doxygen/html/html/search/all_d.js +2 -2
  208. package/SVF-doxygen/html/html/search/all_e.js +4 -4
  209. package/SVF-doxygen/html/html/search/all_f.js +2 -2
  210. package/SVF-doxygen/html/html/search/classes_1.js +2 -2
  211. package/SVF-doxygen/html/html/search/classes_14.html +26 -0
  212. package/SVF-doxygen/html/html/search/classes_14.js +5 -0
  213. package/SVF-doxygen/html/html/search/enums_1.js +1 -0
  214. package/SVF-doxygen/html/html/search/enumvalues_1.js +2 -1
  215. package/SVF-doxygen/html/html/search/enumvalues_14.html +26 -0
  216. package/SVF-doxygen/html/html/search/enumvalues_14.js +5 -0
  217. package/SVF-doxygen/html/html/search/functions_0.js +1 -1
  218. package/SVF-doxygen/html/html/search/functions_1.js +5 -5
  219. package/SVF-doxygen/html/html/search/functions_10.js +2 -2
  220. package/SVF-doxygen/html/html/search/functions_15.js +2 -0
  221. package/SVF-doxygen/html/html/search/functions_16.js +5 -3
  222. package/SVF-doxygen/html/html/search/functions_2.js +5 -5
  223. package/SVF-doxygen/html/html/search/functions_3.js +3 -3
  224. package/SVF-doxygen/html/html/search/functions_4.js +1 -1
  225. package/SVF-doxygen/html/html/search/functions_6.js +13 -11
  226. package/SVF-doxygen/html/html/search/functions_8.js +4 -4
  227. package/SVF-doxygen/html/html/search/functions_c.js +1 -1
  228. package/SVF-doxygen/html/html/search/functions_d.js +1 -1
  229. package/SVF-doxygen/html/html/search/functions_e.js +4 -4
  230. package/SVF-doxygen/html/html/search/related_0.js +2 -1
  231. package/SVF-doxygen/html/html/search/searchdata.js +3 -3
  232. package/SVF-doxygen/html/html/search/typedefs_1.js +2 -2
  233. package/SVF-doxygen/html/html/search/typedefs_16.html +26 -0
  234. package/SVF-doxygen/html/html/search/typedefs_16.js +4 -0
  235. package/SVF-doxygen/html/html/search/typedefs_2.js +1 -1
  236. package/SVF-doxygen/html/html/search/typedefs_8.js +2 -1
  237. package/SVF-doxygen/html/html/search/variables_1.js +0 -1
  238. package/SVF-doxygen/html/html/search/variables_13.js +1 -1
  239. package/SVF-doxygen/html/html/search/variables_14.js +1 -1
  240. package/SVF-doxygen/html/html/search/variables_15.js +1 -1
  241. package/SVF-doxygen/html/html/search/variables_2.js +2 -3
  242. package/SVF-doxygen/html/html/search/variables_3.js +2 -1
  243. package/SVF-doxygen/html/html/search/variables_5.js +1 -1
  244. package/SVF-doxygen/html/html/search/variables_9.js +2 -0
  245. package/SVF-doxygen/html/html/search/variables_d.js +2 -2
  246. package/SVF-doxygen/html/html/search/variables_e.js +3 -3
  247. package/include/SABER/PathCondAllocator.h +2 -3
  248. package/include/Util/Conditions.h +272 -166
  249. package/include/Util/Options.h +4 -0
  250. package/lib/SABER/PathCondAllocator.cpp +3 -0
  251. package/lib/Util/Conditions.cpp +245 -209
  252. package/lib/Util/Options.cpp +11 -0
  253. package/package.json +1 -1
@@ -66,79 +66,88 @@ $(function() {
66
66
  <div class="title">Conditions.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="Conditions_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">//===- Conditions.cpp -- Context/path conditions in the form of BDDs----------//</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;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> * Conditions.cpp</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Created on: Oct 19, 2021</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> * Author: Yulei and Xiao</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</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="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Conditions_8h.html">Util/Conditions.h</a>&quot;</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#aed854ecc55a568597f7d7f1f78fb92f4">CondManager::trueCond</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#a0ba3cf86743de62bcd5fd38d8166bc90">CondManager::falseCond</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<a class="code" href="classSVF_1_1CondManager.html">CondManager</a>* <a class="code" href="classSVF_1_1CondManager.html#a1e48008a3fe3a562512e253133aa557f">CondManager::condMgr</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1CondManager.html#a7efaeff7229fcfdc6c05d53ee3e1d916">CondManager::totalCondNum</a> = 0;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#aa307bb05b92907ccf8859b4bac53b796"> 46</a></span>&#160;<a class="code" href="classSVF_1_1CondManager.html#aa307bb05b92907ccf8859b4bac53b796">CondManager::CondManager</a>() : sol(cxt)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;{</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">const</span> z3::expr &amp;trueExpr = <a class="code" href="classSVF_1_1CondManager.html#a087773d6ae6ed6af009a356dd7b61e11">cxt</a>.bool_val(<span class="keyword">true</span>);</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#aed854ecc55a568597f7d7f1f78fb92f4">trueCond</a> = <a class="code" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab">getOrAddBranchCond</a>(trueExpr, <a class="code" href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">branchCondManager</a>.<a class="code" href="classSVF_1_1BranchCondManager.html#ac6fb7493ceb44406a4bd6a62a60a6363">getTrueCond</a>());</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">const</span> z3::expr &amp;falseExpr = <a class="code" href="classSVF_1_1CondManager.html#a087773d6ae6ed6af009a356dd7b61e11">cxt</a>.bool_val(<span class="keyword">false</span>);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#a0ba3cf86743de62bcd5fd38d8166bc90">falseCond</a> = <a class="code" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab">getOrAddBranchCond</a>(falseExpr, <a class="code" href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">branchCondManager</a>.<a class="code" href="classSVF_1_1BranchCondManager.html#a013eb66493beb2b1d004605c68894a95">getFalseCond</a>());</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a5677513376a78707de664c1cc85805aa"> 57</a></span>&#160;<a class="code" href="classSVF_1_1CondManager.html#a5677513376a78707de664c1cc85805aa">CondManager::~CondManager</a>()</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;{</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; it : <a class="code" href="classSVF_1_1CondManager.html#a3621c17b2ff1beb7aa4e467ec357713b">allocatedConds</a>)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">delete</span> it.second;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;}</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#aeb4f9f4968f57602d12225757073f0f8"> 69</a></span>&#160;z3::expr <a class="code" href="classSVF_1_1CondManager.html#aeb4f9f4968f57602d12225757073f0f8">CondManager::simplify</a>(<span class="keyword">const</span> z3::expr&amp; expr)<span class="keyword"> const</span>{</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; z3::goal g(expr.ctx());</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; z3::tactic qe =</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; z3::tactic(expr.ctx(), <span class="stringliteral">&quot;aig&quot;</span>);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; g.add(expr);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; z3::apply_result r = qe(g);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; z3::expr res(expr.ctx().bool_val(<span class="keyword">false</span>));</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; r.size(); ++i) {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">if</span> (res.is_false()) {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; res = r[i].as_expr();</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; res = res || r[i].as_expr();</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">return</span> res;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;}</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#ae4ad2a90ac794163060290b6ac1f2949"> 91</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#ae4ad2a90ac794163060290b6ac1f2949">CondManager::createFreshBranchCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;{</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> condCountIdx = <a class="code" href="classSVF_1_1CondManager.html#a7efaeff7229fcfdc6c05d53ee3e1d916">totalCondNum</a>++;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">const</span> z3::expr &amp;expr = <a class="code" href="classSVF_1_1CondManager.html#a087773d6ae6ed6af009a356dd7b61e11">cxt</a>.bool_const((<span class="stringliteral">&quot;c&quot;</span> + std::to_string(condCountIdx)).c_str());</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; IDToCondExprMap::const_iterator it = <a class="code" href="classSVF_1_1CondManager.html#a3621c17b2ff1beb7aa4e467ec357713b">allocatedConds</a>.find(expr.id());</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">if</span> (it != <a class="code" href="classSVF_1_1CondManager.html#a3621c17b2ff1beb7aa4e467ec357713b">allocatedConds</a>.end())</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; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="structDdNode.html">BranchCond</a> *branchCond = <a class="code" href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">branchCondManager</a>.<a class="code" href="classSVF_1_1BranchCondManager.html#a6c807df0d5627d3afda2359b658bc97c">createCond</a>(condCountIdx);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keyword">auto</span> *cond = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BranchCondExpr.html">BranchCondExpr</a>(expr, branchCond);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keyword">auto</span> *negCond = <a class="code" href="classSVF_1_1CondManager.html#a5751792e45c8abd5ffd3610d94e9f0b7">NEG</a>(cond);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#a1fbf7dd446309e13671d838c91da26bf">setCondInst</a>(cond, inst);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#a049541fec44cac3401a0dc68ff2f0ac1">setNegCondInst</a>(negCond, inst);</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#afd01891f45e085e990c9dbba5cbf3914">branchCondToCondExpr</a>.emplace(branchCond, cond);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a3621c17b2ff1beb7aa4e467ec357713b">allocatedConds</a>.emplace(expr.id(), cond).first-&gt;second;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;}</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab"> 113</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab">CondManager::getOrAddBranchCond</a>(<span class="keyword">const</span> z3::expr&amp; e, <a class="code" href="structDdNode.html">BranchCond</a>* branchCond)</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; <span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1CondManager.html#afd01891f45e085e990c9dbba5cbf3914">branchCondToCondExpr</a>.find(branchCond);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span>(it != <a class="code" href="classSVF_1_1CondManager.html#afd01891f45e085e990c9dbba5cbf3914">branchCondToCondExpr</a>.end())</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">auto</span> *cond = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BranchCondExpr.html">BranchCondExpr</a>(e, branchCond);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#afd01891f45e085e990c9dbba5cbf3914">branchCondToCondExpr</a>.emplace(branchCond, cond);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a3621c17b2ff1beb7aa4e467ec357713b">allocatedConds</a>.emplace(e.id(), cond).first-&gt;second;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;}</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#af167e75fab5f61b18bff296075c107d1"> 128</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1CondManager.html#af167e75fab5f61b18bff296075c107d1">CondManager::getCondNumber</a>()</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;{</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">sol</a>.get_model().size();</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;}</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a4b88160366a7c7b2bf7e2ab632ed04c7"> 134</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#a4b88160366a7c7b2bf7e2ab632ed04c7">CondManager::AND</a>(<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* lhs, <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* rhs){</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>() || rhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">return</span> rhs;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="structDdNode.html">BranchCond</a> *branchCond = <a class="code" href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">branchCondManager</a>.<a class="code" href="classSVF_1_1BranchCondManager.html#a739f4206abf4f367dc796e9fd35d4d04">AND</a>(SVFUtil::dyn_cast&lt;BranchCondExpr&gt;(lhs)-&gt;getBranchCond(),</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; SVFUtil::dyn_cast&lt;BranchCondExpr&gt;(rhs)-&gt;getBranchCond());</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keyword">const</span> z3::expr &amp;expr = lhs-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>() &amp;&amp; rhs-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>();</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab">getOrAddBranchCond</a>(expr, branchCond);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;}</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a83824b36d6cd073a171df9919aa0c704"> 149</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#a83824b36d6cd073a171df9919aa0c704">CondManager::OR</a>(<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* lhs, <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* rhs){</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>() || rhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>();</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">return</span> rhs;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="structDdNode.html">BranchCond</a> *branchCond = <a class="code" href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">branchCondManager</a>.<a class="code" href="classSVF_1_1BranchCondManager.html#a7f3fa5e90c08950099ff6f05e96ecb9c">OR</a>(SVFUtil::dyn_cast&lt;BranchCondExpr&gt;(lhs)-&gt;getBranchCond(),</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; SVFUtil::dyn_cast&lt;BranchCondExpr&gt;(rhs)-&gt;getBranchCond());</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keyword">const</span> z3::expr &amp;expr = lhs-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>() || rhs-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>();</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab">getOrAddBranchCond</a>(expr, branchCond);</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"><a class="line" href="classSVF_1_1CondManager.html#a5751792e45c8abd5ffd3610d94e9f0b7"> 163</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* <a class="code" href="classSVF_1_1CondManager.html#a5751792e45c8abd5ffd3610d94e9f0b7">CondManager::NEG</a>(<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* lhs){</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>();</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>();</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="structDdNode.html">BranchCond</a> *branchCond = <a class="code" href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">branchCondManager</a>.<a class="code" href="classSVF_1_1BranchCondManager.html#ad7832b33b3b73fcaca5c8278ed4d3e7f">NEG</a>(SVFUtil::dyn_cast&lt;BranchCondExpr&gt;(lhs)-&gt;getBranchCond());</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keyword">const</span> z3::expr &amp;expr = !lhs-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>();</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab">getOrAddBranchCond</a>(expr, branchCond);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;}</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div><div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#ab9772aa1a35e963ccc9ce1007ebc1310"> 179</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondManager.html#ab9772aa1a35e963ccc9ce1007ebc1310">CondManager::printModel</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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">sol</a>.check() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; z3::model m = <a class="code" href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">sol</a>.get_model();</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; m.size(); i++)</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; z3::func_decl v = m[i];</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; v.name() &lt;&lt; <span class="stringliteral">&quot; = &quot;</span> &lt;&lt; m.get_const_interp(v) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; }</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;}</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;</div><div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a8a9d3d96c2c8cfef8b9d9c27c28871f6"> 193</a></span>&#160;std::string <a class="code" href="classSVF_1_1CondManager.html#a8a9d3d96c2c8cfef8b9d9c27c28871f6">CondManager::getMemUsage</a>()</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;{</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="comment">//std::ostringstream os;</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="comment">//memory::display_max_usage(os);</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="comment">//return os.str();</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;}</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#acd773bd9dbf5161e488c827b0b71481d"> 204</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondManager.html#acd773bd9dbf5161e488c827b0b71481d">CondManager::extractSubConds</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* cond, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;support)<span class="keyword"> const</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">if</span> (cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().num_args() == 1 &amp;&amp; <a class="code" href="classSVF_1_1CondManager.html#ad1de136dbd62c3b9a7447222bd0890fa">isNegCond</a>(cond)) {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; support.set(cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().id());</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">return</span>;</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> (cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().num_args() == 0)</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">if</span> (!cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().is_true() &amp;&amp; !cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().is_false())</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; support.set(cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().id());</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().num_args(); ++i) {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keyword">const</span> z3::expr &amp;expr = cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>().arg(i);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#acd773bd9dbf5161e488c827b0b71481d">extractSubConds</a>(<a class="code" href="classSVF_1_1CondManager.html#ac246b92ebdf6a9635ed79892b81b9ae8">getCond</a>(expr.id()), support);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;}</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a725d9c0a3aad4ebea3f06edf433f04ea"> 222</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondManager.html#a725d9c0a3aad4ebea3f06edf433f04ea">CondManager::isSatisfiable</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* cond){</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">sol</a>.reset();</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">sol</a>.add(cond-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>());</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; z3::check_result <a class="code" href="cuddInt_8c.html#a8b2e13c78efca330f06b6ddcd7464b41">result</a> = <a class="code" href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">sol</a>.check();</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span> (result == z3::sat || result == z3::unknown)</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</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="l00235"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a6151817a6f671fa1e7814e74f7ce2e51"> 235</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondManager.html#a6151817a6f671fa1e7814e74f7ce2e51">CondManager::isAllPathReachable</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a>* e){</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#adef2474c65a7f9d96b27ee670136a240">isEquivalentBranchCond</a>(e, <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>());</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;}</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a385339096b4322654b5b2c7a37e852fe"> 242</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondManager.html#a385339096b4322654b5b2c7a37e852fe">CondManager::printDbg</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *e)</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;{</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; e-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;}</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a907afafc19d8faa7a200bf4f1e07bb4f"> 250</a></span>&#160;std::string <a class="code" href="classSVF_1_1CondManager.html#a907afafc19d8faa7a200bf4f1e07bb4f">CondManager::dumpStr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *e)<span class="keyword"> const</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; std::ostringstream out;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; out &lt;&lt; e-&gt;<a class="code" href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">getExpr</a>();</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">return</span> out.str();</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;}</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;<a class="code" href="structDdNode.html">BranchCondManager::BranchCond</a>* <a class="code" href="classSVF_1_1BranchCondManager.html#a739f4206abf4f367dc796e9fd35d4d04">BranchCondManager::AND</a>(<a class="code" href="structDdNode.html">BranchCond</a>* lhs, <a class="code" href="structDdNode.html">BranchCond</a>* rhs)</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;{</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>() || rhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>();</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">return</span> rhs;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">else</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; <a class="code" href="structDdNode.html">BranchCond</a>* tmp = <a class="code" href="cudd_8h.html#adfbb2fd5b9c884df0d684a86dc26a97d">Cudd_bddAndLimit</a>(m_bdd_mgr, lhs, rhs, <a class="code" href="classSVF_1_1Options.html#a344ca0e4b8d9159836e558aed44be1b4">Options::MaxBddSize</a>);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">if</span>(tmp==<span class="keyword">nullptr</span>)</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">SVFUtil::writeWrnMsg</a>(<span class="stringliteral">&quot;exceeds max bdd size \n&quot;</span>);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; {</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <a class="code" href="cudd_8h.html#a3d0d9959640235fc073699c776914fca">Cudd_Ref</a>(tmp);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">return</span> tmp;</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; }</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="l00288"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#a7f3fa5e90c08950099ff6f05e96ecb9c"> 288</a></span>&#160;<a class="code" href="structDdNode.html">BranchCondManager::BranchCond</a>* <a class="code" href="classSVF_1_1BranchCondManager.html#a7f3fa5e90c08950099ff6f05e96ecb9c">BranchCondManager::OR</a>(<a class="code" href="structDdNode.html">BranchCond</a>* lhs, <a class="code" href="structDdNode.html">BranchCond</a>* rhs)</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;{</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>() || rhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>();</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">return</span> rhs;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <a class="code" href="structDdNode.html">BranchCond</a>* tmp = <a class="code" href="cudd_8h.html#a6cbc77f8b658ac3c88a2549a84c58b38">Cudd_bddOrLimit</a>(m_bdd_mgr, lhs, rhs, <a class="code" href="classSVF_1_1Options.html#a344ca0e4b8d9159836e558aed44be1b4">Options::MaxBddSize</a>);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">if</span>(tmp==<span class="keyword">nullptr</span>)</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">SVFUtil::writeWrnMsg</a>(<span class="stringliteral">&quot;exceeds max bdd size \n&quot;</span>);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>();</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; {</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <a class="code" href="cudd_8h.html#a3d0d9959640235fc073699c776914fca">Cudd_Ref</a>(tmp);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">return</span> tmp;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; }</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;}</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;</div><div class="line"><a name="l00313"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#ad7832b33b3b73fcaca5c8278ed4d3e7f"> 313</a></span>&#160;<a class="code" href="structDdNode.html">BranchCondManager::BranchCond</a>* <a class="code" href="classSVF_1_1BranchCondManager.html#ad7832b33b3b73fcaca5c8278ed4d3e7f">BranchCondManager::NEG</a>(<a class="code" href="structDdNode.html">BranchCond</a>* lhs)</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;{</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>();</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>();</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">return</span> <a class="code" href="cudd_8h.html#a352ef8d39e760eaabae6d58d9a5ddbfc">Cudd_Not</a>(lhs);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;}</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;</div><div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#a513a9865b87af136edf1abb1932716dd"> 328</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BranchCondManager.html#a513a9865b87af136edf1abb1932716dd">BranchCondManager::ddClearFlag</a>(<a class="code" href="structDdNode.html">BranchCond</a> * f)<span class="keyword"> const</span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="cudd_8h.html#a35322518c24f65f44eda9623083cb62c">Cudd_IsComplement</a>(f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a>))</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="comment">/* Clear visited flag. */</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a> = <a class="code" href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a>(f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a>);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cuddInt_8h.html#aa5cad999b2a4a3dbbfe5c1da1d8bc028">cuddIsConstant</a>(f))</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <a class="code" href="cuddInt_8c.html#ab69f928c3cca42f5b1330803de1d9199">ddClearFlag</a>(<a class="code" href="cuddInt_8h.html#a09834c697b92ac296b1e50c863f88262">cuddT</a>(f));</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <a class="code" href="cuddInt_8c.html#ab69f928c3cca42f5b1330803de1d9199">ddClearFlag</a>(<a class="code" href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a>(<a class="code" href="cuddInt_8h.html#aaef03f10591d8e28bb5fecd2aa7c93ff">cuddE</a>(f)));</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;}</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;</div><div class="line"><a name="l00341"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#a94f84201f91b7175907e72af2633f6f2"> 341</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BranchCondManager.html#a94f84201f91b7175907e72af2633f6f2">BranchCondManager::BddSupportStep</a>(<a class="code" href="structDdNode.html">BranchCond</a> * f, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;support)<span class="keyword"> const</span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cuddInt_8h.html#aa5cad999b2a4a3dbbfe5c1da1d8bc028">cuddIsConstant</a>(f) || <a class="code" href="cudd_8h.html#a35322518c24f65f44eda9623083cb62c">Cudd_IsComplement</a>(f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a>))</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; support.set(f-&gt;<a class="code" href="structDdNode.html#abbd39b25b9abe4b4d53cd267a4103bda">index</a>);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; BddSupportStep(<a class="code" href="cuddInt_8h.html#a09834c697b92ac296b1e50c863f88262">cuddT</a>(f), support);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; BddSupportStep(<a class="code" href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a>(<a class="code" href="cuddInt_8h.html#aaef03f10591d8e28bb5fecd2aa7c93ff">cuddE</a>(f)), support);</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="comment">/* Mark as visited. */</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a> = <a class="code" href="cudd_8h.html#ac4575f4314998362765264f64eccfe0c">Cudd_Complement</a>(f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a>);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;}</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#aa241ee8c9d8ef17029dba67b737d8beb"> 354</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BranchCondManager.html#aa241ee8c9d8ef17029dba67b737d8beb">BranchCondManager::extractSubConds</a>(<a class="code" href="structDdNode.html">BranchCond</a> * f, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;support)<span class="keyword"> const</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; BddSupportStep( <a class="code" href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a>(f), support);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <a class="code" href="cuddInt_8c.html#ab69f928c3cca42f5b1330803de1d9199">ddClearFlag</a>(<a class="code" href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a>(f));</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;}</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#a3c3812a3c945488bb7c5d1351a6d3415"> 363</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BranchCondManager.html#a3c3812a3c945488bb7c5d1351a6d3415">BranchCondManager::dump</a>(<a class="code" href="structDdNode.html">BranchCond</a>* lhs, <a class="code" href="namespaceSVF.html#a8bd74fdcb0e58d0249003df9c3fb8b31">OutStream</a> &amp; O)</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;{</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; O &lt;&lt; <span class="stringliteral">&quot;T&quot;</span>;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> support;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#acd773bd9dbf5161e488c827b0b71481d">extractSubConds</a>(lhs, support);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator iter = support.begin(); iter != support.end();</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; ++iter)</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; {</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordtype">unsigned</span> rid = *iter;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; O &lt;&lt; rid &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;}</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;</div><div class="line"><a name="l00383"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchCondManager.html#a930ece842bcdab283fb27e2a053bc8de"> 383</a></span>&#160;std::string <a class="code" href="classSVF_1_1BranchCondManager.html#a930ece842bcdab283fb27e2a053bc8de">BranchCondManager::dumpStr</a>(<a class="code" href="structDdNode.html">BranchCond</a>* lhs)<span class="keyword"> const</span></div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; std::string str;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; str += <span class="stringliteral">&quot;T&quot;</span>;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; {</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> support;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#acd773bd9dbf5161e488c827b0b71481d">extractSubConds</a>(lhs, support);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator iter = support.begin(); iter != support.end();</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; ++iter)</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; {</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordtype">unsigned</span> rid = *iter;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordtype">char</span> int2str[16];</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; sprintf(int2str, <span class="stringliteral">&quot;%d&quot;</span>, rid);</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; str += int2str;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; str += <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; }</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; }</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">return</span> str;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;}</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;</div><div class="ttc" id="classSVF_1_1BranchCondManager_html_a6c807df0d5627d3afda2359b658bc97c"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a6c807df0d5627d3afda2359b658bc97c">SVF::BranchCondManager::createCond</a></div><div class="ttdeci">BranchCond * createCond(u32_t i)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00130">Conditions.h:130</a></div></div>
70
- <div class="ttc" id="classSVF_1_1CondManager_html_a0ba3cf86743de62bcd5fd38d8166bc90"><div class="ttname"><a href="classSVF_1_1CondManager.html#a0ba3cf86743de62bcd5fd38d8166bc90">SVF::CondManager::falseCond</a></div><div class="ttdeci">static CondExpr * falseCond</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00305">Conditions.h:305</a></div></div>
71
- <div class="ttc" id="classSVF_1_1CondManager_html_acd773bd9dbf5161e488c827b0b71481d"><div class="ttname"><a href="classSVF_1_1CondManager.html#acd773bd9dbf5161e488c827b0b71481d">SVF::CondManager::extractSubConds</a></div><div class="ttdeci">void extractSubConds(const CondExpr *cond, NodeBS &amp;support) const</div><div class="ttdoc">Extract sub conditions of this expression. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00204">Conditions.cpp:204</a></div></div>
72
- <div class="ttc" id="classSVF_1_1BranchCondManager_html_ac6fb7493ceb44406a4bd6a62a60a6363"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#ac6fb7493ceb44406a4bd6a62a60a6363">SVF::BranchCondManager::getTrueCond</a></div><div class="ttdeci">BranchCond * getTrueCond() const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00134">Conditions.h:134</a></div></div>
73
- <div class="ttc" id="classSVF_1_1CondManager_html_a771bda4bb55dd8c95a03f1a74a215126"><div class="ttname"><a href="classSVF_1_1CondManager.html#a771bda4bb55dd8c95a03f1a74a215126">SVF::CondManager::sol</a></div><div class="ttdeci">z3::solver sol</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00303">Conditions.h:303</a></div></div>
69
+ <a href="Conditions_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">//===- Conditions.cpp -- Context/path conditions in the form of BDDs----------//</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;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> * Conditions.cpp</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Created on: Oct 19, 2021</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> * Author: Yulei and Xiao</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</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="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Conditions_8h.html">Util/Conditions.h</a>&quot;</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *<a class="code" href="classSVF_1_1CondManager.html#aed854ecc55a568597f7d7f1f78fb92f4">CondManager::trueCond</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *<a class="code" href="classSVF_1_1CondManager.html#a0ba3cf86743de62bcd5fd38d8166bc90">CondManager::falseCond</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<a class="code" href="classSVF_1_1CondManager.html">CondManager</a> *<a class="code" href="classSVF_1_1CondManager.html#a1e48008a3fe3a562512e253133aa557f">CondManager::condMgr</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1CondManager.html#a7efaeff7229fcfdc6c05d53ee3e1d916">CondManager::totalCondNum</a> = 0;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a08cad78a4ebb31f32b72d5ff9793b83e"> 43</a></span>&#160;<a class="code" href="classSVF_1_1CondManager.html">CondManager</a> *<a class="code" href="classSVF_1_1CondManager.html#a08cad78a4ebb31f32b72d5ff9793b83e">CondManager::getCondMgr</a>(<a class="code" href="classSVF_1_1CondManager.html#a7f7519973f1e0ab8054670a6154bd74f">CondMgrKind</a> _condMgrKind) {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">if</span> (condMgr == <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">if</span> (_condMgrKind == BDDMgrK)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; condMgr = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BDDManager.html">BDDManager</a>();</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (_condMgrKind == Z3MgrK)</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; condMgr = <span class="keyword">new</span> <a class="code" href="classSVF_1_1Z3Manager.html">Z3Manager</a>();</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;invalid condition manager kind!&quot;</span>);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">return</span> condMgr;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;}</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classSVF_1_1CondManager.html#a6151817a6f671fa1e7814e74f7ce2e51"> 58</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondManager.html#a6151817a6f671fa1e7814e74f7ce2e51">CondManager::isAllPathReachable</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *e) {</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">return</span> isEquivalentBranchCond(e, getTrueCond());</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;</div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classSVF_1_1Z3Manager.html#a747edc9290575156f1edd50be043617d"> 62</a></span>&#160;<a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> *<a class="code" href="classSVF_1_1Z3Manager.html#a747edc9290575156f1edd50be043617d">Z3Manager::getOrAddZ3Cond</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Manager.html#aae5b5661f0a34771753648072d6ea20a">Z3Cond</a> &amp;z3Cond) {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">auto</span> it = idToCondExprMap.find(z3Cond.id());</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">if</span> (it != idToCondExprMap.end()) {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> *z3CondExpr = <span class="keyword">new</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>(z3Cond);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">return</span> idToCondExprMap.emplace(z3Cond.id(), z3CondExpr).first-&gt;second;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;}</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classSVF_1_1Z3Manager.html#a2b2c98208ab6d9b6fd103a965d9aa1ac"> 72</a></span>&#160;<a class="code" href="classSVF_1_1Z3Manager.html#a2b2c98208ab6d9b6fd103a965d9aa1ac">Z3Manager::Z3Manager</a>() : sol(cxt) {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keyword">const</span> z3::expr &amp;trueExpr = <a class="code" href="classSVF_1_1Z3Manager.html#ac5968fcdba98bd405509b8abd1997cbc">cxt</a>.bool_val(<span class="keyword">true</span>);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#aed854ecc55a568597f7d7f1f78fb92f4">trueCond</a> = <a class="code" href="classSVF_1_1Z3Manager.html#a747edc9290575156f1edd50be043617d">getOrAddZ3Cond</a>(trueExpr);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keyword">const</span> z3::expr &amp;falseExpr = <a class="code" href="classSVF_1_1Z3Manager.html#ac5968fcdba98bd405509b8abd1997cbc">cxt</a>.bool_val(<span class="keyword">false</span>);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#a0ba3cf86743de62bcd5fd38d8166bc90">falseCond</a> = <a class="code" href="classSVF_1_1Z3Manager.html#a747edc9290575156f1edd50be043617d">getOrAddZ3Cond</a>(falseExpr);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;}</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classSVF_1_1Z3Manager.html#ad3d9d77ee64d84bb204fa66c1a51a01a"> 79</a></span>&#160;<a class="code" href="classSVF_1_1Z3Manager.html#ad3d9d77ee64d84bb204fa66c1a51a01a">Z3Manager::~Z3Manager</a>() {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;it: <a class="code" href="classSVF_1_1Z3Manager.html#a72e5e03058e98c4f511ce2bb180f89cf">idToCondExprMap</a>) {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">delete</span> it.second;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;}</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classSVF_1_1Z3Manager.html#a34d8f9fc93bb82a8916ae45534ef5941"> 85</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Z3Manager.html#a34d8f9fc93bb82a8916ae45534ef5941">Z3Manager::isEquivalentBranchCond</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *lhs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *rhs) {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="classSVF_1_1Z3Manager.html#ac6fe9310046274759c45c1435fcc85c6">sol</a>.push();</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> *z3lhs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">dyn_cast</a>&lt;<a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&gt;(lhs);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> *z3rhs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">dyn_cast</a>&lt;<a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&gt;(rhs);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(z3lhs &amp;&amp; z3rhs &amp;&amp; <span class="stringliteral">&quot;not z3 condition?&quot;</span>);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="classSVF_1_1Z3Manager.html#ac6fe9310046274759c45c1435fcc85c6">sol</a>.add(z3lhs-&gt;<a class="code" href="classSVF_1_1Z3Expr.html#a167a586980be31f4f54884e88f972a04">getExpr</a>() != z3rhs-&gt;getExpr());</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; z3::check_result res = <a class="code" href="classSVF_1_1Z3Manager.html#ac6fe9310046274759c45c1435fcc85c6">sol</a>.check();</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <a class="code" href="classSVF_1_1Z3Manager.html#ac6fe9310046274759c45c1435fcc85c6">sol</a>.pop();</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">return</span> res == z3::unsat;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;}</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="classSVF_1_1Z3Manager.html#a540de948d9cc396341376e081d7e46aa"> 98</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *<a class="code" href="classSVF_1_1Z3Manager.html#a540de948d9cc396341376e081d7e46aa">Z3Manager::AND</a>(<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *lhs, <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *rhs) {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keyword">auto</span> *z3lhs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">dyn_cast</a>&lt;<a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&gt;(lhs);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keyword">auto</span> *z3rhs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">dyn_cast</a>&lt;<a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&gt;(rhs);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(z3lhs &amp;&amp; z3rhs &amp;&amp; <span class="stringliteral">&quot;not z3 condition?&quot;</span>);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">if</span> (z3lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>() || z3rhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>();</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (z3lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">return</span> z3rhs;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (z3rhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">return</span> z3lhs;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keyword">const</span> z3::expr &amp;expr = z3lhs-&gt;getExpr() &amp;&amp; z3rhs-&gt;getExpr();</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Manager.html#a747edc9290575156f1edd50be043617d">getOrAddZ3Cond</a>(expr);</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;}</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classSVF_1_1Z3Manager.html#af50dd899af45580176376d2bb7cf6243"> 114</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *<a class="code" href="classSVF_1_1Z3Manager.html#af50dd899af45580176376d2bb7cf6243">Z3Manager::OR</a>(<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *lhs, <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *rhs) {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">auto</span> *z3lhs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">dyn_cast</a>&lt;<a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&gt;(lhs);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keyword">auto</span> *z3rhs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">dyn_cast</a>&lt;<a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&gt;(rhs);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(z3lhs &amp;&amp; z3rhs &amp;&amp; <span class="stringliteral">&quot;not z3 condition?&quot;</span>);</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">if</span> (z3lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>() || z3rhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>();</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (z3lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">return</span> z3rhs;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (z3rhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">return</span> z3lhs;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keyword">const</span> z3::expr &amp;expr = z3lhs-&gt;getExpr() || z3rhs-&gt;getExpr();</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Manager.html#a747edc9290575156f1edd50be043617d">getOrAddZ3Cond</a>(expr);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;}</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div><div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="classSVF_1_1Z3Manager.html#a5fcfc5dcdd77d9860aaaff9cd9f43c55"> 130</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *<a class="code" href="classSVF_1_1Z3Manager.html#a5fcfc5dcdd77d9860aaaff9cd9f43c55">Z3Manager::NEG</a>(<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *lhs) {</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keyword">auto</span> *z3lhs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">dyn_cast</a>&lt;<a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&gt;(lhs);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(z3lhs &amp;&amp; <span class="stringliteral">&quot;not z3 condition?&quot;</span>);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">if</span> (z3lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>();</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (z3lhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keyword">const</span> z3::expr &amp;expr = !z3lhs-&gt;getExpr();</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Manager.html#a747edc9290575156f1edd50be043617d">getOrAddZ3Cond</a>(expr);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</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"><a class="line" href="classSVF_1_1Z3Manager.html#a4ba99458553cfd7b586f0730b62e5b82"> 144</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *<a class="code" href="classSVF_1_1Z3Manager.html#a4ba99458553cfd7b586f0730b62e5b82">Z3Manager::createFreshBranchCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst) {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> condCountIdx = <a class="code" href="classSVF_1_1CondManager.html#a7efaeff7229fcfdc6c05d53ee3e1d916">totalCondNum</a>++;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keyword">const</span> z3::expr &amp;expr = <a class="code" href="classSVF_1_1Z3Manager.html#ac5968fcdba98bd405509b8abd1997cbc">cxt</a>.bool_const((<span class="stringliteral">&quot;c&quot;</span> + std::to_string(condCountIdx)).c_str());</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1Z3Manager.html#a72e5e03058e98c4f511ce2bb180f89cf">idToCondExprMap</a>.find(expr.id());</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">if</span> (it != <a class="code" href="classSVF_1_1Z3Manager.html#a72e5e03058e98c4f511ce2bb180f89cf">idToCondExprMap</a>.end())</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keyword">auto</span> *cond = <span class="keyword">new</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>(expr);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keyword">auto</span> *negCond = <a class="code" href="classSVF_1_1Z3Manager.html#a5fcfc5dcdd77d9860aaaff9cd9f43c55">NEG</a>(cond);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#a1fbf7dd446309e13671d838c91da26bf">setCondInst</a>(cond, inst);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="classSVF_1_1Z3Manager.html#a7ec31e7f5d856ac7de8416573aef396f">setNegCondInst</a>(negCond, inst);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Manager.html#a72e5e03058e98c4f511ce2bb180f89cf">idToCondExprMap</a>.emplace(expr.id(), cond).first-&gt;second;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;}</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="classSVF_1_1Z3Manager.html#aa6a78fc2f0a3ed9957230703fb8d730d"> 162</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Z3Manager.html#aa6a78fc2f0a3ed9957230703fb8d730d">Z3Manager::extractSubConds</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *cond, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;support)<span class="keyword"> const </span>{</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> *z3CondExpr = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">dyn_cast</a>&lt;<a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&gt;(cond);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(z3CondExpr &amp;&amp; <span class="stringliteral">&quot;not z3 condition?&quot;</span>);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">if</span> (z3CondExpr-&gt;getExpr().num_args() == 1 &amp;&amp; <a class="code" href="classSVF_1_1Z3Manager.html#a869828207971498df1fd7c9f29d3e999">isNegCond</a>(z3CondExpr)) {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; support.set(z3CondExpr-&gt;getExpr().id());</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">if</span> (z3CondExpr-&gt;getExpr().num_args() == 0)</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">if</span> (!z3CondExpr-&gt;getExpr().is_true() &amp;&amp; !z3CondExpr-&gt;getExpr().is_false())</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; support.set(z3CondExpr-&gt;getExpr().id());</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; z3CondExpr-&gt;getExpr().num_args(); ++i) {</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keyword">const</span> z3::expr &amp;expr = z3CondExpr-&gt;getExpr().arg(i);</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <a class="code" href="classSVF_1_1Z3Manager.html#aa6a78fc2f0a3ed9957230703fb8d730d">extractSubConds</a>(<a class="code" href="classSVF_1_1Z3Manager.html#aa8ecb34cf54a5defb48747b1278b4764">getCond</a>(expr.id()), support);</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;</div><div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="classSVF_1_1Z3Manager.html#a98916f1ae12b8c2bb98231b19c94d928"> 181</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1Z3Manager.html#a98916f1ae12b8c2bb98231b19c94d928">Z3Manager::isSatisfiable</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *cond) {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="classSVF_1_1Z3Manager.html#ac6fe9310046274759c45c1435fcc85c6">sol</a>.push();</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> *z3CondExpr = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">dyn_cast</a>&lt;<a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&gt;(cond);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(z3CondExpr &amp;&amp; <span class="stringliteral">&quot;not z3 condition?&quot;</span>);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="classSVF_1_1Z3Manager.html#ac6fe9310046274759c45c1435fcc85c6">sol</a>.add(z3CondExpr-&gt;<a class="code" href="classSVF_1_1Z3Expr.html#a167a586980be31f4f54884e88f972a04">getExpr</a>());</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; z3::check_result <a class="code" href="cuddInt_8c.html#a8b2e13c78efca330f06b6ddcd7464b41">result</a> = <a class="code" href="classSVF_1_1Z3Manager.html#ac6fe9310046274759c45c1435fcc85c6">sol</a>.check();</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="classSVF_1_1Z3Manager.html#ac6fe9310046274759c45c1435fcc85c6">sol</a>.pop();</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">if</span> (result == z3::sat || result == z3::unknown)</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;}</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="classSVF_1_1Z3Manager.html#aa0fd8e460f4d89155da3487c0350f972"> 198</a></span>&#160;z3::expr <a class="code" href="classSVF_1_1Z3Manager.html#aa0fd8e460f4d89155da3487c0350f972">Z3Manager::simplify</a>(<span class="keyword">const</span> z3::expr &amp;expr)<span class="keyword"> const </span>{</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; z3::goal g(expr.ctx());</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; z3::tactic qe =</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; z3::tactic(expr.ctx(), <span class="stringliteral">&quot;aig&quot;</span>);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; g.add(expr);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; z3::apply_result r = qe(g);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; z3::expr res(expr.ctx().bool_val(<span class="keyword">false</span>));</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; r.size(); ++i) {</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">if</span> (res.is_false()) {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; res = r[i].as_expr();</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; res = res || r[i].as_expr();</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; }</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">return</span> res;</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;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;</div><div class="line"><a name="l00219"></a><span class="lineno"><a class="line" href="classSVF_1_1Z3Manager.html#af9655650f2ddfba9418fc1762794a730"> 219</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Z3Manager.html#af9655650f2ddfba9418fc1762794a730">Z3Manager::printModel</a>() {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <a class="code" href="classSVF_1_1Z3Manager.html#ac6fe9310046274759c45c1435fcc85c6">sol</a>.check() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; z3::model m = <a class="code" href="classSVF_1_1Z3Manager.html#ac6fe9310046274759c45c1435fcc85c6">sol</a>.get_model();</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; m.size(); i++) {</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; z3::func_decl v = m[i];</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; v.name() &lt;&lt; <span class="stringliteral">&quot; = &quot;</span> &lt;&lt; m.get_const_interp(v) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;}</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="classSVF_1_1Z3Manager.html#a667818d7f30d6d6763e5a6a83aeb242a"> 231</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1Z3Manager.html#a667818d7f30d6d6763e5a6a83aeb242a">Z3Manager::printDbg</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *e) {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> *z3CondExpr = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">dyn_cast</a>&lt;<a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&gt;(e);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(z3CondExpr &amp;&amp; <span class="stringliteral">&quot;not z3 condition?&quot;</span>);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; z3CondExpr-&gt;<a class="code" href="classSVF_1_1Z3Expr.html#a167a586980be31f4f54884e88f972a04">getExpr</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</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;</div><div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="classSVF_1_1Z3Manager.html#a163ced4f232f18a0d2c0066fc72745e1"> 240</a></span>&#160;std::string <a class="code" href="classSVF_1_1Z3Manager.html#a163ced4f232f18a0d2c0066fc72745e1">Z3Manager::dumpStr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *e)<span class="keyword"> const </span>{</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; std::ostringstream out;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> *z3CondExpr = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">dyn_cast</a>&lt;<a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&gt;(e);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(z3CondExpr &amp;&amp; <span class="stringliteral">&quot;not z3 condition?&quot;</span>);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; out &lt;&lt; z3CondExpr-&gt;<a class="code" href="classSVF_1_1Z3Expr.html#a167a586980be31f4f54884e88f972a04">getExpr</a>();</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">return</span> out.str();</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;}</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="classSVF_1_1BDDManager.html#a913b8c19f239a162dbfa9527c846c3f6"> 253</a></span>&#160;<a class="code" href="classSVF_1_1BDDExpr.html">BDDExpr</a> *<a class="code" href="classSVF_1_1BDDManager.html#a913b8c19f239a162dbfa9527c846c3f6">BDDManager::getOrAddBranchCond</a>(<a class="code" href="structDdNode.html">BDDCond</a> *bddCond) {</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keyword">auto</span> it = bddToBddCondExprMap.find(bddCond);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">if</span> (it != bddToBddCondExprMap.end())</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keyword">auto</span> *cond = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BDDExpr.html">BDDExpr</a>(bddCond);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">return</span> bddToBddCondExprMap.emplace(bddCond, cond).first-&gt;second;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; }</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;}</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;</div><div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="classSVF_1_1BDDManager.html#a10be33f7829cb2da0ba1c3b2ddc22261"> 263</a></span>&#160;<a class="code" href="classSVF_1_1BDDManager.html#a10be33f7829cb2da0ba1c3b2ddc22261">BDDManager::BDDManager</a>() {</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; m_bdd_mgr = <a class="code" href="cudd_8h.html#a72894f8bc06257ab2a667acb742a3ab6">Cudd_Init</a>(0, 0, <a class="code" href="cudd_8h.html#a5898eb92cde4c11e117bb88330b50019">CUDD_UNIQUE_SLOTS</a>, <a class="code" href="cudd_8h.html#ae43ddb042121362b558a2ff66dd829ed">CUDD_CACHE_SLOTS</a>, 0);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#aed854ecc55a568597f7d7f1f78fb92f4">trueCond</a> = getOrAddBranchCond(BddOne());</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#a0ba3cf86743de62bcd5fd38d8166bc90">falseCond</a> = getOrAddBranchCond(BddZero());</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;</div><div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classSVF_1_1BDDManager.html#aaede06df8ca879e9116a16ed690b2f8e"> 269</a></span>&#160;<a class="code" href="classSVF_1_1BDDManager.html#aaede06df8ca879e9116a16ed690b2f8e">BDDManager::~BDDManager</a>() {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;it: bddToBddCondExprMap) {</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keyword">delete</span> it.second;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; }</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="cudd_8h.html#a2889ace3fcf7d4e00915de52554fd475">Cudd_Quit</a>(m_bdd_mgr);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;}</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="classSVF_1_1BDDManager.html#a5311c7dcff82a09077e640e20d9e68e9"> 276</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *<a class="code" href="classSVF_1_1BDDManager.html#a5311c7dcff82a09077e640e20d9e68e9">BDDManager::createFreshBranchCond</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst) {</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> condCountIdx = <a class="code" href="classSVF_1_1CondManager.html#a7efaeff7229fcfdc6c05d53ee3e1d916">totalCondNum</a>++;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <a class="code" href="structDdNode.html">BDDCond</a> *bddCond = createCond(condCountIdx);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keyword">auto</span> it = bddToBddCondExprMap.find(bddCond);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">if</span> (it != bddToBddCondExprMap.end())</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keyword">auto</span> *cond = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BDDExpr.html">BDDExpr</a>(bddCond);</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#a1fbf7dd446309e13671d838c91da26bf">setCondInst</a>(cond, inst);</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keyword">auto</span> *negCond = <a class="code" href="classSVF_1_1Z3Manager.html#a5fcfc5dcdd77d9860aaaff9cd9f43c55">NEG</a>(cond);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <a class="code" href="classSVF_1_1CondManager.html#a1fbf7dd446309e13671d838c91da26bf">setCondInst</a>(negCond, inst);</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">return</span> bddToBddCondExprMap.emplace(bddCond, cond).first-&gt;second;</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;}</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;</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;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *<a class="code" href="classSVF_1_1BDDManager.html#af8a4ede3ac4b89bb0ce7767ee4505aea">BDDManager::AND</a>(<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *lhs, <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *rhs) {</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keyword">auto</span> *bddlhs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">dyn_cast</a>&lt;<a class="code" href="classSVF_1_1BDDExpr.html">BDDExpr</a>&gt;(lhs);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keyword">auto</span> *bddrhs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">dyn_cast</a>&lt;<a class="code" href="classSVF_1_1BDDExpr.html">BDDExpr</a>&gt;(rhs);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(bddlhs &amp;&amp; bddrhs &amp;&amp; <span class="stringliteral">&quot;not bdd condition?&quot;</span>);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">if</span> (bddlhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>() || bddrhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>();</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (bddlhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">return</span> bddrhs;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (bddrhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">return</span> bddlhs;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <a class="code" href="structDdNode.html">BDDCond</a> *tmp = <a class="code" href="cudd_8h.html#adfbb2fd5b9c884df0d684a86dc26a97d">Cudd_bddAndLimit</a>(m_bdd_mgr, bddlhs-&gt;getBDDCond(), bddrhs-&gt;getBDDCond(), <a class="code" href="classSVF_1_1Options.html#a344ca0e4b8d9159836e558aed44be1b4">Options::MaxBddSize</a>);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">if</span> (tmp == <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">SVFUtil::writeWrnMsg</a>(<span class="stringliteral">&quot;exceeds max bdd size \n&quot;</span>);</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">return</span> bddlhs;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <a class="code" href="cudd_8h.html#a3d0d9959640235fc073699c776914fca">Cudd_Ref</a>(tmp);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordflow">return</span> getOrAddBranchCond(tmp);</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; }</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;</div><div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="classSVF_1_1BDDManager.html#a6c5d935cc7c9ee02a0a37f7fcce34a89"> 320</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *<a class="code" href="classSVF_1_1BDDManager.html#a6c5d935cc7c9ee02a0a37f7fcce34a89">BDDManager::OR</a>(<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *lhs, <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *rhs) {</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keyword">auto</span> *bddlhs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">dyn_cast</a>&lt;<a class="code" href="classSVF_1_1BDDExpr.html">BDDExpr</a>&gt;(lhs);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keyword">auto</span> *bddrhs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">dyn_cast</a>&lt;<a class="code" href="classSVF_1_1BDDExpr.html">BDDExpr</a>&gt;(rhs);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(bddlhs &amp;&amp; bddrhs &amp;&amp; <span class="stringliteral">&quot;not bdd condition?&quot;</span>);</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="keywordflow">if</span> (bddlhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>() || bddrhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>();</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (bddlhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">return</span> bddrhs;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (bddrhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">return</span> bddlhs;</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <a class="code" href="structDdNode.html">BDDCond</a> *tmp = <a class="code" href="cudd_8h.html#a6cbc77f8b658ac3c88a2549a84c58b38">Cudd_bddOrLimit</a>(m_bdd_mgr, bddlhs-&gt;getBDDCond(), bddrhs-&gt;getBDDCond(), <a class="code" href="classSVF_1_1Options.html#a344ca0e4b8d9159836e558aed44be1b4">Options::MaxBddSize</a>);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">if</span> (tmp == <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">SVFUtil::writeWrnMsg</a>(<span class="stringliteral">&quot;exceeds max bdd size \n&quot;</span>);</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>();</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <a class="code" href="cudd_8h.html#a3d0d9959640235fc073699c776914fca">Cudd_Ref</a>(tmp);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">return</span> getOrAddBranchCond(tmp);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; }</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;}</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;</div><div class="line"><a name="l00344"></a><span class="lineno"><a class="line" href="classSVF_1_1BDDManager.html#a0dbbee1845fbf6ce660caf6c30438bef"> 344</a></span>&#160;<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *<a class="code" href="classSVF_1_1BDDManager.html#a0dbbee1845fbf6ce660caf6c30438bef">BDDManager::NEG</a>(<a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *lhs) {</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keyword">auto</span> *bddlhs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">dyn_cast</a>&lt;<a class="code" href="classSVF_1_1BDDExpr.html">BDDExpr</a>&gt;(lhs);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(bddlhs &amp;&amp; <span class="stringliteral">&quot;not bdd condition?&quot;</span>);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keywordflow">if</span> (bddlhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>();</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (bddlhs == <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>())</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>();</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">return</span> getOrAddBranchCond(<a class="code" href="cudd_8h.html#a352ef8d39e760eaabae6d58d9a5ddbfc">Cudd_Not</a>(bddlhs-&gt;getBDDCond()));</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;}</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;</div><div class="line"><a name="l00360"></a><span class="lineno"><a class="line" href="classSVF_1_1BDDManager.html#aecd072d15ee8a4a9940b31ac78c50960"> 360</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BDDManager.html#aecd072d15ee8a4a9940b31ac78c50960">BDDManager::isSatisfiable</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *cond) {</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">return</span> cond != <a class="code" href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">getFalseCond</a>();</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;}</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno"><a class="line" href="classSVF_1_1BDDManager.html#a9aaa963fedb93d98f62f64bed1fd173f"> 368</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BDDManager.html#a9aaa963fedb93d98f62f64bed1fd173f">BDDManager::ddClearFlag</a>(<a class="code" href="structDdNode.html">BDDCond</a> *f)<span class="keyword"> const </span>{</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="cudd_8h.html#a35322518c24f65f44eda9623083cb62c">Cudd_IsComplement</a>(f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a>))</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="comment">/* Clear visited flag. */</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a> = <a class="code" href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a>(f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a>);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cuddInt_8h.html#aa5cad999b2a4a3dbbfe5c1da1d8bc028">cuddIsConstant</a>(f))</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <a class="code" href="cuddInt_8c.html#ab69f928c3cca42f5b1330803de1d9199">ddClearFlag</a>(<a class="code" href="cuddInt_8h.html#a09834c697b92ac296b1e50c863f88262">cuddT</a>(f));</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <a class="code" href="cuddInt_8c.html#ab69f928c3cca42f5b1330803de1d9199">ddClearFlag</a>(<a class="code" href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a>(<a class="code" href="cuddInt_8h.html#aaef03f10591d8e28bb5fecd2aa7c93ff">cuddE</a>(f)));</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;}</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;</div><div class="line"><a name="l00380"></a><span class="lineno"><a class="line" href="classSVF_1_1BDDManager.html#a1b7908b727c638d9cfd5e7347dd6b63d"> 380</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BDDManager.html#a1b7908b727c638d9cfd5e7347dd6b63d">BDDManager::BddSupportStep</a>(<a class="code" href="structDdNode.html">BDDCond</a> *f, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;support)<span class="keyword"> const </span>{</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cuddInt_8h.html#aa5cad999b2a4a3dbbfe5c1da1d8bc028">cuddIsConstant</a>(f) || <a class="code" href="cudd_8h.html#a35322518c24f65f44eda9623083cb62c">Cudd_IsComplement</a>(f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a>))</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; support.set(f-&gt;<a class="code" href="structDdNode.html#abbd39b25b9abe4b4d53cd267a4103bda">index</a>);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; BddSupportStep(<a class="code" href="cuddInt_8h.html#a09834c697b92ac296b1e50c863f88262">cuddT</a>(f), support);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; BddSupportStep(<a class="code" href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a>(<a class="code" href="cuddInt_8h.html#aaef03f10591d8e28bb5fecd2aa7c93ff">cuddE</a>(f)), support);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="comment">/* Mark as visited. */</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a> = <a class="code" href="cudd_8h.html#ac4575f4314998362765264f64eccfe0c">Cudd_Complement</a>(f-&gt;<a class="code" href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">next</a>);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;}</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;</div><div class="line"><a name="l00392"></a><span class="lineno"><a class="line" href="classSVF_1_1BDDManager.html#a3fa608e37862e2702096c65fdb27c8c8"> 392</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BDDManager.html#a3fa608e37862e2702096c65fdb27c8c8">BDDManager::extractSubConds</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *f, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &amp;support)<span class="keyword"> const </span>{</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> *bddCondExpr = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">dyn_cast</a>&lt;<a class="code" href="classSVF_1_1BDDExpr.html">BDDExpr</a>&gt;(f);</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(bddCondExpr &amp;&amp; <span class="stringliteral">&quot;not bdd condition?&quot;</span>);</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; BddSupportStep(<a class="code" href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a>(bddCondExpr-&gt;getBDDCond()), support);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <a class="code" href="cuddInt_8c.html#ab69f928c3cca42f5b1330803de1d9199">ddClearFlag</a>(<a class="code" href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a>(bddCondExpr-&gt;getBDDCond()));</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;}</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;</div><div class="line"><a name="l00402"></a><span class="lineno"><a class="line" href="classSVF_1_1BDDManager.html#a933749fc805c4147722bb847f3e427b8"> 402</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BDDManager.html#a933749fc805c4147722bb847f3e427b8">BDDManager::dump</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *lhs, <a class="code" href="namespaceSVF.html#a8bd74fdcb0e58d0249003df9c3fb8b31">OutStream</a> &amp;O) {</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">if</span> (lhs == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; O &lt;&lt; <span class="stringliteral">&quot;T&quot;</span>;</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> support;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="classSVF_1_1Z3Manager.html#aa6a78fc2f0a3ed9957230703fb8d730d">extractSubConds</a>(lhs, support);</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator iter = support.begin(); iter != support.end();</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; ++iter) {</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordtype">unsigned</span> rid = *iter;</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; O &lt;&lt; rid &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; }</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; }</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;}</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;</div><div class="line"><a name="l00420"></a><span class="lineno"><a class="line" href="classSVF_1_1BDDManager.html#add075de17c153605c2d5eb7b5d87dbfb"> 420</a></span>&#160;std::string <a class="code" href="classSVF_1_1BDDManager.html#add075de17c153605c2d5eb7b5d87dbfb">BDDManager::dumpStr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CondExpr.html">CondExpr</a> *e)<span class="keyword"> const </span>{</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> *bddCondExpr = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">dyn_cast</a>&lt;<a class="code" href="classSVF_1_1BDDExpr.html">BDDExpr</a>&gt;(e);</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(bddCondExpr &amp;&amp; <span class="stringliteral">&quot;not bdd condition?&quot;</span>);</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; std::string str;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">if</span> (bddCondExpr == <a class="code" href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">getTrueCond</a>())</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; str += <span class="stringliteral">&quot;T&quot;</span>;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> support;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <a class="code" href="classSVF_1_1Z3Manager.html#aa6a78fc2f0a3ed9957230703fb8d730d">extractSubConds</a>(bddCondExpr, support);</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">for</span> (NodeBS::iterator iter = support.begin(); iter != support.end();</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; ++iter) {</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordtype">unsigned</span> rid = *iter;</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordtype">char</span> int2str[16];</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; sprintf(int2str, <span class="stringliteral">&quot;%d&quot;</span>, rid);</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; str += int2str;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; str += <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; }</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; }</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">return</span> str;</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;}</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;</div><div class="ttc" id="classSVF_1_1CondManager_html_a0ba3cf86743de62bcd5fd38d8166bc90"><div class="ttname"><a href="classSVF_1_1CondManager.html#a0ba3cf86743de62bcd5fd38d8166bc90">SVF::CondManager::falseCond</a></div><div class="ttdeci">static CondExpr * falseCond</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00229">Conditions.h:229</a></div></div>
70
+ <div class="ttc" id="classSVF_1_1BDDManager_html_a5311c7dcff82a09077e640e20d9e68e9"><div class="ttname"><a href="classSVF_1_1BDDManager.html#a5311c7dcff82a09077e640e20d9e68e9">SVF::BDDManager::createFreshBranchCond</a></div><div class="ttdeci">CondExpr * createFreshBranchCond(const Instruction *inst) override</div><div class="ttdoc">Create a fresh condition to encode each program branch. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00276">Conditions.cpp:276</a></div></div>
71
+ <div class="ttc" id="cudd_8h_html_a5898eb92cde4c11e117bb88330b50019"><div class="ttname"><a href="cudd_8h.html#a5898eb92cde4c11e117bb88330b50019">CUDD_UNIQUE_SLOTS</a></div><div class="ttdeci">#define CUDD_UNIQUE_SLOTS</div><div class="ttdef"><b>Definition:</b> <a href="cudd_8h_source.html#l00090">cudd.h:90</a></div></div>
74
72
  <div class="ttc" id="Conditions_8h_html"><div class="ttname"><a href="Conditions_8h.html">Conditions.h</a></div></div>
73
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_a98916f1ae12b8c2bb98231b19c94d928"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#a98916f1ae12b8c2bb98231b19c94d928">SVF::Z3Manager::isSatisfiable</a></div><div class="ttdeci">bool isSatisfiable(const CondExpr *cond) override</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00181">Conditions.cpp:181</a></div></div>
74
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_a540de948d9cc396341376e081d7e46aa"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#a540de948d9cc396341376e081d7e46aa">SVF::Z3Manager::AND</a></div><div class="ttdeci">CondExpr * AND(CondExpr *lhs, CondExpr *rhs) override</div><div class="ttdoc">Operations on conditions. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00098">Conditions.cpp:98</a></div></div>
75
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_a869828207971498df1fd7c9f29d3e999"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#a869828207971498df1fd7c9f29d3e999">SVF::Z3Manager::isNegCond</a></div><div class="ttdeci">bool isNegCond(const CondExpr *cond) const override</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00300">Conditions.h:300</a></div></div>
75
76
  <div class="ttc" id="structDdNode_html"><div class="ttname"><a href="structDdNode.html">DdNode</a></div><div class="ttdef"><b>Definition:</b> <a href="cudd_8h_source.html#l00264">cudd.h:264</a></div></div>
76
77
  <div class="ttc" id="cudd_8h_html_a352ef8d39e760eaabae6d58d9a5ddbfc"><div class="ttname"><a href="cudd_8h.html#a352ef8d39e760eaabae6d58d9a5ddbfc">Cudd_Not</a></div><div class="ttdeci">#define Cudd_Not(node)</div><div class="ttdef"><b>Definition:</b> <a href="cudd_8h_source.html#l00343">cudd.h:343</a></div></div>
77
- <div class="ttc" id="classSVF_1_1CondManager_html_a385339096b4322654b5b2c7a37e852fe"><div class="ttname"><a href="classSVF_1_1CondManager.html#a385339096b4322654b5b2c7a37e852fe">SVF::CondManager::printDbg</a></div><div class="ttdeci">void printDbg(const CondExpr *e)</div><div class="ttdoc">Print out one particular expression. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00242">Conditions.cpp:242</a></div></div>
78
- <div class="ttc" id="classSVF_1_1CondManager_html_ac74f182ef249a7c892ba9c630f889ddc"><div class="ttname"><a href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">SVF::CondManager::getTrueCond</a></div><div class="ttdeci">CondExpr * getTrueCond() const</div><div class="ttdoc">Return the unique true condition. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00226">Conditions.h:226</a></div></div>
79
- <div class="ttc" id="classSVF_1_1CondManager_html_ae4ad2a90ac794163060290b6ac1f2949"><div class="ttname"><a href="classSVF_1_1CondManager.html#ae4ad2a90ac794163060290b6ac1f2949">SVF::CondManager::createFreshBranchCond</a></div><div class="ttdeci">CondExpr * createFreshBranchCond(const Instruction *inst)</div><div class="ttdoc">Create a fresh condition to encode each program branch. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00091">Conditions.cpp:91</a></div></div>
80
- <div class="ttc" id="classSVF_1_1CondManager_html_a087773d6ae6ed6af009a356dd7b61e11"><div class="ttname"><a href="classSVF_1_1CondManager.html#a087773d6ae6ed6af009a356dd7b61e11">SVF::CondManager::cxt</a></div><div class="ttdeci">z3::context cxt</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00302">Conditions.h:302</a></div></div>
81
- <div class="ttc" id="classSVF_1_1CondManager_html_adef2474c65a7f9d96b27ee670136a240"><div class="ttname"><a href="classSVF_1_1CondManager.html#adef2474c65a7f9d96b27ee670136a240">SVF::CondManager::isEquivalentBranchCond</a></div><div class="ttdeci">bool isEquivalentBranchCond(const CondExpr *lhs, const CondExpr *rhs) const</div><div class="ttdoc">Whether lhs and rhs are equivalent branch conditions. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00264">Conditions.h:264</a></div></div>
78
+ <div class="ttc" id="classSVF_1_1Z3Manager_html"><div class="ttname"><a href="classSVF_1_1Z3Manager.html">SVF::Z3Manager</a></div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00240">Conditions.h:240</a></div></div>
79
+ <div class="ttc" id="classSVF_1_1BDDManager_html_a0dbbee1845fbf6ce660caf6c30438bef"><div class="ttname"><a href="classSVF_1_1BDDManager.html#a0dbbee1845fbf6ce660caf6c30438bef">SVF::BDDManager::NEG</a></div><div class="ttdeci">CondExpr * NEG(CondExpr *lhs) override</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00344">Conditions.cpp:344</a></div></div>
80
+ <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
81
+ <div class="ttc" id="classSVF_1_1CondManager_html_ac74f182ef249a7c892ba9c630f889ddc"><div class="ttname"><a href="classSVF_1_1CondManager.html#ac74f182ef249a7c892ba9c630f889ddc">SVF::CondManager::getTrueCond</a></div><div class="ttdeci">CondExpr * getTrueCond() const</div><div class="ttdoc">Return the unique true condition. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00172">Conditions.h:172</a></div></div>
82
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_ad3d9d77ee64d84bb204fa66c1a51a01a"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#ad3d9d77ee64d84bb204fa66c1a51a01a">SVF::Z3Manager::~Z3Manager</a></div><div class="ttdeci">virtual ~Z3Manager()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00079">Conditions.cpp:79</a></div></div>
83
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_aa6a78fc2f0a3ed9957230703fb8d730d"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#aa6a78fc2f0a3ed9957230703fb8d730d">SVF::Z3Manager::extractSubConds</a></div><div class="ttdeci">void extractSubConds(const CondExpr *f, NodeBS &amp;support) const override</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00162">Conditions.cpp:162</a></div></div>
84
+ <div class="ttc" id="classSVF_1_1BDDManager_html_add075de17c153605c2d5eb7b5d87dbfb"><div class="ttname"><a href="classSVF_1_1BDDManager.html#add075de17c153605c2d5eb7b5d87dbfb">SVF::BDDManager::dumpStr</a></div><div class="ttdeci">std::string dumpStr(const CondExpr *e) const override</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00420">Conditions.cpp:420</a></div></div>
82
85
  <div class="ttc" id="cudd_8h_html_afbbecf4f6f78f92518f4d0a477d870b6"><div class="ttname"><a href="cudd_8h.html#afbbecf4f6f78f92518f4d0a477d870b6">Cudd_Regular</a></div><div class="ttdeci">#define Cudd_Regular(node)</div><div class="ttdef"><b>Definition:</b> <a href="cudd_8h_source.html#l00373">cudd.h:373</a></div></div>
83
- <div class="ttc" id="SVFUtil_8h_html"><div class="ttname"><a href="SVFUtil_8h.html">SVFUtil.h</a></div></div>
84
- <div class="ttc" id="classSVF_1_1CondManager_html_ac735eb27ed4328f97ced87494683f7f1"><div class="ttname"><a href="classSVF_1_1CondManager.html#ac735eb27ed4328f97ced87494683f7f1">SVF::CondManager::branchCondManager</a></div><div class="ttdeci">BranchCondManager branchCondManager</div><div class="ttdoc">branch condition manager </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00309">Conditions.h:309</a></div></div>
85
- <div class="ttc" id="classSVF_1_1CondManager_html_aa307bb05b92907ccf8859b4bac53b796"><div class="ttname"><a href="classSVF_1_1CondManager.html#aa307bb05b92907ccf8859b4bac53b796">SVF::CondManager::CondManager</a></div><div class="ttdeci">CondManager()</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00046">Conditions.cpp:46</a></div></div>
86
- <div class="ttc" id="classSVF_1_1CondManager_html_a4b88160366a7c7b2bf7e2ab632ed04c7"><div class="ttname"><a href="classSVF_1_1CondManager.html#a4b88160366a7c7b2bf7e2ab632ed04c7">SVF::CondManager::AND</a></div><div class="ttdeci">CondExpr * AND(CondExpr *lhs, CondExpr *rhs)</div><div class="ttdoc">Operations on conditions. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00134">Conditions.cpp:134</a></div></div>
86
+ <div class="ttc" id="classSVF_1_1Z3Expr_html"><div class="ttname"><a href="classSVF_1_1Z3Expr.html">SVF::Z3Expr</a></div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00064">Conditions.h:64</a></div></div>
87
+ <div class="ttc" id="cudd_8h_html_ae43ddb042121362b558a2ff66dd829ed"><div class="ttname"><a href="cudd_8h.html#ae43ddb042121362b558a2ff66dd829ed">CUDD_CACHE_SLOTS</a></div><div class="ttdeci">#define CUDD_CACHE_SLOTS</div><div class="ttdef"><b>Definition:</b> <a href="cudd_8h_source.html#l00091">cudd.h:91</a></div></div>
88
+ <div class="ttc" id="classSVF_1_1Z3Expr_html_a167a586980be31f4f54884e88f972a04"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a167a586980be31f4f54884e88f972a04">SVF::Z3Expr::getExpr</a></div><div class="ttdeci">const Z3Cond &amp; getExpr() const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00075">Conditions.h:75</a></div></div>
89
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_a2b2c98208ab6d9b6fd103a965d9aa1ac"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#a2b2c98208ab6d9b6fd103a965d9aa1ac">SVF::Z3Manager::Z3Manager</a></div><div class="ttdeci">Z3Manager()</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00072">Conditions.cpp:72</a></div></div>
87
90
  <div class="ttc" id="cudd_8h_html_adfbb2fd5b9c884df0d684a86dc26a97d"><div class="ttname"><a href="cudd_8h.html#adfbb2fd5b9c884df0d684a86dc26a97d">Cudd_bddAndLimit</a></div><div class="ttdeci">DdNode * Cudd_bddAndLimit(DdManager *dd, DdNode *f, DdNode *g, unsigned int limit)</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8c_source.html#l03146">cuddInt.c:3146</a></div></div>
88
91
  <div class="ttc" id="cudd_8h_html_a6cbc77f8b658ac3c88a2549a84c58b38"><div class="ttname"><a href="cudd_8h.html#a6cbc77f8b658ac3c88a2549a84c58b38">Cudd_bddOrLimit</a></div><div class="ttdeci">DdNode * Cudd_bddOrLimit(DdManager *dd, DdNode *f, DdNode *g, unsigned int limit)</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8c_source.html#l03214">cuddInt.c:3214</a></div></div>
89
92
  <div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00077">SVFBasicTypes.h:77</a></div></div>
90
93
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a077caa1b10ab84d101d79fc7ea50db2d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">SVF::SVFUtil::writeWrnMsg</a></div><div class="ttdeci">void writeWrnMsg(std::string msg)</div><div class="ttdoc">Writes a message run through wrnMsg. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00069">SVFUtil.cpp:69</a></div></div>
91
- <div class="ttc" id="classSVF_1_1CondExpr_html"><div class="ttname"><a href="classSVF_1_1CondExpr.html">SVF::CondExpr</a></div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00042">Conditions.h:42</a></div></div>
92
- <div class="ttc" id="classSVF_1_1BranchCondManager_html_aa241ee8c9d8ef17029dba67b737d8beb"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#aa241ee8c9d8ef17029dba67b737d8beb">SVF::BranchCondManager::extractSubConds</a></div><div class="ttdeci">void extractSubConds(BranchCond *f, NodeBS &amp;support) const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00354">Conditions.cpp:354</a></div></div>
93
- <div class="ttc" id="classSVF_1_1BranchCondManager_html_ad7832b33b3b73fcaca5c8278ed4d3e7f"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#ad7832b33b3b73fcaca5c8278ed4d3e7f">SVF::BranchCondManager::NEG</a></div><div class="ttdeci">BranchCond * NEG(BranchCond *lhs)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00313">Conditions.cpp:313</a></div></div>
94
+ <div class="ttc" id="classSVF_1_1CondExpr_html"><div class="ttname"><a href="classSVF_1_1CondExpr.html">SVF::CondExpr</a></div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00041">Conditions.h:41</a></div></div>
95
+ <div class="ttc" id="classSVF_1_1BDDManager_html_a9aaa963fedb93d98f62f64bed1fd173f"><div class="ttname"><a href="classSVF_1_1BDDManager.html#a9aaa963fedb93d98f62f64bed1fd173f">SVF::BDDManager::ddClearFlag</a></div><div class="ttdeci">void ddClearFlag(BDDCond *f) const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00368">Conditions.cpp:368</a></div></div>
96
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_a4ba99458553cfd7b586f0730b62e5b82"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#a4ba99458553cfd7b586f0730b62e5b82">SVF::Z3Manager::createFreshBranchCond</a></div><div class="ttdeci">CondExpr * createFreshBranchCond(const Instruction *inst) override</div><div class="ttdoc">Create a fresh condition to encode each program branch. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00144">Conditions.cpp:144</a></div></div>
97
+ <div class="ttc" id="classSVF_1_1BDDManager_html_a3fa608e37862e2702096c65fdb27c8c8"><div class="ttname"><a href="classSVF_1_1BDDManager.html#a3fa608e37862e2702096c65fdb27c8c8">SVF::BDDManager::extractSubConds</a></div><div class="ttdeci">void extractSubConds(const CondExpr *f, NodeBS &amp;support) const override</div><div class="ttdoc">Extract sub conditions of this expression. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00392">Conditions.cpp:392</a></div></div>
98
+ <div class="ttc" id="classSVF_1_1BDDManager_html_a933749fc805c4147722bb847f3e427b8"><div class="ttname"><a href="classSVF_1_1BDDManager.html#a933749fc805c4147722bb847f3e427b8">SVF::BDDManager::dump</a></div><div class="ttdeci">void dump(const CondExpr *lhs, OutStream &amp;O)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00402">Conditions.cpp:402</a></div></div>
99
+ <div class="ttc" id="classSVF_1_1BDDManager_html_aecd072d15ee8a4a9940b31ac78c50960"><div class="ttname"><a href="classSVF_1_1BDDManager.html#aecd072d15ee8a4a9940b31ac78c50960">SVF::BDDManager::isSatisfiable</a></div><div class="ttdeci">bool isSatisfiable(const CondExpr *cond) override</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00360">Conditions.cpp:360</a></div></div>
94
100
  <div class="ttc" id="cuddInt_8c_html_ab69f928c3cca42f5b1330803de1d9199"><div class="ttname"><a href="cuddInt_8c.html#ab69f928c3cca42f5b1330803de1d9199">ddClearFlag</a></div><div class="ttdeci">static void ddClearFlag(DdNode *f)</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8c_source.html#l23821">cuddInt.c:23821</a></div></div>
95
- <div class="ttc" id="classSVF_1_1CondManager_html_ab9772aa1a35e963ccc9ce1007ebc1310"><div class="ttname"><a href="classSVF_1_1CondManager.html#ab9772aa1a35e963ccc9ce1007ebc1310">SVF::CondManager::printModel</a></div><div class="ttdeci">void printModel()</div><div class="ttdoc">Dump out all expressions. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00179">Conditions.cpp:179</a></div></div>
101
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_a667818d7f30d6d6763e5a6a83aeb242a"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#a667818d7f30d6d6763e5a6a83aeb242a">SVF::Z3Manager::printDbg</a></div><div class="ttdeci">void printDbg(const CondExpr *e)</div><div class="ttdoc">Print out one particular expression. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00231">Conditions.cpp:231</a></div></div>
102
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_af50dd899af45580176376d2bb7cf6243"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#af50dd899af45580176376d2bb7cf6243">SVF::Z3Manager::OR</a></div><div class="ttdeci">CondExpr * OR(CondExpr *lhs, CondExpr *rhs) override</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00114">Conditions.cpp:114</a></div></div>
103
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_ac6fe9310046274759c45c1435fcc85c6"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#ac6fe9310046274759c45c1435fcc85c6">SVF::Z3Manager::sol</a></div><div class="ttdeci">z3::solver sol</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00253">Conditions.h:253</a></div></div>
104
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_a163ced4f232f18a0d2c0066fc72745e1"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#a163ced4f232f18a0d2c0066fc72745e1">SVF::Z3Manager::dumpStr</a></div><div class="ttdeci">std::string dumpStr(const CondExpr *e) const override</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00240">Conditions.cpp:240</a></div></div>
105
+ <div class="ttc" id="classSVF_1_1BDDManager_html"><div class="ttname"><a href="classSVF_1_1BDDManager.html">SVF::BDDManager</a></div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00325">Conditions.h:325</a></div></div>
96
106
  <div class="ttc" id="cudd_8h_html_a35322518c24f65f44eda9623083cb62c"><div class="ttname"><a href="cudd_8h.html#a35322518c24f65f44eda9623083cb62c">Cudd_IsComplement</a></div><div class="ttdeci">#define Cudd_IsComplement(node)</div><div class="ttdef"><b>Definition:</b> <a href="cudd_8h_source.html#l00401">cudd.h:401</a></div></div>
97
- <div class="ttc" id="classSVF_1_1CondManager_html_a5751792e45c8abd5ffd3610d94e9f0b7"><div class="ttname"><a href="classSVF_1_1CondManager.html#a5751792e45c8abd5ffd3610d94e9f0b7">SVF::CondManager::NEG</a></div><div class="ttdeci">CondExpr * NEG(CondExpr *lhs)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00163">Conditions.cpp:163</a></div></div>
98
- <div class="ttc" id="classSVF_1_1CondManager_html_afd01891f45e085e990c9dbba5cbf3914"><div class="ttname"><a href="classSVF_1_1CondManager.html#afd01891f45e085e990c9dbba5cbf3914">SVF::CondManager::branchCondToCondExpr</a></div><div class="ttdeci">BranchCondToCondExprMap branchCondToCondExpr</div><div class="ttdoc">map branch condition to its Condition wrapper </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00307">Conditions.h:307</a></div></div>
107
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_aa0fd8e460f4d89155da3487c0350f972"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#aa0fd8e460f4d89155da3487c0350f972">SVF::Z3Manager::simplify</a></div><div class="ttdeci">z3::expr simplify(const z3::expr &amp;expr) const</div><div class="ttdoc">Preprocess the condition, e.g., Compressing using And-Inverter-Graph. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00198">Conditions.cpp:198</a></div></div>
99
108
  <div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00077">BasicTypes.h:77</a></div></div>
100
- <div class="ttc" id="classSVF_1_1Options_html_a344ca0e4b8d9159836e558aed44be1b4"><div class="ttname"><a href="classSVF_1_1Options.html#a344ca0e4b8d9159836e558aed44be1b4">SVF::Options::MaxBddSize</a></div><div class="ttdeci">static const llvm::cl::opt&lt; unsigned &gt; MaxBddSize</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00218">Options.h:218</a></div></div>
109
+ <div class="ttc" id="classSVF_1_1Options_html_a344ca0e4b8d9159836e558aed44be1b4"><div class="ttname"><a href="classSVF_1_1Options.html#a344ca0e4b8d9159836e558aed44be1b4">SVF::Options::MaxBddSize</a></div><div class="ttdeci">static const llvm::cl::opt&lt; unsigned &gt; MaxBddSize</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00219">Options.h:219</a></div></div>
110
+ <div class="ttc" id="classSVF_1_1CondManager_html_a08cad78a4ebb31f32b72d5ff9793b83e"><div class="ttname"><a href="classSVF_1_1CondManager.html#a08cad78a4ebb31f32b72d5ff9793b83e">SVF::CondManager::getCondMgr</a></div><div class="ttdeci">static CondManager * getCondMgr(CondMgrKind _condMgrKind)</div><div class="ttdoc">Singleton design here to make sure we only have one instance during any analysis. ...</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00043">Conditions.cpp:43</a></div></div>
101
111
  <div class="ttc" id="structDdNode_html_a9422352d3b46de31b325d1cf18b9f25f"><div class="ttname"><a href="structDdNode.html#a9422352d3b46de31b325d1cf18b9f25f">DdNode::next</a></div><div class="ttdeci">DdNode * next</div><div class="ttdef"><b>Definition:</b> <a href="cudd_8h_source.html#l00267">cudd.h:267</a></div></div>
102
- <div class="ttc" id="classSVF_1_1BranchCondManager_html_a7f3fa5e90c08950099ff6f05e96ecb9c"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a7f3fa5e90c08950099ff6f05e96ecb9c">SVF::BranchCondManager::OR</a></div><div class="ttdeci">BranchCond * OR(BranchCond *lhs, BranchCond *rhs)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00288">Conditions.cpp:288</a></div></div>
103
- <div class="ttc" id="classSVF_1_1CondManager_html_a1e48008a3fe3a562512e253133aa557f"><div class="ttname"><a href="classSVF_1_1CondManager.html#a1e48008a3fe3a562512e253133aa557f">SVF::CondManager::condMgr</a></div><div class="ttdeci">static CondManager * condMgr</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00184">Conditions.h:184</a></div></div>
104
- <div class="ttc" id="classSVF_1_1CondManager_html_a1fbf7dd446309e13671d838c91da26bf"><div class="ttname"><a href="classSVF_1_1CondManager.html#a1fbf7dd446309e13671d838c91da26bf">SVF::CondManager::setCondInst</a></div><div class="ttdeci">void setCondInst(const CondExpr *cond, const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00286">Conditions.h:286</a></div></div>
112
+ <div class="ttc" id="classSVF_1_1BDDManager_html_aaede06df8ca879e9116a16ed690b2f8e"><div class="ttname"><a href="classSVF_1_1BDDManager.html#aaede06df8ca879e9116a16ed690b2f8e">SVF::BDDManager::~BDDManager</a></div><div class="ttdeci">virtual ~BDDManager()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00269">Conditions.cpp:269</a></div></div>
113
+ <div class="ttc" id="classSVF_1_1CondManager_html_a1e48008a3fe3a562512e253133aa557f"><div class="ttname"><a href="classSVF_1_1CondManager.html#a1e48008a3fe3a562512e253133aa557f">SVF::CondManager::condMgr</a></div><div class="ttdeci">static CondManager * condMgr</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00143">Conditions.h:143</a></div></div>
114
+ <div class="ttc" id="classSVF_1_1CondManager_html_a1fbf7dd446309e13671d838c91da26bf"><div class="ttname"><a href="classSVF_1_1CondManager.html#a1fbf7dd446309e13671d838c91da26bf">SVF::CondManager::setCondInst</a></div><div class="ttdeci">void setCondInst(const CondExpr *cond, const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00212">Conditions.h:212</a></div></div>
115
+ <div class="ttc" id="classSVF_1_1BDDManager_html_a1b7908b727c638d9cfd5e7347dd6b63d"><div class="ttname"><a href="classSVF_1_1BDDManager.html#a1b7908b727c638d9cfd5e7347dd6b63d">SVF::BDDManager::BddSupportStep</a></div><div class="ttdeci">void BddSupportStep(BDDCond *f, NodeBS &amp;support) const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00380">Conditions.cpp:380</a></div></div>
116
+ <div class="ttc" id="classSVF_1_1BDDManager_html_af8a4ede3ac4b89bb0ce7767ee4505aea"><div class="ttname"><a href="classSVF_1_1BDDManager.html#af8a4ede3ac4b89bb0ce7767ee4505aea">SVF::BDDManager::AND</a></div><div class="ttdeci">CondExpr * AND(CondExpr *lhs, CondExpr *rhs) override</div><div class="ttdoc">Operations on conditions. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00294">Conditions.cpp:294</a></div></div>
117
+ <div class="ttc" id="cudd_8h_html_a72894f8bc06257ab2a667acb742a3ab6"><div class="ttname"><a href="cudd_8h.html#a72894f8bc06257ab2a667acb742a3ab6">Cudd_Init</a></div><div class="ttdeci">DdManager * Cudd_Init(unsigned int numVars, unsigned int numVarsZ, unsigned int numSlots, unsigned int cacheSize, unsigned long maxMemory)</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8c_source.html#l10544">cuddInt.c:10544</a></div></div>
105
118
  <div class="ttc" id="cuddInt_8h_html_aa5cad999b2a4a3dbbfe5c1da1d8bc028"><div class="ttname"><a href="cuddInt_8h.html#aa5cad999b2a4a3dbbfe5c1da1d8bc028">cuddIsConstant</a></div><div class="ttdeci">#define cuddIsConstant(node)</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8h_source.html#l00593">cuddInt.h:593</a></div></div>
106
119
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
107
- <div class="ttc" id="classSVF_1_1CondManager_html_ad1de136dbd62c3b9a7447222bd0890fa"><div class="ttname"><a href="classSVF_1_1CondManager.html#ad1de136dbd62c3b9a7447222bd0890fa">SVF::CondManager::isNegCond</a></div><div class="ttdeci">bool isNegCond(const CondExpr *cond) const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00296">Conditions.h:296</a></div></div>
120
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_a72e5e03058e98c4f511ce2bb180f89cf"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#a72e5e03058e98c4f511ce2bb180f89cf">SVF::Z3Manager::idToCondExprMap</a></div><div class="ttdeci">IDToCondExprMap idToCondExprMap</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00251">Conditions.h:251</a></div></div>
121
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_aa8ecb34cf54a5defb48747b1278b4764"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#aa8ecb34cf54a5defb48747b1278b4764">SVF::Z3Manager::getCond</a></div><div class="ttdeci">CondExpr * getCond(u32_t i) const override</div><div class="ttdoc">Given an id, get its condition. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00270">Conditions.h:270</a></div></div>
108
122
  <div class="ttc" id="cudd_8h_html_ac4575f4314998362765264f64eccfe0c"><div class="ttname"><a href="cudd_8h.html#ac4575f4314998362765264f64eccfe0c">Cudd_Complement</a></div><div class="ttdeci">#define Cudd_Complement(node)</div><div class="ttdef"><b>Definition:</b> <a href="cudd_8h_source.html#l00387">cudd.h:387</a></div></div>
109
- <div class="ttc" id="classSVF_1_1CondManager_html_a725d9c0a3aad4ebea3f06edf433f04ea"><div class="ttname"><a href="classSVF_1_1CondManager.html#a725d9c0a3aad4ebea3f06edf433f04ea">SVF::CondManager::isSatisfiable</a></div><div class="ttdeci">bool isSatisfiable(const CondExpr *cond)</div><div class="ttdoc">Whether the condition is satisfiable. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00222">Conditions.cpp:222</a></div></div>
110
123
  <div class="ttc" id="cuddInt_8h_html_a09834c697b92ac296b1e50c863f88262"><div class="ttname"><a href="cuddInt_8h.html#a09834c697b92ac296b1e50c863f88262">cuddT</a></div><div class="ttdeci">#define cuddT(node)</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8h_source.html#l00609">cuddInt.h:609</a></div></div>
111
- <div class="ttc" id="classSVF_1_1BranchCondManager_html_a739f4206abf4f367dc796e9fd35d4d04"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a739f4206abf4f367dc796e9fd35d4d04">SVF::BranchCondManager::AND</a></div><div class="ttdeci">BranchCond * AND(BranchCond *lhs, BranchCond *rhs)</div><div class="ttdoc">Operations on conditions. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00260">Conditions.cpp:260</a></div></div>
112
- <div class="ttc" id="classSVF_1_1BranchCondManager_html_a3c3812a3c945488bb7c5d1351a6d3415"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a3c3812a3c945488bb7c5d1351a6d3415">SVF::BranchCondManager::dump</a></div><div class="ttdeci">void dump(BranchCond *lhs, OutStream &amp;O)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00363">Conditions.cpp:363</a></div></div>
113
- <div class="ttc" id="classSVF_1_1CondManager_html_a8a9d3d96c2c8cfef8b9d9c27c28871f6"><div class="ttname"><a href="classSVF_1_1CondManager.html#a8a9d3d96c2c8cfef8b9d9c27c28871f6">SVF::CondManager::getMemUsage</a></div><div class="ttdeci">std::string getMemUsage()</div><div class="ttdoc">Return memory usage for this condition manager. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00193">Conditions.cpp:193</a></div></div>
114
- <div class="ttc" id="classSVF_1_1CondManager_html_a3621c17b2ff1beb7aa4e467ec357713b"><div class="ttname"><a href="classSVF_1_1CondManager.html#a3621c17b2ff1beb7aa4e467ec357713b">SVF::CondManager::allocatedConds</a></div><div class="ttdeci">IDToCondExprMap allocatedConds</div><div class="ttdoc">map condition id (z3 ast id) to its Condition wrapper </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00306">Conditions.h:306</a></div></div>
115
- <div class="ttc" id="classSVF_1_1CondManager_html_ac246b92ebdf6a9635ed79892b81b9ae8"><div class="ttname"><a href="classSVF_1_1CondManager.html#ac246b92ebdf6a9635ed79892b81b9ae8">SVF::CondManager::getCond</a></div><div class="ttdeci">CondExpr * getCond(u32_t id) const</div><div class="ttdoc">Get condition using condition id (z3 ast id) </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00272">Conditions.h:272</a></div></div>
116
- <div class="ttc" id="classSVF_1_1CondManager_html_a049541fec44cac3401a0dc68ff2f0ac1"><div class="ttname"><a href="classSVF_1_1CondManager.html#a049541fec44cac3401a0dc68ff2f0ac1">SVF::CondManager::setNegCondInst</a></div><div class="ttdeci">void setNegCondInst(const CondExpr *cond, const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00291">Conditions.h:291</a></div></div>
124
+ <div class="ttc" id="classSVF_1_1BDDExpr_html"><div class="ttname"><a href="classSVF_1_1BDDExpr.html">SVF::BDDExpr</a></div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00105">Conditions.h:105</a></div></div>
125
+ <div class="ttc" id="classSVF_1_1BDDManager_html_a10be33f7829cb2da0ba1c3b2ddc22261"><div class="ttname"><a href="classSVF_1_1BDDManager.html#a10be33f7829cb2da0ba1c3b2ddc22261">SVF::BDDManager::BDDManager</a></div><div class="ttdeci">BDDManager()</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00263">Conditions.cpp:263</a></div></div>
117
126
  <div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
118
- <div class="ttc" id="classSVF_1_1BranchCondManager_html_a94f84201f91b7175907e72af2633f6f2"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a94f84201f91b7175907e72af2633f6f2">SVF::BranchCondManager::BddSupportStep</a></div><div class="ttdeci">void BddSupportStep(BranchCond *f, NodeBS &amp;support) const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00341">Conditions.cpp:341</a></div></div>
119
- <div class="ttc" id="classSVF_1_1CondManager_html_af167e75fab5f61b18bff296075c107d1"><div class="ttname"><a href="classSVF_1_1CondManager.html#af167e75fab5f61b18bff296075c107d1">SVF::CondManager::getCondNumber</a></div><div class="ttdeci">u32_t getCondNumber()</div><div class="ttdoc">Return the number of condition expressions. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00128">Conditions.cpp:128</a></div></div>
120
- <div class="ttc" id="classSVF_1_1BranchCondManager_html_a013eb66493beb2b1d004605c68894a95"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a013eb66493beb2b1d004605c68894a95">SVF::BranchCondManager::getFalseCond</a></div><div class="ttdeci">BranchCond * getFalseCond() const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00138">Conditions.h:138</a></div></div>
121
- <div class="ttc" id="classSVF_1_1CondExpr_html_ac83903c62554c6f91812d79d23ec4e23"><div class="ttname"><a href="classSVF_1_1CondExpr.html#ac83903c62554c6f91812d79d23ec4e23">SVF::CondExpr::getExpr</a></div><div class="ttdeci">const z3::expr &amp; getExpr() const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00055">Conditions.h:55</a></div></div>
127
+ <div class="ttc" id="classSVF_1_1BDDManager_html_a6c5d935cc7c9ee02a0a37f7fcce34a89"><div class="ttname"><a href="classSVF_1_1BDDManager.html#a6c5d935cc7c9ee02a0a37f7fcce34a89">SVF::BDDManager::OR</a></div><div class="ttdeci">CondExpr * OR(CondExpr *lhs, CondExpr *rhs) override</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00320">Conditions.cpp:320</a></div></div>
128
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_a34d8f9fc93bb82a8916ae45534ef5941"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#a34d8f9fc93bb82a8916ae45534ef5941">SVF::Z3Manager::isEquivalentBranchCond</a></div><div class="ttdeci">bool isEquivalentBranchCond(const CondExpr *lhs, const CondExpr *rhs) override</div><div class="ttdoc">Whether lhs and rhs are equivalent branch conditions. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00085">Conditions.cpp:85</a></div></div>
129
+ <div class="ttc" id="classSVF_1_1CondManager_html_a7f7519973f1e0ab8054670a6154bd74f"><div class="ttname"><a href="classSVF_1_1CondManager.html#a7f7519973f1e0ab8054670a6154bd74f">SVF::CondManager::CondMgrKind</a></div><div class="ttdeci">CondMgrKind</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00138">Conditions.h:138</a></div></div>
122
130
  <div class="ttc" id="structDdNode_html_abbd39b25b9abe4b4d53cd267a4103bda"><div class="ttname"><a href="structDdNode.html#abbd39b25b9abe4b4d53cd267a4103bda">DdNode::index</a></div><div class="ttdeci">DdHalfWord index</div><div class="ttdef"><b>Definition:</b> <a href="cudd_8h_source.html#l00265">cudd.h:265</a></div></div>
123
131
  <div class="ttc" id="cuddInt_8c_html_a8b2e13c78efca330f06b6ddcd7464b41"><div class="ttname"><a href="cuddInt_8c.html#a8b2e13c78efca330f06b6ddcd7464b41">result</a></div><div class="ttdeci">static int result</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8c_source.html#l07466">cuddInt.c:7466</a></div></div>
124
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>
133
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_aae5b5661f0a34771753648072d6ea20a"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#aae5b5661f0a34771753648072d6ea20a">SVF::Z3Manager::Z3Cond</a></div><div class="ttdeci">Z3Expr::Z3Cond Z3Cond</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00244">Conditions.h:244</a></div></div>
125
134
  <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#l00088">SVFBasicTypes.h:88</a></div></div>
126
135
  <div class="ttc" id="cuddInt_8h_html_aaef03f10591d8e28bb5fecd2aa7c93ff"><div class="ttname"><a href="cuddInt_8h.html#aaef03f10591d8e28bb5fecd2aa7c93ff">cuddE</a></div><div class="ttdeci">#define cuddE(node)</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8h_source.html#l00625">cuddInt.h:625</a></div></div>
127
- <div class="ttc" id="classSVF_1_1CondManager_html_a7efaeff7229fcfdc6c05d53ee3e1d916"><div class="ttname"><a href="classSVF_1_1CondManager.html#a7efaeff7229fcfdc6c05d53ee3e1d916">SVF::CondManager::totalCondNum</a></div><div class="ttdeci">static u32_t totalCondNum</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00192">Conditions.h:192</a></div></div>
128
- <div class="ttc" id="classSVF_1_1CondManager_html_aeb4f9f4968f57602d12225757073f0f8"><div class="ttname"><a href="classSVF_1_1CondManager.html#aeb4f9f4968f57602d12225757073f0f8">SVF::CondManager::simplify</a></div><div class="ttdeci">z3::expr simplify(const z3::expr &amp;expr) const</div><div class="ttdoc">Preprocess the condition, e.g., Compressing using And-Inverter-Graph. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00069">Conditions.cpp:69</a></div></div>
129
- <div class="ttc" id="classSVF_1_1CondManager_html_a39e9d42cb3661d1c686b5163c70eeade"><div class="ttname"><a href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">SVF::CondManager::getFalseCond</a></div><div class="ttdeci">CondExpr * getFalseCond() const</div><div class="ttdoc">Return the unique false condition. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00231">Conditions.h:231</a></div></div>
130
- <div class="ttc" id="classSVF_1_1CondManager_html_a83824b36d6cd073a171df9919aa0c704"><div class="ttname"><a href="classSVF_1_1CondManager.html#a83824b36d6cd073a171df9919aa0c704">SVF::CondManager::OR</a></div><div class="ttdeci">CondExpr * OR(CondExpr *lhs, CondExpr *rhs)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00149">Conditions.cpp:149</a></div></div>
131
- <div class="ttc" id="classSVF_1_1BranchCondManager_html_a930ece842bcdab283fb27e2a053bc8de"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a930ece842bcdab283fb27e2a053bc8de">SVF::BranchCondManager::dumpStr</a></div><div class="ttdeci">std::string dumpStr(BranchCond *lhs) const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00383">Conditions.cpp:383</a></div></div>
136
+ <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
137
+ <div class="ttc" id="classSVF_1_1CondManager_html_a7efaeff7229fcfdc6c05d53ee3e1d916"><div class="ttname"><a href="classSVF_1_1CondManager.html#a7efaeff7229fcfdc6c05d53ee3e1d916">SVF::CondManager::totalCondNum</a></div><div class="ttdeci">static u32_t totalCondNum</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00151">Conditions.h:151</a></div></div>
138
+ <div class="ttc" id="classSVF_1_1CondManager_html_a39e9d42cb3661d1c686b5163c70eeade"><div class="ttname"><a href="classSVF_1_1CondManager.html#a39e9d42cb3661d1c686b5163c70eeade">SVF::CondManager::getFalseCond</a></div><div class="ttdeci">CondExpr * getFalseCond() const</div><div class="ttdoc">Return the unique false condition. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00177">Conditions.h:177</a></div></div>
139
+ <div class="ttc" id="cudd_8h_html_a2889ace3fcf7d4e00915de52554fd475"><div class="ttname"><a href="cudd_8h.html#a2889ace3fcf7d4e00915de52554fd475">Cudd_Quit</a></div><div class="ttdeci">void Cudd_Quit(DdManager *unique)</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8c_source.html#l10641">cuddInt.c:10641</a></div></div>
140
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_a5fcfc5dcdd77d9860aaaff9cd9f43c55"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#a5fcfc5dcdd77d9860aaaff9cd9f43c55">SVF::Z3Manager::NEG</a></div><div class="ttdeci">CondExpr * NEG(CondExpr *lhs) override</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00130">Conditions.cpp:130</a></div></div>
141
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_a747edc9290575156f1edd50be043617d"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#a747edc9290575156f1edd50be043617d">SVF::Z3Manager::getOrAddZ3Cond</a></div><div class="ttdeci">Z3Expr * getOrAddZ3Cond(const Z3Cond &amp;z3Cond)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00062">Conditions.cpp:62</a></div></div>
132
142
  <div class="ttc" id="cudd_8h_html_a3d0d9959640235fc073699c776914fca"><div class="ttname"><a href="cudd_8h.html#a3d0d9959640235fc073699c776914fca">Cudd_Ref</a></div><div class="ttdeci">void Cudd_Ref(DdNode *n)</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8c_source.html#l14002">cuddInt.c:14002</a></div></div>
133
- <div class="ttc" id="classSVF_1_1CondManager_html_a907afafc19d8faa7a200bf4f1e07bb4f"><div class="ttname"><a href="classSVF_1_1CondManager.html#a907afafc19d8faa7a200bf4f1e07bb4f">SVF::CondManager::dumpStr</a></div><div class="ttdeci">std::string dumpStr(const CondExpr *e) const</div><div class="ttdoc">Return string format of this expression. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00250">Conditions.cpp:250</a></div></div>
134
143
  <div class="ttc" id="namespaceSVF_html_a8bd74fdcb0e58d0249003df9c3fb8b31"><div class="ttname"><a href="namespaceSVF.html#a8bd74fdcb0e58d0249003df9c3fb8b31">SVF::OutStream</a></div><div class="ttdeci">std::ostream OutStream</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
135
- <div class="ttc" id="classSVF_1_1CondManager_html_aed854ecc55a568597f7d7f1f78fb92f4"><div class="ttname"><a href="classSVF_1_1CondManager.html#aed854ecc55a568597f7d7f1f78fb92f4">SVF::CondManager::trueCond</a></div><div class="ttdeci">static CondExpr * trueCond</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00304">Conditions.h:304</a></div></div>
136
- <div class="ttc" id="classSVF_1_1CondManager_html_a5677513376a78707de664c1cc85805aa"><div class="ttname"><a href="classSVF_1_1CondManager.html#a5677513376a78707de664c1cc85805aa">SVF::CondManager::~CondManager</a></div><div class="ttdeci">~CondManager()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00057">Conditions.cpp:57</a></div></div>
137
- <div class="ttc" id="classSVF_1_1BranchCondManager_html_a513a9865b87af136edf1abb1932716dd"><div class="ttname"><a href="classSVF_1_1BranchCondManager.html#a513a9865b87af136edf1abb1932716dd">SVF::BranchCondManager::ddClearFlag</a></div><div class="ttdeci">void ddClearFlag(BranchCond *f) const</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00328">Conditions.cpp:328</a></div></div>
138
- <div class="ttc" id="classSVF_1_1BranchCondExpr_html"><div class="ttname"><a href="classSVF_1_1BranchCondExpr.html">SVF::BranchCondExpr</a></div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00079">Conditions.h:79</a></div></div>
139
- <div class="ttc" id="classSVF_1_1CondManager_html_a0ca23ef4850f9be8abf303eafd104dab"><div class="ttname"><a href="classSVF_1_1CondManager.html#a0ca23ef4850f9be8abf303eafd104dab">SVF::CondManager::getOrAddBranchCond</a></div><div class="ttdeci">CondExpr * getOrAddBranchCond(const z3::expr &amp;e, BranchCond *branchCond)</div><div class="ttdoc">Get or add a single branch condition, e.g., when doing condition conjunction. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00113">Conditions.cpp:113</a></div></div>
140
- <div class="ttc" id="classSVF_1_1CondManager_html_a6151817a6f671fa1e7814e74f7ce2e51"><div class="ttname"><a href="classSVF_1_1CondManager.html#a6151817a6f671fa1e7814e74f7ce2e51">SVF::CondManager::isAllPathReachable</a></div><div class="ttdeci">bool isAllPathReachable(const CondExpr *e)</div><div class="ttdoc">Whether All Paths are reachable. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00235">Conditions.cpp:235</a></div></div>
141
- <div class="ttc" id="classSVF_1_1CondManager_html"><div class="ttname"><a href="classSVF_1_1CondManager.html">SVF::CondManager</a></div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00181">Conditions.h:181</a></div></div>
144
+ <div class="ttc" id="classSVF_1_1CondManager_html_aed854ecc55a568597f7d7f1f78fb92f4"><div class="ttname"><a href="classSVF_1_1CondManager.html#aed854ecc55a568597f7d7f1f78fb92f4">SVF::CondManager::trueCond</a></div><div class="ttdeci">static CondExpr * trueCond</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00228">Conditions.h:228</a></div></div>
145
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_ac5968fcdba98bd405509b8abd1997cbc"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#ac5968fcdba98bd405509b8abd1997cbc">SVF::Z3Manager::cxt</a></div><div class="ttdeci">z3::context cxt</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00252">Conditions.h:252</a></div></div>
146
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_a7ec31e7f5d856ac7de8416573aef396f"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#a7ec31e7f5d856ac7de8416573aef396f">SVF::Z3Manager::setNegCondInst</a></div><div class="ttdeci">void setNegCondInst(const CondExpr *cond, const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00293">Conditions.h:293</a></div></div>
147
+ <div class="ttc" id="classSVF_1_1Z3Manager_html_af9655650f2ddfba9418fc1762794a730"><div class="ttname"><a href="classSVF_1_1Z3Manager.html#af9655650f2ddfba9418fc1762794a730">SVF::Z3Manager::printModel</a></div><div class="ttdeci">void printModel()</div><div class="ttdoc">Dump out all expressions. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00219">Conditions.cpp:219</a></div></div>
148
+ <div class="ttc" id="classSVF_1_1CondManager_html_a6151817a6f671fa1e7814e74f7ce2e51"><div class="ttname"><a href="classSVF_1_1CondManager.html#a6151817a6f671fa1e7814e74f7ce2e51">SVF::CondManager::isAllPathReachable</a></div><div class="ttdeci">bool isAllPathReachable(const CondExpr *e)</div><div class="ttdoc">Whether All Paths are reachable. </div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00058">Conditions.cpp:58</a></div></div>
149
+ <div class="ttc" id="classSVF_1_1CondManager_html"><div class="ttname"><a href="classSVF_1_1CondManager.html">SVF::CondManager</a></div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8h_source.html#l00135">Conditions.h:135</a></div></div>
150
+ <div class="ttc" id="classSVF_1_1BDDManager_html_a913b8c19f239a162dbfa9527c846c3f6"><div class="ttname"><a href="classSVF_1_1BDDManager.html#a913b8c19f239a162dbfa9527c846c3f6">SVF::BDDManager::getOrAddBranchCond</a></div><div class="ttdeci">BDDExpr * getOrAddBranchCond(BDDCond *bddCond)</div><div class="ttdef"><b>Definition:</b> <a href="Conditions_8cpp_source.html#l00253">Conditions.cpp:253</a></div></div>
142
151
  </div><!-- fragment --></div><!-- contents -->
143
152
  <!-- start footer part -->
144
153
  <hr class="footer"/><address class="footer"><small>