@@ -615,7 +615,7 @@ namespace bv {
615
615
val.set (a.bits ());
616
616
else {
617
617
set_sdiv ();
618
- val.set_mul (m_tmp, val.bits () , b.bits ());
618
+ val.set_mul (m_tmp, val.eval , b.bits ());
619
619
val.set_sub (val.eval , a.bits (), m_tmp);
620
620
}
621
621
break ;
@@ -685,7 +685,7 @@ namespace bv {
685
685
return sls_valuation::random_bits (m_rand);
686
686
}
687
687
688
- bool sls_eval::try_repair (app* e, unsigned i) {
688
+ bool sls_eval::try_repair (app* e, unsigned i) {
689
689
if (is_fixed0 (e->get_arg (i)))
690
690
return false ;
691
691
else if (e->get_family_id () == basic_family_id)
@@ -844,6 +844,7 @@ namespace bv {
844
844
case OP_BSMUL_NO_OVFL:
845
845
case OP_BSMUL_NO_UDFL:
846
846
case OP_BSMUL_OVFL:
847
+ verbose_stream () << mk_pp (e, m) << " \n " ;
847
848
return false ;
848
849
case OP_BSREM:
849
850
case OP_BSREM_I:
@@ -1042,8 +1043,10 @@ namespace bv {
1042
1043
b.get (y);
1043
1044
if (parity_b > 0 ) {
1044
1045
b.shift_right (y, parity_b);
1046
+ #if 0
1045
1047
for (unsigned i = parity_b; i < b.bw; ++i)
1046
1048
y.set(i, m_rand() % 2 == 0);
1049
+ #endif
1047
1050
}
1048
1051
1049
1052
y[a.nw ] = 0 ;
@@ -1127,10 +1130,12 @@ namespace bv {
1127
1130
else {
1128
1131
auto & b1 = m_nexta;
1129
1132
a.set_add (b1, b.bits (), m_one);
1133
+ b1.set_bw (b.bw );
1130
1134
if (p2 == b1)
1131
1135
r = false ;
1132
1136
else
1133
1137
r = try_repair_sge (a, b1, p2);
1138
+ b1.set_bw (0 );
1134
1139
}
1135
1140
p2.set_bw (0 );
1136
1141
return r;
@@ -1148,7 +1153,7 @@ namespace bv {
1148
1153
bool r = false ;
1149
1154
if (e)
1150
1155
r = try_repair_sge (a, b.bits (), p2);
1151
- else if (b.is_zero () )
1156
+ else if (b.bits () == p2 )
1152
1157
r = false ;
1153
1158
else {
1154
1159
auto & b1 = m_nexta;
@@ -1201,7 +1206,7 @@ namespace bv {
1201
1206
a.set_sub (p2_1, p2, m_one);
1202
1207
p2_1.set_bw (a.bw );
1203
1208
bool r = false ;
1204
- if (b < p2 )
1209
+ if (p2 < b )
1205
1210
// random b <= x < p2
1206
1211
r = a.set_random_in_range (b, p2_1, m_tmp3, m_rand);
1207
1212
else {
@@ -1532,7 +1537,7 @@ namespace bv {
1532
1537
if (e.get (i) != e.get (a.bw - 1 ))
1533
1538
return false ;
1534
1539
1535
- for (unsigned i = 0 ; i < e.bw ; ++i)
1540
+ for (unsigned i = 0 ; i < e.nw ; ++i)
1536
1541
m_tmp[i] = e[i];
1537
1542
a.clear_overflow_bits (m_tmp);
1538
1543
return a.try_set (m_tmp);
@@ -1546,7 +1551,7 @@ namespace bv {
1546
1551
if (e.get (i))
1547
1552
return false ;
1548
1553
1549
- for (unsigned i = 0 ; i < e.bw ; ++i)
1554
+ for (unsigned i = 0 ; i < e.nw ; ++i)
1550
1555
m_tmp[i] = e[i];
1551
1556
a.clear_overflow_bits (m_tmp);
1552
1557
return a.try_set (m_tmp);
@@ -1630,4 +1635,20 @@ namespace bv {
1630
1635
}
1631
1636
return false ;
1632
1637
}
1638
+
1639
+ std::ostream& sls_eval::display (std::ostream& out, expr_ref_vector const & es) {
1640
+ auto & terms = sort_assertions (es);
1641
+ for (expr* e : terms) {
1642
+ out << e->get_id () << " : " << mk_bounded_pp (e, m, 1 ) << " " ;
1643
+ if (is_fixed0 (e))
1644
+ out << " f " ;
1645
+ if (bv.is_bv (e))
1646
+ out << wval (e);
1647
+ else if (m.is_bool (e))
1648
+ out << (bval0 (e) ? " T" : " F" );
1649
+ out << " \n " ;
1650
+ }
1651
+ terms.reset ();
1652
+ return out;
1653
+ }
1633
1654
}
0 commit comments