Skip to content

Commit 0daa05a

Browse files
add ability to log selected bv rewrites
1 parent dff419a commit 0daa05a

File tree

1 file changed

+47
-26
lines changed

1 file changed

+47
-26
lines changed

src/ast/rewriter/bv_rewriter.cpp

+47-26
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@ Module Name:
2020
#include "ast/rewriter/bv_rewriter.h"
2121
#include "ast/rewriter/poly_rewriter_def.h"
2222
#include "ast/rewriter/bool_rewriter.h"
23-
#include "ast/ast_smt2_pp.h"
2423
#include "ast/ast_lt.h"
24+
#include "ast/ast_pp.h"
25+
2526

2627

2728
void bv_rewriter::updt_local_params(params_ref const & _p) {
@@ -54,45 +55,58 @@ void bv_rewriter::get_param_descrs(param_descrs & r) {
5455
br_status bv_rewriter::mk_app_core(func_decl * f, unsigned num_args, expr * const * args, expr_ref & result) {
5556
SASSERT(f->get_family_id() == get_fid());
5657

58+
br_status st = BR_FAILED;
5759
switch(f->get_decl_kind()) {
5860
case OP_BIT0: SASSERT(num_args == 0); result = mk_zero(1); return BR_DONE;
5961
case OP_BIT1: SASSERT(num_args == 0); result = mk_one(1); return BR_DONE;
6062
case OP_ULEQ:
6163
SASSERT(num_args == 2);
62-
return mk_ule(args[0], args[1], result);
64+
st = mk_ule(args[0], args[1], result);
65+
break;
6366
case OP_UGEQ:
6467
SASSERT(num_args == 2);
65-
return mk_uge(args[0], args[1], result);
68+
st = mk_uge(args[0], args[1], result);
69+
break;
6670
case OP_ULT:
6771
SASSERT(num_args == 2);
68-
return mk_ult(args[0], args[1], result);
72+
st = mk_ult(args[0], args[1], result);
73+
break;
6974
case OP_UGT:
7075
SASSERT(num_args == 2);
71-
return mk_ult(args[1], args[0], result);
76+
st = mk_ult(args[1], args[0], result);
77+
break;
7278
case OP_SLEQ:
7379
SASSERT(num_args == 2);
74-
return mk_sle(args[0], args[1], result);
80+
st = mk_sle(args[0], args[1], result);
81+
break;
7582
case OP_SGEQ:
7683
SASSERT(num_args == 2);
77-
return mk_sge(args[0], args[1], result);
84+
st = mk_sge(args[0], args[1], result);
85+
break;
7886
case OP_SLT:
7987
SASSERT(num_args == 2);
80-
return mk_slt(args[0], args[1], result);
88+
st = mk_slt(args[0], args[1], result);
89+
break;
8190
case OP_SGT:
8291
SASSERT(num_args == 2);
83-
return mk_slt(args[1], args[0], result);
92+
st = mk_slt(args[1], args[0], result);
93+
break;
8494
case OP_BADD:
8595
SASSERT(num_args > 0);
86-
return mk_bv_add(num_args, args, result);
96+
st = mk_bv_add(num_args, args, result);
97+
break;
8798
case OP_BMUL:
8899
SASSERT(num_args > 0);
89-
return mk_bv_mul(num_args, args, result);
100+
st = mk_bv_mul(num_args, args, result);
101+
break;
90102
case OP_BSUB:
91103
SASSERT(num_args > 0);
92-
return mk_sub(num_args, args, result);
104+
st = mk_sub(num_args, args, result);
105+
break;
93106
case OP_BNEG:
94107
SASSERT(num_args == 1);
95-
return mk_uminus(args[0], result);
108+
st = mk_uminus(args[0], result);
109+
break;
96110
case OP_BNEG_OVFL:
97111
SASSERT(num_args == 1);
98112
return mk_bvneg_overflow(args[0], result);
@@ -220,6 +234,13 @@ br_status bv_rewriter::mk_app_core(func_decl * f, unsigned num_args, expr * cons
220234
default:
221235
return BR_FAILED;
222236
}
237+
238+
CTRACE("bv", st != BR_FAILED, tout << mk_pp(f, m) << "\n";
239+
for (unsigned i = 0; i < num_args; ++i)
240+
tout << " " << mk_bounded_pp(args[i], m) << "\n";
241+
tout << mk_bounded_pp(result, m, 3) << "\n");
242+
243+
return st;
223244
}
224245

225246
br_status bv_rewriter::mk_ule(expr * a, expr * b, expr_ref & result) {
@@ -534,14 +555,15 @@ br_status bv_rewriter::mk_leq_core(bool is_signed, expr * a, expr * b, expr_ref
534555
result = m.mk_and(result, m_util.mk_ule(m_util.mk_numeral(r1-r2, sz), a2));
535556
else if (r1 < r2)
536557
result = m.mk_or(result, m_util.mk_ule(m_util.mk_numeral(r1-r2, sz), a2));
558+
verbose_stream() << result << "\n";
537559
return BR_REWRITE2;
538560
}
539561

540562
if (m_le_extra) {
541563
const br_status cst = rw_leq_concats(is_signed, a, b, result);
542564
if (cst != BR_FAILED) {
543565
TRACE("le_extra", tout << (is_signed ? "bv_sle\n" : "bv_ule\n")
544-
<< mk_ismt2_pp(a, m, 2) << "\n" << mk_ismt2_pp(b, m, 2) << "\n--->\n"<< mk_ismt2_pp(result, m, 2) << "\n";);
566+
<< mk_pp(a, m, 2) << "\n" << mk_pp(b, m, 2) << "\n--->\n"<< mk_pp(result, m, 2) << "\n";);
545567
return cst;
546568
}
547569
}
@@ -550,7 +572,7 @@ br_status bv_rewriter::mk_leq_core(bool is_signed, expr * a, expr * b, expr_ref
550572
const br_status cst = rw_leq_overflow(is_signed, a, b, result);
551573
if (cst != BR_FAILED) {
552574
TRACE("le_extra", tout << (is_signed ? "bv_sle\n" : "bv_ule\n")
553-
<< mk_ismt2_pp(a, m, 2) << "\n" << mk_ismt2_pp(b, m, 2) << "\n--->\n"<< mk_ismt2_pp(result, m, 2) << "\n";);
575+
<< mk_pp(a, m, 2) << "\n" << mk_pp(b, m, 2) << "\n--->\n"<< mk_pp(result, m, 2) << "\n";);
554576
return cst;
555577
}
556578
}
@@ -802,8 +824,8 @@ br_status bv_rewriter::mk_extract(unsigned high, unsigned low, expr * arg, expr_
802824
const unsigned ep_rm = propagate_extract(high, arg, ep_res);
803825
if (ep_rm != 0) {
804826
result = m_mk_extract(high, low, ep_res);
805-
TRACE("extract_prop", tout << mk_ismt2_pp(arg, m) << "\n[" << high <<"," << low << "]\n" << ep_rm << "---->\n"
806-
<< mk_ismt2_pp(result.get(), m) << "\n";);
827+
TRACE("extract_prop", tout << mk_pp(arg, m) << "\n[" << high <<"," << low << "]\n" << ep_rm << "---->\n"
828+
<< mk_pp(result.get(), m) << "\n";);
807829
return BR_REWRITE2;
808830
}
809831
}
@@ -1132,7 +1154,7 @@ br_status bv_rewriter::mk_bv_udiv_core(expr * arg1, expr * arg2, bool hi_div0, e
11321154
m_util.mk_bv_udiv0(arg1),
11331155
m_util.mk_bv_udiv_i(arg1, arg2));
11341156

1135-
TRACE("bv_udiv", tout << mk_ismt2_pp(arg1, m) << "\n" << mk_ismt2_pp(arg2, m) << "\n---->\n" << mk_ismt2_pp(result, m) << "\n";);
1157+
TRACE("bv_udiv", tout << mk_pp(arg1, m) << "\n" << mk_pp(arg2, m) << "\n---->\n" << mk_pp(result, m) << "\n";);
11361158
return BR_REWRITE2;
11371159
}
11381160

@@ -1792,8 +1814,8 @@ br_status bv_rewriter::mk_bv_or(unsigned num, expr * const * args, expr_ref & re
17921814
std::reverse(exs.begin(), exs.end());
17931815
result = m_util.mk_concat(exs.size(), exs.data());
17941816
TRACE("mask_bug",
1795-
tout << "(assert (distinct (bvor (_ bv" << old_v1 << " " << sz << ")\n" << mk_ismt2_pp(t, m) << ")\n";
1796-
tout << mk_ismt2_pp(result, m) << "))\n";);
1817+
tout << "(assert (distinct (bvor (_ bv" << old_v1 << " " << sz << ")\n" << mk_pp(t, m) << ")\n";
1818+
tout << mk_pp(result, m) << "))\n";);
17971819
return BR_REWRITE2;
17981820
}
17991821

