11
11
#include < util/arith_tools.h>
12
12
#include < util/bitvector_expr.h>
13
13
#include < util/ebmc_util.h>
14
+ #include < util/expr_util.h>
14
15
#include < util/mathematical_expr.h>
15
16
#include < util/namespace.h>
16
17
#include < util/std_expr.h>
25
26
#include " instantiate_netlist.h"
26
27
#include " netlist.h"
27
28
29
+ #include < algorithm>
30
+
28
31
/* ******************************************************************\
29
32
30
33
Class: convert_trans_to_netlistt
@@ -78,8 +81,9 @@ class convert_trans_to_netlistt:public messaget
78
81
79
82
typedef std::list<exprt> constraint_listt;
80
83
constraint_listt constraint_list;
81
- bvt transition_constraints;
82
-
84
+
85
+ bvt invar_constraints, transition_constraints;
86
+
83
87
class rhst
84
88
{
85
89
public:
@@ -299,7 +303,10 @@ void convert_trans_to_netlistt::operator()(const irep_idt &module)
299
303
300
304
// do the remaining transition constraints
301
305
convert_constraints (aig_prop);
302
-
306
+
307
+ dest.constraints .insert (
308
+ dest.constraints .end (), invar_constraints.begin (), invar_constraints.end ());
309
+
303
310
dest.transition .insert (
304
311
dest.transition .end (),
305
312
transition_constraints.begin (),
@@ -402,6 +409,9 @@ Function: convert_trans_to_netlistt::convert_constraints
402
409
403
410
void convert_trans_to_netlistt::convert_constraints (propt &prop)
404
411
{
412
+ invar_constraints.reserve (
413
+ transition_constraints.size () + constraint_list.size ());
414
+
405
415
transition_constraints.reserve (
406
416
transition_constraints.size ()+constraint_list.size ());
407
417
@@ -412,7 +422,11 @@ void convert_trans_to_netlistt::convert_constraints(propt &prop)
412
422
{
413
423
literalt l=
414
424
instantiate_convert (prop, dest.var_map , *it, ns, get_message_handler ());
415
- transition_constraints.push_back (l);
425
+
426
+ if (has_subexpr (*it, ID_next_symbol))
427
+ transition_constraints.push_back (l);
428
+ else
429
+ invar_constraints.push_back (l);
416
430
}
417
431
}
418
432
0 commit comments