mirror of
https://github.com/Z3Prover/z3
synced 2025-11-10 08:02:01 +00:00
revert the change
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
parent
51f6dfeb83
commit
54257b6629
62 changed files with 120 additions and 765 deletions
|
|
@ -384,14 +384,8 @@ br_status bv_rewriter::rw_leq_overflow(bool is_signed, expr * a, expr * b, expr_
|
|||
}
|
||||
else {
|
||||
SASSERT(lower.is_pos());
|
||||
//non-deterministic order change start
|
||||
{
|
||||
auto mk_ule_1 = m_util.mk_ule(mk_numeral(lower, sz), common);
|
||||
auto mk_ule_2 = m_util.mk_ule(common, mk_numeral(upper, sz));
|
||||
result = m.mk_and(mk_ule_1,
|
||||
mk_ule_2);
|
||||
}
|
||||
//non-deterministic order change end
|
||||
result = m.mk_and(m_util.mk_ule(mk_numeral(lower, sz), common),
|
||||
m_util.mk_ule(common, mk_numeral(upper, sz)));
|
||||
}
|
||||
return BR_REWRITE2;
|
||||
}
|
||||
|
|
@ -453,14 +447,8 @@ br_status bv_rewriter::rw_leq_concats(bool is_signed, expr * _a, expr * _b, expr
|
|||
return BR_DONE;
|
||||
}
|
||||
if (common > 0) {
|
||||
//non-deterministic order change start
|
||||
{
|
||||
auto get_args_1 = concat(numa - common, a->get_args() + common);
|
||||
auto get_args_2 = concat(numb - common, b->get_args() + common);
|
||||
result = m_util.mk_ule(get_args_1,
|
||||
get_args_2);
|
||||
}
|
||||
//non-deterministic order change end
|
||||
result = m_util.mk_ule(concat(numa - common, a->get_args() + common),
|
||||
concat(numb - common, b->get_args() + common));
|
||||
return BR_REWRITE2;
|
||||
}
|
||||
}
|
||||
|
|
@ -481,9 +469,7 @@ br_status bv_rewriter::rw_leq_concats(bool is_signed, expr * _a, expr * _b, expr
|
|||
return BR_DONE;
|
||||
}
|
||||
if (new_numa != numa) {
|
||||
//non-deterministic order no change: too complex
|
||||
result = is_signed ? m_util.mk_sle(concat(new_numa, a->get_args()), concat(new_numb, b->get_args()))
|
||||
//non-deterministic order no change: too complex
|
||||
: m_util.mk_ule(concat(new_numa, a->get_args()), concat(new_numb, b->get_args()));
|
||||
return BR_REWRITE2;
|
||||
}
|
||||
|
|
@ -884,13 +870,7 @@ br_status bv_rewriter::mk_extract(unsigned high, unsigned low, expr * arg, expr_
|
|||
expr* c = nullptr, *t = nullptr, *e = nullptr;
|
||||
if (m.is_ite(arg, c, t, e) &&
|
||||
(t->get_ref_count() == 1 || e->get_ref_count() == 1 || !m.is_ite(t) || !m.is_ite(e))) {
|
||||
//non-deterministic order change start
|
||||
{
|
||||
auto m_mk_extract_1 = m_mk_extract(high, low, t);
|
||||
auto m_mk_extract_2 = m_mk_extract(high, low, e);
|
||||
result = m.mk_ite(c, m_mk_extract_1, m_mk_extract_2);
|
||||
}
|
||||
//non-deterministic order change end
|
||||
result = m.mk_ite(c, m_mk_extract(high, low, t), m_mk_extract(high, low, e));
|
||||
return BR_REWRITE2;
|
||||
}
|
||||
|
||||
|
|
@ -1103,13 +1083,7 @@ br_status bv_rewriter::mk_bv_ashr(expr * arg1, expr * arg2, expr_ref & result) {
|
|||
// (bvlshr x k) -> (concat bv0:k (extract [n-1:k] x))
|
||||
|
||||
unsigned k = r2.get_unsigned();
|
||||
//non-deterministic order change start
|
||||
{
|
||||
auto mk_zero_1 = mk_zero(k);
|
||||
auto m_mk_extract_2 = m_mk_extract(bv_size - 1, k, arg1);
|
||||
result = m_util.mk_concat(mk_zero_1, m_mk_extract_2);
|
||||
}
|
||||
//non-deterministic order change end
|
||||
result = m_util.mk_concat(mk_zero(k), m_mk_extract(bv_size - 1, k, arg1));
|
||||
return BR_REWRITE2;
|
||||
}
|
||||
#if 0
|
||||
|
|
@ -1146,16 +1120,9 @@ br_status bv_rewriter::mk_bv_sdiv_core(expr * arg1, expr * arg2, bool hi_div0, e
|
|||
}
|
||||
else {
|
||||
// The "hardware interpretation" for (bvsdiv x 0) is (ite (bvslt x #x0000) #x0001 #xffff)
|
||||
//non-deterministic order change start
|
||||
{
|
||||
auto mk_app_1 = m.mk_app(get_fid(), OP_SLT, arg1, mk_zero(bv_size));
|
||||
auto mk_one_2 = mk_one(bv_size);
|
||||
auto mk_numeral_3 = mk_numeral(rational::power_of_two(bv_size) - numeral(1), bv_size);
|
||||
result = m.mk_ite(mk_app_1,
|
||||
mk_one_2,
|
||||
mk_numeral_3);
|
||||
}
|
||||
//non-deterministic order change end
|
||||
result = m.mk_ite(m.mk_app(get_fid(), OP_SLT, arg1, mk_zero(bv_size)),
|
||||
mk_one(bv_size),
|
||||
mk_numeral(rational::power_of_two(bv_size) - numeral(1), bv_size));
|
||||
return BR_REWRITE2;
|
||||
}
|
||||
}
|
||||
|
|
@ -1283,16 +1250,9 @@ br_status bv_rewriter::mk_bv_srem_core(expr * arg1, expr * arg2, bool hi_div0, e
|
|||
}
|
||||
|
||||
bv_size = get_bv_size(arg2);
|
||||
//non-deterministic order change start
|
||||
{
|
||||
auto mk_eq_1 = m.mk_eq(arg2, mk_zero(bv_size));
|
||||
auto mk_app_2 = m.mk_app(get_fid(), OP_BSREM0, arg1);
|
||||
auto mk_app_3 = m.mk_app(get_fid(), OP_BSREM_I, arg1, arg2);
|
||||
result = m.mk_ite(mk_eq_1,
|
||||
mk_app_2,
|
||||
mk_app_3);
|
||||
}
|
||||
//non-deterministic order change end
|
||||
result = m.mk_ite(m.mk_eq(arg2, mk_zero(bv_size)),
|
||||
m.mk_app(get_fid(), OP_BSREM0, arg1),
|
||||
m.mk_app(get_fid(), OP_BSREM_I, arg1, arg2));
|
||||
return BR_REWRITE2;
|
||||
}
|
||||
|
||||
|
|
@ -1507,16 +1467,9 @@ br_status bv_rewriter::mk_bv_smod_core(expr * arg1, expr * arg2, bool hi_div0, e
|
|||
}
|
||||
|
||||
bv_size = get_bv_size(arg2);
|
||||
//non-deterministic order change start
|
||||
{
|
||||
auto mk_eq_1 = m.mk_eq(arg2, mk_zero(bv_size));
|
||||
auto mk_app_2 = m.mk_app(get_fid(), OP_BSMOD0, arg1);
|
||||
auto mk_app_3 = m.mk_app(get_fid(), OP_BSMOD_I, arg1, arg2);
|
||||
result = m.mk_ite(mk_eq_1,
|
||||
mk_app_2,
|
||||
mk_app_3);
|
||||
}
|
||||
//non-deterministic order change end
|
||||
result = m.mk_ite(m.mk_eq(arg2, mk_zero(bv_size)),
|
||||
m.mk_app(get_fid(), OP_BSMOD0, arg1),
|
||||
m.mk_app(get_fid(), OP_BSMOD_I, arg1, arg2));
|
||||
return BR_REWRITE2;
|
||||
}
|
||||
|
||||
|
|
@ -1733,13 +1686,7 @@ br_status bv_rewriter::mk_concat(unsigned num_args, expr * const * args, expr_re
|
|||
ptr_buffer<expr> args1, args2;
|
||||
for (unsigned i = 0; i < new_args.size(); ++i)
|
||||
args1.push_back(y), args2.push_back(z);
|
||||
//non-deterministic order change start
|
||||
{
|
||||
auto mk_concat_1 = m_util.mk_concat(args1);
|
||||
auto mk_concat_2 = m_util.mk_concat(args2);
|
||||
result = m.mk_ite(x, mk_concat_1, mk_concat_2);
|
||||
}
|
||||
//non-deterministic order change end
|
||||
result = m.mk_ite(x, m_util.mk_concat(args1), m_util.mk_concat(args2));
|
||||
return BR_REWRITE2;
|
||||
}
|
||||
}
|
||||
|
|
@ -2389,16 +2336,9 @@ br_status bv_rewriter::mk_bv_comp(expr * arg1, expr * arg2, expr_ref & result) {
|
|||
return BR_DONE;
|
||||
}
|
||||
|
||||
//non-deterministic order change start
|
||||
{
|
||||
auto mk_eq_1 = m.mk_eq(arg1, arg2);
|
||||
auto mk_one_2 = mk_one(1);
|
||||
auto mk_zero_3 = mk_zero(1);
|
||||
result = m.mk_ite(mk_eq_1,
|
||||
mk_one_2,
|
||||
mk_zero_3);
|
||||
}
|
||||
//non-deterministic order change end
|
||||
result = m.mk_ite(m.mk_eq(arg1, arg2),
|
||||
mk_one(1),
|
||||
mk_zero(1));
|
||||
return BR_REWRITE2;
|
||||
}
|
||||
|
||||
|
|
@ -2678,7 +2618,6 @@ br_status bv_rewriter::mk_blast_eq_value(expr * lhs, expr * rhs, expr_ref & resu
|
|||
ptr_buffer<expr> new_args;
|
||||
for (unsigned i = 0; i < sz; i++) {
|
||||
bool bit0 = (v % two).is_zero();
|
||||
//non-deterministic order no change: too complex
|
||||
new_args.push_back(m.mk_eq(m_mk_extract(i,i, lhs),
|
||||
mk_numeral(bit0 ? 0 : 1, 1)));
|
||||
div(v, two, v);
|
||||
|
|
@ -2724,7 +2663,6 @@ br_status bv_rewriter::mk_eq_concat(expr * lhs, expr * rhs, expr_ref & result) {
|
|||
unsigned rsz1 = sz1 - low1;
|
||||
unsigned rsz2 = sz2 - low2;
|
||||
if (rsz1 == rsz2) {
|
||||
//non-deterministic order no change: too complex
|
||||
new_eqs.push_back(m.mk_eq(m_mk_extract(sz1 - 1, low1, arg1),
|
||||
m_mk_extract(sz2 - 1, low2, arg2)));
|
||||
low1 = 0;
|
||||
|
|
@ -2734,7 +2672,6 @@ br_status bv_rewriter::mk_eq_concat(expr * lhs, expr * rhs, expr_ref & result) {
|
|||
continue;
|
||||
}
|
||||
else if (rsz1 < rsz2) {
|
||||
//non-deterministic order no change: too complex
|
||||
new_eqs.push_back(m.mk_eq(m_mk_extract(sz1 - 1, low1, arg1),
|
||||
m_mk_extract(rsz1 + low2 - 1, low2, arg2)));
|
||||
low1 = 0;
|
||||
|
|
@ -2742,7 +2679,6 @@ br_status bv_rewriter::mk_eq_concat(expr * lhs, expr * rhs, expr_ref & result) {
|
|||
--i1;
|
||||
}
|
||||
else {
|
||||
//non-deterministic order no change: too complex
|
||||
new_eqs.push_back(m.mk_eq(m_mk_extract(rsz2 + low1 - 1, low1, arg1),
|
||||
m_mk_extract(sz2 - 1, low2, arg2)));
|
||||
low1 += rsz2;
|
||||
|
|
@ -3174,16 +3110,10 @@ br_status bv_rewriter::mk_distinct(unsigned num_args, expr * const * args, expr_
|
|||
|
||||
br_status bv_rewriter::mk_bvsmul_overflow(unsigned num, expr * const * args, expr_ref & result) {
|
||||
SASSERT(num == 2);
|
||||
//non-deterministic order change start
|
||||
{
|
||||
auto mk_not_1 = m.mk_not(m_util.mk_bvsmul_no_ovfl(args[0], args[1]));
|
||||
auto mk_not_2 = m.mk_not(m_util.mk_bvsmul_no_udfl(args[0], args[1]));
|
||||
result = m.mk_or(
|
||||
mk_not_1,
|
||||
mk_not_2
|
||||
result = m.mk_or(
|
||||
m.mk_not(m_util.mk_bvsmul_no_ovfl(args[0], args[1])),
|
||||
m.mk_not(m_util.mk_bvsmul_no_udfl(args[0], args[1]))
|
||||
);
|
||||
}
|
||||
//non-deterministic order change end
|
||||
return BR_REWRITE_FULL;
|
||||
}
|
||||
|
||||
|
|
@ -3349,13 +3279,7 @@ br_status bv_rewriter::mk_bvsdiv_overflow(unsigned num, expr * const * args, exp
|
|||
auto sz = get_bv_size(args[1]);
|
||||
auto minSigned = mk_numeral(rational::power_of_two(sz-1), sz);
|
||||
auto minusOne = mk_numeral(rational::power_of_two(sz) - 1, sz);
|
||||
//non-deterministic order change start
|
||||
{
|
||||
auto mk_eq_1 = m.mk_eq(args[0], minSigned);
|
||||
auto mk_eq_2 = m.mk_eq(args[1], minusOne);
|
||||
result = m.mk_and(mk_eq_1, mk_eq_2);
|
||||
}
|
||||
//non-deterministic order change end
|
||||
result = m.mk_and(m.mk_eq(args[0], minSigned), m.mk_eq(args[1], minusOne));
|
||||
return BR_REWRITE_FULL;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue