@@ -20,8 +20,9 @@ Module Name:
20
20
#include " ast/rewriter/bv_rewriter.h"
21
21
#include " ast/rewriter/poly_rewriter_def.h"
22
22
#include " ast/rewriter/bool_rewriter.h"
23
- #include " ast/ast_smt2_pp.h"
24
23
#include " ast/ast_lt.h"
24
+ #include " ast/ast_pp.h"
25
+
25
26
26
27
27
28
void bv_rewriter::updt_local_params (params_ref const & _p) {
@@ -54,45 +55,58 @@ void bv_rewriter::get_param_descrs(param_descrs & r) {
54
55
br_status bv_rewriter::mk_app_core (func_decl * f, unsigned num_args, expr * const * args, expr_ref & result) {
55
56
SASSERT (f->get_family_id () == get_fid ());
56
57
58
+ br_status st = BR_FAILED;
57
59
switch (f->get_decl_kind ()) {
58
60
case OP_BIT0: SASSERT (num_args == 0 ); result = mk_zero (1 ); return BR_DONE;
59
61
case OP_BIT1: SASSERT (num_args == 0 ); result = mk_one (1 ); return BR_DONE;
60
62
case OP_ULEQ:
61
63
SASSERT (num_args == 2 );
62
- return mk_ule (args[0 ], args[1 ], result);
64
+ st = mk_ule (args[0 ], args[1 ], result);
65
+ break ;
63
66
case OP_UGEQ:
64
67
SASSERT (num_args == 2 );
65
- return mk_uge (args[0 ], args[1 ], result);
68
+ st = mk_uge (args[0 ], args[1 ], result);
69
+ break ;
66
70
case OP_ULT:
67
71
SASSERT (num_args == 2 );
68
- return mk_ult (args[0 ], args[1 ], result);
72
+ st = mk_ult (args[0 ], args[1 ], result);
73
+ break ;
69
74
case OP_UGT:
70
75
SASSERT (num_args == 2 );
71
- return mk_ult (args[1 ], args[0 ], result);
76
+ st = mk_ult (args[1 ], args[0 ], result);
77
+ break ;
72
78
case OP_SLEQ:
73
79
SASSERT (num_args == 2 );
74
- return mk_sle (args[0 ], args[1 ], result);
80
+ st = mk_sle (args[0 ], args[1 ], result);
81
+ break ;
75
82
case OP_SGEQ:
76
83
SASSERT (num_args == 2 );
77
- return mk_sge (args[0 ], args[1 ], result);
84
+ st = mk_sge (args[0 ], args[1 ], result);
85
+ break ;
78
86
case OP_SLT:
79
87
SASSERT (num_args == 2 );
80
- return mk_slt (args[0 ], args[1 ], result);
88
+ st = mk_slt (args[0 ], args[1 ], result);
89
+ break ;
81
90
case OP_SGT:
82
91
SASSERT (num_args == 2 );
83
- return mk_slt (args[1 ], args[0 ], result);
92
+ st = mk_slt (args[1 ], args[0 ], result);
93
+ break ;
84
94
case OP_BADD:
85
95
SASSERT (num_args > 0 );
86
- return mk_bv_add (num_args, args, result);
96
+ st = mk_bv_add (num_args, args, result);
97
+ break ;
87
98
case OP_BMUL:
88
99
SASSERT (num_args > 0 );
89
- return mk_bv_mul (num_args, args, result);
100
+ st = mk_bv_mul (num_args, args, result);
101
+ break ;
90
102
case OP_BSUB:
91
103
SASSERT (num_args > 0 );
92
- return mk_sub (num_args, args, result);
104
+ st = mk_sub (num_args, args, result);
105
+ break ;
93
106
case OP_BNEG:
94
107
SASSERT (num_args == 1 );
95
- return mk_uminus (args[0 ], result);
108
+ st = mk_uminus (args[0 ], result);
109
+ break ;
96
110
case OP_BNEG_OVFL:
97
111
SASSERT (num_args == 1 );
98
112
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
220
234
default :
221
235
return BR_FAILED;
222
236
}
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;
223
244
}
224
245
225
246
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
534
555
result = m.mk_and (result, m_util.mk_ule (m_util.mk_numeral (r1-r2, sz), a2));
535
556
else if (r1 < r2)
536
557
result = m.mk_or (result, m_util.mk_ule (m_util.mk_numeral (r1-r2, sz), a2));
558
+ verbose_stream () << result << " \n " ;
537
559
return BR_REWRITE2;
538
560
}
539
561
540
562
if (m_le_extra) {
541
563
const br_status cst = rw_leq_concats (is_signed, a, b, result);
542
564
if (cst != BR_FAILED) {
543
565
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 " ;);
545
567
return cst;
546
568
}
547
569
}
@@ -550,7 +572,7 @@ br_status bv_rewriter::mk_leq_core(bool is_signed, expr * a, expr * b, expr_ref
550
572
const br_status cst = rw_leq_overflow (is_signed, a, b, result);
551
573
if (cst != BR_FAILED) {
552
574
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 " ;);
554
576
return cst;
555
577
}
556
578
}
@@ -802,8 +824,8 @@ br_status bv_rewriter::mk_extract(unsigned high, unsigned low, expr * arg, expr_
802
824
const unsigned ep_rm = propagate_extract (high, arg, ep_res);
803
825
if (ep_rm != 0 ) {
804
826
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 " ;);
807
829
return BR_REWRITE2;
808
830
}
809
831
}
@@ -1132,7 +1154,7 @@ br_status bv_rewriter::mk_bv_udiv_core(expr * arg1, expr * arg2, bool hi_div0, e
1132
1154
m_util.mk_bv_udiv0 (arg1),
1133
1155
m_util.mk_bv_udiv_i (arg1, arg2));
1134
1156
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 " ;);
1136
1158
return BR_REWRITE2;
1137
1159
}
1138
1160
@@ -1792,8 +1814,8 @@ br_status bv_rewriter::mk_bv_or(unsigned num, expr * const * args, expr_ref & re
1792
1814
std::reverse (exs.begin (), exs.end ());
1793
1815
result = m_util.mk_concat (exs.size (), exs.data ());
1794
1816
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 " ;);
1797
1819
return BR_REWRITE2;
1798
1820
}
1799
1821
@@ -2463,7 +2485,7 @@ br_status bv_rewriter::mk_blast_eq_value(expr * lhs, expr * rhs, expr_ref & resu
2463
2485
unsigned sz = get_bv_size (lhs);
2464
2486
if (sz == 1 )
2465
2487
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 " ;);
2467
2489
if (is_numeral (lhs))
2468
2490
std::swap (lhs, rhs);
2469
2491
@@ -2573,7 +2595,6 @@ void bv_rewriter::mk_t1_add_t2_eq_c(expr * t1, expr * t2, expr * c, expr_ref & r
2573
2595
result = m.mk_eq (t1, m_util.mk_bv_sub (c, t2));
2574
2596
}
2575
2597
2576
- #include " ast/ast_pp.h"
2577
2598
2578
2599
bool bv_rewriter::isolate_term (expr* lhs, expr* rhs, expr_ref& result) {
2579
2600
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) {
2730
2751
2731
2752
st = mk_mul_eq (lhs, rhs, result);
2732
2753
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 " ;);
2734
2755
return st;
2735
2756
}
2736
2757
2737
2758
st = mk_mul_eq (rhs, lhs, result);
2738
2759
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 " ;);
2740
2761
return st;
2741
2762
}
2742
2763
@@ -2851,8 +2872,8 @@ bool bv_rewriter::is_eq_bit(expr * t, expr * & x, unsigned & val) {
2851
2872
2852
2873
2853
2874
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 " ;);
2856
2877
if (m.are_equal (t, e)) {
2857
2878
result = e;
2858
2879
return BR_REWRITE1;
0 commit comments