diff --git a/src/ebmc/Makefile b/src/ebmc/Makefile index 3b1c3159..8df4b416 100644 --- a/src/ebmc/Makefile +++ b/src/ebmc/Makefile @@ -19,6 +19,7 @@ SRC = \ liveness_to_safety.cpp \ live_signal.cpp \ main.cpp \ + netlist.cpp \ neural_liveness.cpp \ output_file.cpp \ output_verilog.cpp \ diff --git a/src/ebmc/bdd_engine.cpp b/src/ebmc/bdd_engine.cpp index e1f4fb08..6d5d8c2a 100644 --- a/src/ebmc/bdd_engine.cpp +++ b/src/ebmc/bdd_engine.cpp @@ -20,11 +20,12 @@ Author: Daniel Kroening, daniel.kroening@inf.ethz.ch #include #include #include -#include #include #include #include +#include "netlist.h" + #include #include @@ -193,22 +194,17 @@ property_checker_resultt bdd_enginet::operator()() if(cmdline.isset("liveness-to-safety")) liveness_to_safety(transition_system, properties); - const auto property_map = properties.make_property_map(); - message.status() << "Building netlist" << messaget::eom; - convert_trans_to_netlist( - transition_system.symbol_table, - transition_system.main_symbol->name, - transition_system.trans_expr, - property_map, - netlist, - message.get_message_handler()); + netlist = make_netlist( + transition_system, properties, message.get_message_handler()); message.statistics() << "Latches: " << netlist.var_map.latches.size() << ", nodes: " << netlist.number_of_nodes() << messaget::eom; + const auto property_map = properties.make_property_map(); + for(const auto &[_, expr] : property_map) get_atomic_propositions(expr); diff --git a/src/ebmc/ebmc_base.cpp b/src/ebmc/ebmc_base.cpp index d46deea3..d082c7ab 100644 --- a/src/ebmc/ebmc_base.cpp +++ b/src/ebmc/ebmc_base.cpp @@ -13,10 +13,10 @@ Author: Daniel Kroening, kroening@kroening.com #include #include -#include #include "ebmc_error.h" #include "ebmc_version.h" +#include "netlist.h" #include @@ -149,13 +149,8 @@ bool ebmc_baset::make_netlist(netlistt &netlist) try { - convert_trans_to_netlist( - transition_system.symbol_table, - transition_system.main_symbol->name, - transition_system.trans_expr, - properties.make_property_map(), - netlist, - message.get_message_handler()); + netlist = ::make_netlist( + transition_system, properties, message.get_message_handler()); } catch(const std::string &error_str) diff --git a/src/ebmc/netlist.cpp b/src/ebmc/netlist.cpp new file mode 100644 index 00000000..eb99f197 --- /dev/null +++ b/src/ebmc/netlist.cpp @@ -0,0 +1,30 @@ +/*******************************************************************\ + +Module: Netlists for EBMC + +Author: Daniel Kroening, dkr@amazon.com + +\*******************************************************************/ + +#include "netlist.h" + +#include +#include + +netlistt make_netlist( + transition_systemt &transition_system, + ebmc_propertiest &properties, + message_handlert &message_handler) +{ + netlistt netlist; + + convert_trans_to_netlist( + transition_system.symbol_table, + transition_system.main_symbol->name, + transition_system.trans_expr, + properties.make_property_map(), + netlist, + message_handler); + + return netlist; +} diff --git a/src/ebmc/netlist.h b/src/ebmc/netlist.h new file mode 100644 index 00000000..c89b4f30 --- /dev/null +++ b/src/ebmc/netlist.h @@ -0,0 +1,20 @@ +/*******************************************************************\ + +Module: Netlists for EBMC + +Author: Daniel Kroening, dkr@amazon.com + +\*******************************************************************/ + +#ifndef CPROVER_EBMC_NETLIST_H +#define CPROVER_EBMC_NETLIST_H + +#include "ebmc_properties.h" +#include "transition_system.h" + +class netlistt; + +netlistt +make_netlist(transition_systemt &, ebmc_propertiest &, message_handlert &); + +#endif // CPROVER_EBMC_NETLIST_H diff --git a/src/ebmc/property_checker.cpp b/src/ebmc/property_checker.cpp index 6f645fb4..70bb734d 100644 --- a/src/ebmc/property_checker.cpp +++ b/src/ebmc/property_checker.cpp @@ -11,7 +11,6 @@ Author: Daniel Kroening, dkr@amazon.com #include #include -#include #include #include @@ -21,6 +20,7 @@ Author: Daniel Kroening, dkr@amazon.com #include "ebmc_error.h" #include "ebmc_solver_factory.h" #include "k_induction.h" +#include "netlist.h" #include "output_file.h" #include "report_results.h" @@ -221,16 +221,9 @@ property_checker_resultt bit_level_bmc( throw "no properties"; // make net-list - netlistt netlist; message.status() << "Generating Netlist" << messaget::eom; - convert_trans_to_netlist( - transition_system.symbol_table, - transition_system.main_symbol->name, - transition_system.trans_expr, - properties.make_property_map(), - netlist, - message.get_message_handler()); + auto netlist = make_netlist(transition_system, properties, message_handler); message.statistics() << "Latches: " << netlist.var_map.latches.size() << ", nodes: " << netlist.number_of_nodes()