mirror of
https://github.com/Z3Prover/z3
synced 2025-06-28 08:58:44 +00:00
final
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
88c982ff0b
commit
ee216b5274
3 changed files with 17 additions and 17 deletions
|
@ -1169,7 +1169,7 @@ void bit_blaster_tpl<Cfg>::mk_const_case1_multiplier(unsigned sz, expr * const *
|
||||||
if (!m().is_true(a_bits[i]))
|
if (!m().is_true(a_bits[i]))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ptr_buffer<expr, 128> one, sbits;
|
ptr_buffer<expr, 128> kbits, ibits;
|
||||||
expr_ref_vector out_bits1(m());
|
expr_ref_vector out_bits1(m());
|
||||||
|
|
||||||
unsigned k = 0;
|
unsigned k = 0;
|
||||||
|
@ -1189,8 +1189,8 @@ void bit_blaster_tpl<Cfg>::mk_const_case1_multiplier(unsigned sz, expr * const *
|
||||||
// shift by k+1, subtract x
|
// shift by k+1, subtract x
|
||||||
out_bits.reset();
|
out_bits.reset();
|
||||||
|
|
||||||
mul2_i(k + 1, sbits);
|
mul2_i(k + 1, kbits);
|
||||||
mk_adder(sz, out_bits.data(), sbits.data(), out_bits1);
|
mk_adder(sz, out_bits.data(), kbits.data(), out_bits1);
|
||||||
out_bits.reset();
|
out_bits.reset();
|
||||||
out_bits.append(out_bits1);
|
out_bits.append(out_bits1);
|
||||||
out_bits1.reset();
|
out_bits1.reset();
|
||||||
|
@ -1201,18 +1201,25 @@ void bit_blaster_tpl<Cfg>::mk_const_case1_multiplier(unsigned sz, expr * const *
|
||||||
out_bits.append(out_bits1);
|
out_bits.append(out_bits1);
|
||||||
out_bits1.reset();
|
out_bits1.reset();
|
||||||
}
|
}
|
||||||
else if (i == k) {
|
else if (i <= k && k <= i + 1) {
|
||||||
mul2_i(i, sbits);
|
mul2_i(i, ibits);
|
||||||
mk_adder(sz, out_bits.data(), sbits.data(), out_bits1);
|
mk_adder(sz, out_bits.data(), ibits.data(), out_bits1);
|
||||||
out_bits.reset();
|
out_bits.reset();
|
||||||
out_bits.append(out_bits1);
|
out_bits.append(out_bits1);
|
||||||
out_bits1.reset();
|
out_bits1.reset();
|
||||||
|
if (i + 1 == k) {
|
||||||
|
mul2_i(k, kbits);
|
||||||
|
mk_adder(sz, out_bits.data(), kbits.data(), out_bits1);
|
||||||
|
out_bits.reset();
|
||||||
|
out_bits.append(out_bits1);
|
||||||
|
out_bits1.reset();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (k == sz - 1) {
|
else if (k == sz - 1) {
|
||||||
// 2^sz - 2^i = - 2^i
|
// 2^sz - 2^i = - 2^i
|
||||||
// -= x*2^i
|
// -= x*2^i
|
||||||
mul2_i(i, sbits);
|
mul2_i(i, ibits);
|
||||||
mk_subtracter(sz, out_bits.data(), sbits.data(), out_bits1, cout);
|
mk_subtracter(sz, out_bits.data(), ibits.data(), out_bits1, cout);
|
||||||
out_bits.reset();
|
out_bits.reset();
|
||||||
out_bits.append(out_bits1);
|
out_bits.append(out_bits1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1943,7 +1943,7 @@ public:
|
||||||
|
|
||||||
final_check_status final_check_eh() {
|
final_check_status final_check_eh() {
|
||||||
|
|
||||||
verbose_stream() << "final " << ctx().get_scope_level() << " " << ctx().assigned_literals().size() << "\n";
|
// verbose_stream() << "final " << ctx().get_scope_level() << " " << ctx().assigned_literals().size() << "\n";
|
||||||
//ctx().display(verbose_stream());
|
//ctx().display(verbose_stream());
|
||||||
//exit(0);
|
//exit(0);
|
||||||
|
|
||||||
|
|
|
@ -195,12 +195,6 @@ void tst_const_multiplier(ast_manager& m, bit_blaster & blaster, unsigned sz) {
|
||||||
expr_ref_vector c(m), out1(m), out2(m);
|
expr_ref_vector c(m), out1(m), out2(m);
|
||||||
for (unsigned j = 0; j < sz; ++j)
|
for (unsigned j = 0; j < sz; ++j)
|
||||||
c.push_back((i & (1ul << j)) ? m.mk_true() : m.mk_false());
|
c.push_back((i & (1ul << j)) ? m.mk_true() : m.mk_false());
|
||||||
for (auto xi : x)
|
|
||||||
verbose_stream() << mk_pp(xi, m);
|
|
||||||
verbose_stream() << " ";
|
|
||||||
for (auto ci : c)
|
|
||||||
verbose_stream() << mk_pp(ci, m);
|
|
||||||
verbose_stream() << "\n";
|
|
||||||
blaster.mk_const_case1_multiplier(sz, c.data(), x.data(), out1);
|
blaster.mk_const_case1_multiplier(sz, c.data(), x.data(), out1);
|
||||||
|
|
||||||
blaster.mk_generic_multiplier(sz, c.data(), x.data(), out2);
|
blaster.mk_generic_multiplier(sz, c.data(), x.data(), out2);
|
||||||
|
@ -211,7 +205,6 @@ void tst_const_multiplier(ast_manager& m, bit_blaster & blaster, unsigned sz) {
|
||||||
smt::kernel solver(m, fp);
|
smt::kernel solver(m, fp);
|
||||||
solver.assert_expr(m.mk_not(fml));
|
solver.assert_expr(m.mk_not(fml));
|
||||||
auto r = solver.check();
|
auto r = solver.check();
|
||||||
verbose_stream() << r << "\n";
|
|
||||||
VERIFY(r == l_false);
|
VERIFY(r == l_false);
|
||||||
expr_mark vis1, vis2;
|
expr_mark vis1, vis2;
|
||||||
unsigned sz1 = 0, sz2 = 0;
|
unsigned sz1 = 0, sz2 = 0;
|
||||||
|
@ -272,7 +265,7 @@ void tst_bit_blaster() {
|
||||||
bit_blaster_params params;
|
bit_blaster_params params;
|
||||||
bit_blaster blaster(m, params);
|
bit_blaster blaster(m, params);
|
||||||
|
|
||||||
tst_const_multiplier(m, blaster, 7);
|
tst_const_multiplier(m, blaster, 8);
|
||||||
tst_adder(m, blaster);
|
tst_adder(m, blaster);
|
||||||
tst_multiplier(m, blaster);
|
tst_multiplier(m, blaster);
|
||||||
tst_le(m, 4);
|
tst_le(m, 4);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue