Skip to content

Commit 5c1d057

Browse files
committed
ebmc: simplify BDD/ebmc interface
This changes the interface between the BDD engine and ebmc by switching from ebmc_baset to directly calling the relevant APIs.
1 parent b68cedf commit 5c1d057

File tree

1 file changed

+29
-22
lines changed

1 file changed

+29
-22
lines changed

src/ebmc/bdd_engine.cpp

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,16 @@ Author: Daniel Kroening, [email protected]
1010

1111
#include <util/format_expr.h>
1212

13+
#include <ebmc/ebmc_properties.h>
14+
#include <ebmc/transition_system.h>
1315
#include <solvers/bdd/miniBDD/miniBDD.h>
1416
#include <solvers/sat/satcheck.h>
1517
#include <trans-netlist/aig_prop.h>
1618
#include <trans-netlist/instantiate_netlist.h>
19+
#include <trans-netlist/trans_to_netlist.h>
1720
#include <trans-netlist/trans_trace_netlist.h>
1821
#include <trans-netlist/unwind_netlist.h>
1922

20-
#include "ebmc_base.h"
2123
#include "negate_property.h"
2224
#include "report_results.h"
2325

@@ -32,19 +34,24 @@ Author: Daniel Kroening, [email protected]
3234
3335
\*******************************************************************/
3436

35-
class bdd_enginet:public ebmc_baset
37+
class bdd_enginet
3638
{
3739
public:
3840
bdd_enginet(
39-
const cmdlinet &cmdline,
40-
ui_message_handlert &ui_message_handler):
41-
ebmc_baset(cmdline, ui_message_handler)
41+
const cmdlinet &_cmdline,
42+
ui_message_handlert &_ui_message_handler)
43+
: cmdline(_cmdline), message(_ui_message_handler)
4244
{
4345
}
4446

4547
int operator()();
4648

4749
protected:
50+
using propertyt = ebmc_propertiest::propertyt;
51+
const cmdlinet &cmdline;
52+
messaget message;
53+
transition_systemt transition_system;
54+
ebmc_propertiest properties;
4855
netlistt netlist;
4956

5057
// the Manager must appear before any BDDs
@@ -135,28 +142,28 @@ int bdd_enginet::operator()()
135142
transition_system =
136143
get_transition_system(cmdline, message.get_message_handler());
137144

138-
{
139-
if(make_netlist(netlist))
140-
{
141-
message.error() << "Failed to build netlist" << messaget::eom;
142-
return 2;
143-
}
145+
message.status() << "Building netlist" << messaget::eom;
144146

145-
message.status() << "Building netlist for atomic propositions"
146-
<< messaget::eom;
147+
convert_trans_to_netlist(
148+
transition_system.symbol_table,
149+
transition_system.main_symbol->name,
150+
netlist,
151+
message.get_message_handler());
147152

148-
auto result = get_properties();
149-
if(result != -1)
150-
return result;
153+
message.statistics() << "Latches: " << netlist.var_map.latches.size()
154+
<< ", nodes: " << netlist.number_of_nodes()
155+
<< messaget::eom;
151156

152-
for(const propertyt &p : properties.properties)
153-
get_atomic_propositions(p.expr);
157+
properties = ebmc_propertiest::from_command_line(
158+
cmdline, transition_system, message.get_message_handler());
154159

155-
message.status() << "Building BDD for netlist" << messaget::eom;
160+
for(const propertyt &p : properties.properties)
161+
get_atomic_propositions(p.expr);
156162

157-
allocate_vars(netlist.var_map);
158-
build_BDDs();
159-
}
163+
message.status() << "Building BDD for netlist" << messaget::eom;
164+
165+
allocate_vars(netlist.var_map);
166+
build_BDDs();
160167

161168
message.statistics() << "BDD nodes: " << mgr.number_of_nodes()
162169
<< messaget::eom;

0 commit comments

Comments
 (0)