summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2018-02-15 17:34:54 -0600
committerGitHub <noreply@github.com>2018-02-15 17:34:54 -0600
commit98b9a45b8659e318bc529c223717f9f2fcd3b503 (patch)
treeff32335537cba701f0dd3f08cbed7fe880f25bc9
parent55037e0bcef45c795f28ff3fcf6c1055af465c70 (diff)
Fix corner case for rewrite of mult by pow 2 (#1601)
-rw-r--r--src/theory/bv/theory_bv_rewrite_rules_simplification.h9
-rw-r--r--test/regress/regress0/bv/Makefile.am3
-rw-r--r--test/regress/regress0/bv/mult-pow2-negative.smt25
3 files changed, 15 insertions, 2 deletions
diff --git a/src/theory/bv/theory_bv_rewrite_rules_simplification.h b/src/theory/bv/theory_bv_rewrite_rules_simplification.h
index 169b28e34..d91067d1e 100644
--- a/src/theory/bv/theory_bv_rewrite_rules_simplification.h
+++ b/src/theory/bv/theory_bv_rewrite_rules_simplification.h
@@ -808,6 +808,10 @@ inline Node RewriteRule<MultPow2>::apply(TNode node)
children.push_back(cn);
}
}
+ if (exponent >= size)
+ {
+ return utils::mkZero(size);
+ }
Node a;
if (children.empty())
@@ -823,7 +827,10 @@ inline Node RewriteRule<MultPow2>::apply(TNode node)
{
a = nm->mkNode(kind::BITVECTOR_NEG, a);
}
-
+ if (exponent == 0)
+ {
+ return a;
+ }
Node extract = utils::mkExtract(a, size - exponent - 1, 0);
Node zeros = utils::mkConst(exponent, 0);
return utils::mkConcat(extract, zeros);
diff --git a/test/regress/regress0/bv/Makefile.am b/test/regress/regress0/bv/Makefile.am
index 44691d1e2..eeeff7391 100644
--- a/test/regress/regress0/bv/Makefile.am
+++ b/test/regress/regress0/bv/Makefile.am
@@ -101,7 +101,8 @@ SMT_TESTS = \
divtest_2_6.smt2 \
mul-neg-unsat.smt2 \
mul-negpow2.smt2 \
- bvmul-pow2-only.smt2
+ bvmul-pow2-only.smt2 \
+ mult-pow2-negative.smt2
# Regression tests for PL inputs
CVC_TESTS = bvsimple.cvc sizecheck.cvc
diff --git a/test/regress/regress0/bv/mult-pow2-negative.smt2 b/test/regress/regress0/bv/mult-pow2-negative.smt2
new file mode 100644
index 000000000..2f1697dbf
--- /dev/null
+++ b/test/regress/regress0/bv/mult-pow2-negative.smt2
@@ -0,0 +1,5 @@
+(set-logic QF_BV)
+(set-info :status sat)
+(declare-fun x () (_ BitVec 4))
+(assert (not (= (bvmul (bvneg (bvmul #b1111 #b1111)) #b1111) x)))
+(check-sat)
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback