Skip to content

Commit f30d63a

Browse files
better rewriting for ule
1 parent f3dd58d commit f30d63a

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

src/ast/rewriter/bv_rewriter.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -514,10 +514,14 @@ br_status bv_rewriter::mk_leq_core(bool is_signed, expr * a, expr * b, expr_ref
514514
// for r1 = r2, (bvule a (2^n - r2 - 1))
515515
// other cases r1 > r2, r1 < r2 are TBD
516516
if (!is_signed && is_num1 && m_util.is_bv_add(b, a1, a2) && is_numeral(a1, r2, sz)) {
517-
if (r1 == r2) {
518-
result = m_util.mk_ule(a2, m_util.mk_numeral(-r2 - 1, sz));
519-
return BR_REWRITE1;
517+
result = m_util.mk_ule(a2, m_util.mk_numeral(-r2 - 1, sz));
518+
if (r1 > r2) {
519+
result = m().mk_and(result, m_util.mk_ule(m_util.mk_numeral(r1-r2, sz), a2));
520+
}
521+
else if (r1 < r2) {
522+
result = m().mk_or(result, m_util.mk_ule(m_util.mk_numeral(r1-r2, sz), a2));
520523
}
524+
return BR_REWRITE2;
521525
}
522526

523527
if (m_le_extra) {

0 commit comments

Comments
 (0)