Skip to content

Commit

Permalink
ebmc: netlist unwinding now uses netlist property node
Browse files Browse the repository at this point in the history
Instead of doing its own expression conversion, netlist unwinding now uses
the netlist node given in the netlist property datastructure.
  • Loading branch information
kroening committed Apr 29, 2024
1 parent 57e0c27 commit b4dc6aa
Show file tree
Hide file tree
Showing 10 changed files with 42 additions and 465 deletions.
20 changes: 12 additions & 8 deletions src/ebmc/bdd_engine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,10 @@ void bdd_enginet::compute_counterexample(
propertyt &property,
unsigned number_of_timeframes)
{
// Supported by BMC engine?
if(!netlist_bmc_supports_property(property.normalized_expr))
return;

message.status() << "Computing counterexample with " << number_of_timeframes
<< " timeframe(s)" << messaget::eom;

Expand All @@ -372,16 +376,14 @@ void bdd_enginet::compute_counterexample(
satcheckt solver{message.get_message_handler()};
bmc_map.map_timeframes(netlist, number_of_timeframes, solver);

const namespacet ns(transition_system.symbol_table);

::unwind(netlist, bmc_map, message, solver);

// find the netlist property
auto netlist_property = netlist.properties.find(property.identifier);
CHECK_RETURN(netlist_property != netlist.properties.end());

::unwind_property(
property.normalized_expr,
property.timeframe_literals,
message.get_message_handler(),
solver,
bmc_map,
ns);
netlist_property->second, bmc_map, property.timeframe_literals);

// we need the propertyt to fail in one of the timeframes
bvt clause=property.timeframe_literals;
Expand All @@ -402,6 +404,8 @@ void bdd_enginet::compute_counterexample(
throw "unexpected result from SAT solver";
}

const namespacet ns(transition_system.symbol_table);

property.witness_trace =
compute_trans_trace(property.timeframe_literals, bmc_map, solver, ns);
}
Expand Down
11 changes: 5 additions & 6 deletions src/ebmc/ebmc_base.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -208,13 +208,12 @@ int ebmc_baset::do_bit_level_bmc(cnft &solver, bool convert_only)
continue;
}

// look up the property in the netlist
auto netlist_property = netlist.properties.find(property.identifier);
CHECK_RETURN(netlist_property != netlist.properties.end());

::unwind_property(
property.normalized_expr,
property.timeframe_literals,
message.get_message_handler(),
solver,
bmc_map,
ns);
netlist_property->second, bmc_map, property.timeframe_literals);

// freeze for incremental usage
for(auto l : property.timeframe_literals)
Expand Down
8 changes: 2 additions & 6 deletions src/ebmc/ebmc_properties.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,8 @@ ebmc_propertiest ebmc_propertiest::from_transition_system(

properties.properties.push_back(propertyt());
properties.properties.back().number = properties.properties.size() - 1;

if(symbol.pretty_name.empty())
properties.properties.back().name = symbol.name;
else
properties.properties.back().name = symbol.pretty_name;

properties.properties.back().identifier = symbol.name;
properties.properties.back().name = symbol.display_name();
properties.properties.back().original_expr = symbol.value;
properties.properties.back().normalized_expr =
normalize_property(symbol.value);
Expand Down
2 changes: 1 addition & 1 deletion src/ebmc/ebmc_properties.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class ebmc_propertiest
{
public:
std::size_t number = 0;
irep_idt name;
irep_idt identifier, name;
source_locationt location;
std::string expr_string;
irep_idt mode;
Expand Down
5 changes: 3 additions & 2 deletions src/ebmc/report_results.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@ void report_results(
continue;

json_objectt json_property;
json_property["identifier"] = json_stringt(id2string(property.name));
json_property["identifier"] =
json_stringt(id2string(property.identifier));
json_property["status"] = json_stringt(property.status_as_string());

if(property.has_witness_trace())
Expand All @@ -77,7 +78,7 @@ void report_results(
continue;

xmlt xml_result("result");
xml_result.set_attribute("property", id2string(property.name));
xml_result.set_attribute("property", id2string(property.identifier));
xml_result.set_attribute("status", property.status_as_string());

if(property.has_witness_trace())
Expand Down
Loading

0 comments on commit b4dc6aa

Please sign in to comment.