3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-29 11:55:51 +00:00

tune cardinality solver for cache misses

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2017-02-06 20:57:08 -08:00
parent 4831c45ad8
commit 61ade5e6cb
12 changed files with 85 additions and 33 deletions

View file

@ -78,11 +78,6 @@ struct goal2sat::imp {
m_default_external(default_external) {
updt_params(p);
m_true = sat::null_bool_var;
sat::extension* e = m_solver.get_extension();
if (e) {
sat::card_extension* ce = dynamic_cast<sat::card_extension*>(e);
m_ext = ce;
}
}
void updt_params(params_ref const & p) {
@ -158,7 +153,8 @@ struct goal2sat::imp {
}
bool convert_app(app* t, bool root, bool sign) {
if (m_ext && t->get_family_id() == pb.get_family_id()) {
if (t->get_family_id() == pb.get_family_id()) {
ensure_extension();
m_frame_stack.push_back(frame(to_app(t), root, sign, 0));
return false;
}
@ -465,6 +461,20 @@ struct goal2sat::imp {
}
}
void ensure_extension() {
if (!m_ext) {
sat::extension* ext = m_solver.get_extension();
if (ext) {
m_ext = dynamic_cast<sat::card_extension*>(ext);
SASSERT(m_ext);
}
if (!m_ext) {
m_ext = alloc(sat::card_extension);
m_solver.set_extension(m_ext);
}
}
}
void convert(app * t, bool root, bool sign) {
if (t->get_family_id() == m.get_basic_family_id()) {
switch (to_app(t)->get_decl_kind()) {
@ -485,7 +495,8 @@ struct goal2sat::imp {
UNREACHABLE();
}
}
else if (m_ext && t->get_family_id() == pb.get_family_id()) {
else if (t->get_family_id() == pb.get_family_id()) {
ensure_extension();
switch (t->get_decl_kind()) {
case OP_AT_MOST_K:
convert_at_most_k(t, pb.get_k(t), root, sign);