Skip to content

Commit

Permalink
Merge pull request #467 from diffblue/netlist-unwind-property
Browse files Browse the repository at this point in the history
ebmc: netlist unwinding now uses netlist property node
  • Loading branch information
tautschnig authored Apr 30, 2024
2 parents 4008a86 + b4dc6aa commit 68409ac
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 68409ac

Please sign in to comment.