@@ -2463,7 +2485,7 @@ br_status bv_rewriter::mk_blast_eq_value(expr * lhs, expr * rhs, expr_ref & resu
24632485
unsigned sz = get_bv_size(lhs);
24642486
if (sz == 1)
24652487
return BR_FAILED;
2466-
TRACE("blast_eq_value", tout << "sz: " << sz << "\n" << mk_ismt2_pp(lhs, m) << "\n";);
2488+
TRACE("blast_eq_value", tout << "sz: " << sz << "\n" << mk_pp(lhs, m) << "\n";);
24672489
if (is_numeral(lhs))
24682490
std::swap(lhs, rhs);
24692491

@@ -2573,7 +2595,6 @@ void bv_rewriter::mk_t1_add_t2_eq_c(expr * t1, expr * t2, expr * c, expr_ref & r
25732595
result = m.mk_eq(t1, m_util.mk_bv_sub(c, t2));
25742596
}
25752597

2576-
#include "ast/ast_pp.h"
25772598

25782599
bool bv_rewriter::isolate_term(expr* lhs, expr* rhs, expr_ref& result) {
25792600
if (!m_util.is_numeral(lhs) || !is_add(rhs)) {
@@ -2730,13 +2751,13 @@ br_status bv_rewriter::mk_eq_core(expr * lhs, expr * rhs, expr_ref & result) {
27302751

27312752
st = mk_mul_eq(lhs, rhs, result);
27322753
if (st != BR_FAILED) {
2733-
TRACE("mk_mul_eq", tout << mk_ismt2_pp(lhs, m) << "\n=\n" << mk_ismt2_pp(rhs, m) << "\n----->\n" << mk_ismt2_pp(result,m) << "\n";);
2754+
TRACE("mk_mul_eq", tout << mk_pp(lhs, m) << "\n=\n" << mk_pp(rhs, m) << "\n----->\n" << mk_pp(result,m) << "\n";);
27342755
return st;
27352756
}
27362757

27372758
st = mk_mul_eq(rhs, lhs, result);
27382759
if (st != BR_FAILED) {
2739-
TRACE("mk_mul_eq", tout << mk_ismt2_pp(lhs, m) << "\n=\n" << mk_ismt2_pp(rhs, m) << "\n----->\n" << mk_ismt2_pp(result,m) << "\n";);
2760+
TRACE("mk_mul_eq", tout << mk_pp(lhs, m) << "\n=\n" << mk_pp(rhs, m) << "\n----->\n" << mk_pp(result,m) << "\n";);
27402761
return st;
27412762
}
27422763

@@ -2851,8 +2872,8 @@ bool bv_rewriter::is_eq_bit(expr * t, expr * & x, unsigned & val) {
28512872

28522873

28532874
br_status bv_rewriter::mk_ite_core(expr * c, expr * t, expr * e, expr_ref & result) {
2854-
TRACE("bv_ite", tout << "mk_ite_core:\n" << mk_ismt2_pp(c, m) << "?\n"
2855-
<< mk_ismt2_pp(t, m) << "\n:" << mk_ismt2_pp(e, m) << "\n";);
2875+
TRACE("bv_ite", tout << "mk_ite_core:\n" << mk_pp(c, m) << "?\n"
2876+
<< mk_pp(t, m) << "\n:" << mk_pp(e, m) << "\n";);
28562877
if (m.are_equal(t, e)) {
28572878
result = e;
28582879
return BR_REWRITE1;

0 commit comments

Comments
 (0)