mirror of
https://github.com/Z3Prover/z3
synced 2025-08-22 02:57:50 +00:00
Adding bv preprocessing techniques.
This commit is contained in:
parent
5290cd1ff5
commit
ec47a1df50
11 changed files with 1545 additions and 3 deletions
|
@ -56,11 +56,16 @@ class bv_rewriter : public poly_rewriter<bv_rewriter_core> {
|
|||
bool m_bit2bool;
|
||||
bool m_blast_eq_value;
|
||||
bool m_mkbv2num;
|
||||
bool m_ite2id;
|
||||
bool m_split_concat_eq;
|
||||
bool m_udiv2mul;
|
||||
bool m_bvnot2arith;
|
||||
bool m_bv_sort_ac;
|
||||
bool m_trailing;
|
||||
bool m_extract_prop;
|
||||
bool m_bvnot_simpl;
|
||||
bool m_le_extra;
|
||||
bool m_urem_simpl;
|
||||
|
||||
bool is_zero_bit(expr * x, unsigned idx);
|
||||
|
||||
|
@ -70,13 +75,19 @@ class bv_rewriter : public poly_rewriter<bv_rewriter_core> {
|
|||
br_status mk_sle(expr * a, expr * b, expr_ref & result);
|
||||
br_status mk_sge(expr * a, expr * b, expr_ref & result);
|
||||
br_status mk_slt(expr * a, expr * b, expr_ref & result);
|
||||
br_status rw_leq_concats(bool is_signed, expr * a, expr * b, expr_ref & result);
|
||||
bool are_eq_upto_num(expr * a, expr * b, expr_ref& common, numeral& a0_val, numeral& b0_val);
|
||||
br_status rw_leq_overflow(bool is_signed, expr * _a, expr * _b, expr_ref & result);
|
||||
br_status mk_leq_core(bool is_signed, expr * a, expr * b, expr_ref & result);
|
||||
|
||||
br_status fuse_concat(unsigned num_args, expr * const * args, expr_ref & result);
|
||||
br_status mk_concat(unsigned num_args, expr * const * args, expr_ref & result);
|
||||
unsigned propagate_extract(unsigned high, expr * arg, expr_ref & result);
|
||||
br_status mk_extract(unsigned high, unsigned low, expr * arg, expr_ref & result);
|
||||
br_status mk_repeat(unsigned n, expr * arg, expr_ref & result);
|
||||
br_status mk_zero_extend(unsigned n, expr * arg, expr_ref & result);
|
||||
br_status mk_sign_extend(unsigned n, expr * arg, expr_ref & result);
|
||||
bool is_negatable(expr * arg, expr_ref& x);
|
||||
br_status mk_bv_not(expr * arg, expr_ref & result);
|
||||
br_status mk_bv_or(unsigned num, expr * const * args, expr_ref & result);
|
||||
br_status mk_bv_xor(unsigned num, expr * const * args, expr_ref & result);
|
||||
|
@ -139,6 +150,7 @@ class bv_rewriter : public poly_rewriter<bv_rewriter_core> {
|
|||
|
||||
void updt_local_params(params_ref const & p);
|
||||
|
||||
expr * concat(unsigned num_args, expr * const * args);
|
||||
public:
|
||||
bv_rewriter(ast_manager & m, params_ref const & p = params_ref()):
|
||||
poly_rewriter<bv_rewriter_core>(m, p),
|
||||
|
@ -167,7 +179,9 @@ public:
|
|||
result = m().mk_app(f, num_args, args);
|
||||
}
|
||||
|
||||
bool is_urem_any(expr * e, expr * & dividend, expr * & divisor);
|
||||
br_status mk_eq_core(expr * lhs, expr * rhs, expr_ref & result);
|
||||
br_status mk_ite_core(expr * c, expr * t, expr * e, expr_ref & resul);
|
||||
|
||||
bool hi_div0() const { return m_hi_div0; }
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue