Skip to content

Commit 659e384

Browse files
bugfixes
Signed-off-by: Nikolaj Bjorner <[email protected]>
1 parent cd6382f commit 659e384

File tree

3 files changed

+16
-11
lines changed

3 files changed

+16
-11
lines changed

src/ast/sls/bv_sls_eval.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,8 @@ namespace bv {
429429
break;
430430
}
431431
case OP_CONCAT: {
432+
if (e->get_num_args() != 2)
433+
verbose_stream() << mk_bounded_pp(e, m) << "\n";
432434
SASSERT(e->get_num_args() == 2);
433435
auto const& a = wval0(e->get_arg(0));
434436
auto const& b = wval0(e->get_arg(1));

src/ast/sls/bv_sls_terms.cpp

+13-10
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Module Name:
1818
1919
--*/
2020

21+
#include "ast/ast_ll_pp.h"
2122
#include "ast/sls/bv_sls.h"
2223

2324
namespace bv {
@@ -60,13 +61,15 @@ namespace bv {
6061
}
6162

6263
void sls_terms::ensure_binary_core(expr* e) {
64+
if (m_translated.get(e->get_id(), nullptr))
65+
return;
66+
6367
app* a = to_app(e);
6468
auto arg = [&](unsigned i) {
6569
return m_translated.get(a->get_arg(i)->get_id());
6670
};
6771
unsigned num_args = a->get_num_args();
6872
expr_ref r(m);
69-
expr* x, * y;
7073
#define FOLD_OP(oper) \
7174
r = arg(0); \
7275
for (unsigned i = 1; i < num_args; ++i)\
@@ -106,20 +109,20 @@ namespace bv {
106109
es.push_back(m.mk_not(m.mk_eq(arg(i), arg(j))));
107110
r = m.mk_and(es);
108111
}
109-
else if (bv.is_bv_sdiv(e, x, y) || bv.is_bv_sdiv0(e, x, y) || bv.is_bv_sdivi(e, x, y)) {
110-
r = mk_sdiv(x, y);
112+
else if (bv.is_bv_sdiv(e) || bv.is_bv_sdiv0(e) || bv.is_bv_sdivi(e)) {
113+
r = mk_sdiv(arg(0), arg(1));
111114
}
112-
else if (bv.is_bv_smod(e, x, y) || bv.is_bv_smod0(e, x, y) || bv.is_bv_smodi(e, x, y)) {
113-
r = mk_smod(x, y);
115+
else if (bv.is_bv_smod(e) || bv.is_bv_smod0(e) || bv.is_bv_smodi(e)) {
116+
r = mk_smod(arg(0), arg(1));
114117
}
115-
else if (bv.is_bv_srem(e, x, y) || bv.is_bv_srem0(e, x, y) || bv.is_bv_sremi(e, x, y)) {
116-
r = mk_srem(x, y);
118+
else if (bv.is_bv_srem(e) || bv.is_bv_srem0(e) || bv.is_bv_sremi(e)) {
119+
r = mk_srem(arg(0), arg(1));
117120
}
118121
else {
119122
for (unsigned i = 0; i < num_args; ++i)
120-
m_todo.push_back(arg(i));
121-
r = m.mk_app(a->get_decl(), num_args, m_todo.data());
122-
m_todo.reset();
123+
m_args.push_back(arg(i));
124+
r = m.mk_app(a->get_decl(), num_args, m_args.data());
125+
m_args.reset();
123126
}
124127
m_translated.setx(e->get_id(), r);
125128
}

src/ast/sls/bv_sls_terms.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ namespace bv {
3131
class sls_terms {
3232
ast_manager& m;
3333
bv_util bv;
34-
ptr_vector<expr> m_todo;
34+
ptr_vector<expr> m_todo, m_args;
3535
expr_ref_vector m_assertions, m_pinned, m_translated;
3636
app_ref_vector m_terms;
3737
vector<ptr_vector<expr>> m_parents;

0 commit comments

Comments
 (0)