3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-25 07:13:41 +00:00

Update bit_blaster_tpl_def.h

This commit is contained in:
Nikolaj Bjorner 2025-06-12 16:07:28 -07:00
parent a15e4ad1e3
commit a2ad90cba1

View file

@ -993,13 +993,7 @@ void bit_blaster_tpl<Cfg>::mk_ext_rotate_left_right(unsigned sz, expr * const *
for (unsigned j = 0; j < sz; ++j) for (unsigned j = 0; j < sz; ++j)
out_bits.push_back(a_bits[j]); out_bits.push_back(a_bits[j]);
expr_ref_vector out(m()); expr_ref_vector out(m());
auto mk_ite = [&](expr* bit_i, expr* th, expr* el) { expr_ref tmp(m());
if (m().is_false(bit_i))
return el;
if (m().is_true(bit_i))
return th;
return (expr*)(m().mk_ite(bit_i, th, el));
};
for (unsigned i = 0, p = 1; i < sz; ++i) { for (unsigned i = 0, p = 1; i < sz; ++i) {
auto bit_i = b_bits[i]; auto bit_i = b_bits[i];
// rotate by p if bit_i is set. // rotate by p if bit_i is set.
@ -1008,7 +1002,8 @@ void bit_blaster_tpl<Cfg>::mk_ext_rotate_left_right(unsigned sz, expr * const *
out.reset(); out.reset();
for (unsigned j = 0; j < sz; ++j) { for (unsigned j = 0; j < sz; ++j) {
unsigned src = (Left ? (sz + j - p) : (j + p)) % sz; unsigned src = (Left ? (sz + j - p) : (j + p)) % sz;
out.push_back(mk_ite(bit_i, out_bits.get(src), out_bits.get(j))); mk_ite(bit_i, out_bits.get(src), out_bits.get(j), tmp));
out.push_back(tmp);
} }
out_bits.reset(); out_bits.reset();
out_bits.append(out); out_bits.append(out);