3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-27 08:28:44 +00:00

Improve sharing

This commit is contained in:
Jakob Rath 2022-10-03 10:57:56 +02:00
parent cd2d197bb9
commit 0b560e5117

View file

@ -173,6 +173,7 @@ namespace polysat {
pdd solver::band(pdd const& p, pdd const& q) { pdd solver::band(pdd const& p, pdd const& q) {
auto& m = p.manager(); auto& m = p.manager();
unsigned sz = m.power_of_2(); unsigned sz = m.power_of_2();
// TODO: use existing r if we call again with the same arguments
pdd r = m.mk_var(add_var(sz)); pdd r = m.mk_var(add_var(sz));
assign_eh(m_constraints.band(p, q, r), null_dependency); assign_eh(m_constraints.band(p, q, r), null_dependency);
return r; return r;
@ -189,8 +190,7 @@ namespace polysat {
// From "Hacker's Delight", section 2-2. Addition Combined with Logical Operations; // From "Hacker's Delight", section 2-2. Addition Combined with Logical Operations;
// found via Int-Blasting paper; see https://doi.org/10.1007/978-3-030-94583-1_24 // found via Int-Blasting paper; see https://doi.org/10.1007/978-3-030-94583-1_24
// TODO: switch to op_constraint once supported // TODO: switch to op_constraint once supported
return bor(p, q) - band(p, q); return (p + q) - 2*band(p, q);
// return (p + q) - 2*band(p, q);
} }
pdd solver::bnand(pdd const& p, pdd const& q) { pdd solver::bnand(pdd const& p, pdd const& q) {