From 42e21458bab35aa86e815cbb2f8199cfd71824df Mon Sep 17 00:00:00 2001 From: Nikolaj Bjorner Date: Fri, 9 Aug 2019 17:06:05 -0700 Subject: [PATCH] fix #2479 Signed-off-by: Nikolaj Bjorner --- src/ast/rewriter/bv_rewriter.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/ast/rewriter/bv_rewriter.cpp b/src/ast/rewriter/bv_rewriter.cpp index d9fb1bbd1..05d589e94 100644 --- a/src/ast/rewriter/bv_rewriter.cpp +++ b/src/ast/rewriter/bv_rewriter.cpp @@ -2729,7 +2729,6 @@ br_status bv_rewriter::mk_ite_core(expr * c, expr * t, expr * e, expr_ref & resu result = e; return BR_REWRITE1; } - const unsigned sz = m_util.get_bv_size(rhs); if (sz == 1) { // detect (lhs = N) ? C : D, where N, C, D are 1 bit numerals numeral rhs_n, e_n, t_n; @@ -2742,12 +2741,24 @@ br_status bv_rewriter::mk_ite_core(expr * c, expr * t, expr * e, expr_ref & resu result = m().are_equal(rhs, t) ? lhs : m_util.mk_bv_not(lhs); return BR_REWRITE1; } + if (rhs_n.is_one() && t_n.is_one() && e_n.is_zero()) { + return mk_zero_extend(t_sz - 1, lhs, result); + } + if (rhs_n.is_zero() && t_n.is_one() && e_n.is_zero()) { + return mk_zero_extend(t_sz - 1, m_util.mk_bv_not(lhs), result); + } + if (rhs_n.is_zero() && t_n.is_zero() && e_n.is_one()) { + return mk_zero_extend(t_sz - 1, lhs, result); + } + if (rhs_n.is_one() && t_n.is_zero() && e_n.is_one()) { + return mk_zero_extend(t_sz - 1, m_util.mk_bv_not(lhs), result); + } } - } + } + } - - } + return BR_FAILED; }