diff --git a/src/trans-netlist/trans_to_netlist.cpp b/src/trans-netlist/trans_to_netlist.cpp index 1d9bec73e..74dc3ab3c 100644 --- a/src/trans-netlist/trans_to_netlist.cpp +++ b/src/trans-netlist/trans_to_netlist.cpp @@ -11,6 +11,7 @@ Author: Daniel Kroening, kroening@kroening.com #include #include #include +#include #include #include #include @@ -25,6 +26,8 @@ Author: Daniel Kroening, kroening@kroening.com #include "instantiate_netlist.h" #include "netlist.h" +#include + /*******************************************************************\ Class: convert_trans_to_netlistt @@ -78,8 +81,9 @@ class convert_trans_to_netlistt:public messaget typedef std::list constraint_listt; constraint_listt constraint_list; - bvt transition_constraints; - + + bvt invar_constraints, transition_constraints; + class rhst { public: @@ -299,7 +303,10 @@ void convert_trans_to_netlistt::operator()(const irep_idt &module) // do the remaining transition constraints convert_constraints(aig_prop); - + + dest.constraints.insert( + dest.constraints.end(), invar_constraints.begin(), invar_constraints.end()); + dest.transition.insert( dest.transition.end(), transition_constraints.begin(), @@ -402,6 +409,9 @@ Function: convert_trans_to_netlistt::convert_constraints void convert_trans_to_netlistt::convert_constraints(propt &prop) { + invar_constraints.reserve( + transition_constraints.size() + constraint_list.size()); + transition_constraints.reserve( transition_constraints.size()+constraint_list.size()); @@ -412,7 +422,11 @@ void convert_trans_to_netlistt::convert_constraints(propt &prop) { literalt l= instantiate_convert(prop, dest.var_map, *it, ns, get_message_handler()); - transition_constraints.push_back(l); + + if(has_subexpr(*it, ID_next_symbol)) + transition_constraints.push_back(l); + else + invar_constraints.push_back(l); } }