From bd323d6fab6dff09642986bda2aa7b5b495f7dbe Mon Sep 17 00:00:00 2001 From: Nikolaj Bjorner Date: Tue, 13 Feb 2024 20:28:18 +0700 Subject: [PATCH] save --- src/ast/sls/bv_sls.cpp | 6 +++--- src/ast/sls/sls_valuation.cpp | 11 ++++++----- src/ast/sls/sls_valuation.h | 4 +++- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/ast/sls/bv_sls.cpp b/src/ast/sls/bv_sls.cpp index 90058607ebc..33b63537635 100644 --- a/src/ast/sls/bv_sls.cpp +++ b/src/ast/sls/bv_sls.cpp @@ -55,6 +55,7 @@ namespace bv { unsigned index = m_rand(m_repair_down.size()); unsigned expr_id = m_repair_down.elem_at(index); auto e = m_terms.term(expr_id); + IF_VERBOSE(20, verbose_stream() << "d " << mk_bounded_pp(e, m, 1) << "\n"); if (eval_is_correct(e)) m_repair_down.remove(expr_id); else @@ -64,6 +65,7 @@ namespace bv { unsigned index = m_rand(m_repair_up.size()); unsigned expr_id = m_repair_up.elem_at(index); auto e = m_terms.term(expr_id); + IF_VERBOSE(20, verbose_stream() << "u " << mk_bounded_pp(e, m, 1) << "\n"); if (eval_is_correct(e)) m_repair_up.remove(expr_id); else @@ -76,7 +78,6 @@ namespace bv { } bool sls::try_repair_down(app* e) { - IF_VERBOSE(20, verbose_stream() << "d " << mk_bounded_pp(e, m, 1) << "\n"); unsigned n = e->get_num_args(); unsigned s = m_rand(n); for (unsigned i = 0; i < n; ++i) @@ -97,7 +98,6 @@ namespace bv { } bool sls::try_repair_up(app* e) { - IF_VERBOSE(20, verbose_stream() << "u " << mk_bounded_pp(e, m, 1) << "\n"); m_repair_up.remove(e->get_id()); if (m_terms.is_assertion(e)) { m_repair_down.insert(e->get_id()); @@ -114,7 +114,7 @@ namespace bv { if (m.is_bool(e)) return m_eval.bval0(e) == m_eval.bval1(e); if (bv.is_bv(e)) - return 0 == memcmp(m_eval.wval0(e).bits.data(), m_eval.wval1(e).data(), m_eval.wval0(e).nw * 8); + return 0 == m_eval.wval0(e).eq(m_eval.wval1(e)); UNREACHABLE(); return false; } diff --git a/src/ast/sls/sls_valuation.cpp b/src/ast/sls/sls_valuation.cpp index bb15c8da389..a4560289976 100644 --- a/src/ast/sls/sls_valuation.cpp +++ b/src/ast/sls/sls_valuation.cpp @@ -55,13 +55,14 @@ namespace bv { m.compare(bits.data(), nb, hi.data(), nb) < 0; } - bool sls_valuation::eq(sls_valuation const& other) const { - SASSERT(bw == other.bw); - auto c = 0 == memcmp(bits.data(), other.bits.data(), bw / 8); + bool sls_valuation::eq(svector const& other) const { + auto c = 0 == memcmp(bits.data(), other.data(), bw / 8); if (bw % 8 == 0 || !c) return c; - NOT_IMPLEMENTED_YET(); - return false; + for (unsigned i = 8 * (bw / 8); i < bw; ++i) + if (get(bits, i) != get(other, i)) + return false; + return true; } void sls_valuation::clear_overflow_bits(svector& bits) const { diff --git a/src/ast/sls/sls_valuation.h b/src/ast/sls/sls_valuation.h index bdc731bfddb..1bf61698ce3 100644 --- a/src/ast/sls/sls_valuation.h +++ b/src/ast/sls/sls_valuation.h @@ -46,7 +46,9 @@ namespace bv { void clear_overflow_bits(svector& bits) const; bool can_set(svector const& bits) const; - bool eq(sls_valuation const& other) const; + bool eq(sls_valuation const& other) const { return eq(other.bits); } + + bool eq(svector const& other) const; bool gt(svector const& a, svector const& b) const { return 0 > memcmp(a.data(), b.data(), num_bytes());