Skip to content

Commit 5d4c18d

Browse files
fixes
Signed-off-by: Nikolaj Bjorner <[email protected]>
1 parent 6d23847 commit 5d4c18d

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

src/sat/smt/intblast_solver.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,7 @@ namespace intblast {
573573
r = a.mk_le(smod(bv_expr, 0), smod(bv_expr, 1));
574574
break;
575575
case OP_SGEQ:
576+
bv_expr = e->get_arg(0);
576577
r = a.mk_ge(smod(bv_expr, 0), smod(bv_expr, 1));
577578
break;
578579
case OP_SLT:
@@ -902,6 +903,12 @@ namespace intblast {
902903
if (!is_app(n->get_expr()))
903904
return false;
904905
app* e = to_app(n->get_expr());
906+
expr *th, * el, * c;
907+
if (m.is_ite(e, c, th, el)) {
908+
dep.add(n, expr2enode(th)->get_root());
909+
dep.add(n, expr2enode(el)->get_root());
910+
return true;
911+
}
905912
if (n->num_args() == 0) {
906913
dep.insert(n, nullptr);
907914
return true;
@@ -940,6 +947,15 @@ namespace intblast {
940947

941948
void solver::add_value_plugin(euf::enode* n, model& mdl, expr_ref_vector& values) {
942949
expr_ref value(m);
950+
expr* e = n->get_expr(), *c, *th, *el;
951+
while (m.is_ite(e, c, th, el)) {
952+
auto thn = expr2enode(th);
953+
if (thn->get_root() == n->get_root())
954+
e = th;
955+
else
956+
e = el;
957+
n = expr2enode(e);
958+
}
943959
if (n->interpreted())
944960
value = n->get_expr();
945961
else if (to_app(n->get_expr())->get_family_id() == bv.get_family_id()) {

0 commit comments

Comments
 (0)