@@ -573,6 +573,7 @@ namespace intblast {
573
573
r = a.mk_le (smod (bv_expr, 0 ), smod (bv_expr, 1 ));
574
574
break ;
575
575
case OP_SGEQ:
576
+ bv_expr = e->get_arg (0 );
576
577
r = a.mk_ge (smod (bv_expr, 0 ), smod (bv_expr, 1 ));
577
578
break ;
578
579
case OP_SLT:
@@ -902,6 +903,12 @@ namespace intblast {
902
903
if (!is_app (n->get_expr ()))
903
904
return false ;
904
905
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
+ }
905
912
if (n->num_args () == 0 ) {
906
913
dep.insert (n, nullptr );
907
914
return true ;
@@ -940,6 +947,15 @@ namespace intblast {
940
947
941
948
void solver::add_value_plugin (euf::enode* n, model& mdl, expr_ref_vector& values) {
942
949
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
+ }
943
959
if (n->interpreted ())
944
960
value = n->get_expr ();
945
961
else if (to_app (n->get_expr ())->get_family_id () == bv.get_family_id ()) {
0 commit comments