summaryrefslogtreecommitdiff
path: root/src/theory/bv/theory_bv.cpp
diff options
context:
space:
mode:
authorlianah <lianahady@gmail.com>2014-06-14 16:13:46 -0400
committerlianah <lianahady@gmail.com>2014-06-14 16:13:46 -0400
commitcd648c6f25a1d85abd9d677849de8af02de13d5b (patch)
tree88bbe661530308af63ce2eae39b2f9043965e582 /src/theory/bv/theory_bv.cpp
parent61e3aa5a2483aeb02ec76380725f842471451927 (diff)
more bv rewrites
Diffstat (limited to 'src/theory/bv/theory_bv.cpp')
-rw-r--r--src/theory/bv/theory_bv.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/theory/bv/theory_bv.cpp b/src/theory/bv/theory_bv.cpp
index 441577c9e..04b8e9d6e 100644
--- a/src/theory/bv/theory_bv.cpp
+++ b/src/theory/bv/theory_bv.cpp
@@ -562,6 +562,26 @@ Node TheoryBV::ppRewrite(TNode t)
res = Rewriter::rewrite(result);
}
+ if( res.getKind() == kind::EQUAL &&
+ ((res[0].getKind() == kind::BITVECTOR_PLUS &&
+ RewriteRule<ConcatToMult>::applies(res[1])) ||
+ res[1].getKind() == kind::BITVECTOR_PLUS &&
+ RewriteRule<ConcatToMult>::applies(res[0]))) {
+ Node mult = RewriteRule<ConcatToMult>::applies(res[0])?
+ RewriteRule<ConcatToMult>::run<false>(res[0]) :
+ RewriteRule<ConcatToMult>::run<true>(res[1]);
+ Node factor = mult[0];
+ Node sum = RewriteRule<ConcatToMult>::applies(res[0])? res[1] : res[0];
+ Node new_eq =utils::mkNode(kind::EQUAL, sum, mult);
+ Node rewr_eq = RewriteRule<SolveEq>::run<true>(new_eq);
+ if (rewr_eq[0].isVar() || rewr_eq[1].isVar()){
+ res = Rewriter::rewrite(rewr_eq);
+ } else {
+ res = t;
+ }
+ }
+
+
// if(t.getKind() == kind::EQUAL &&
// ((t[0].getKind() == kind::BITVECTOR_MULT && t[1].getKind() == kind::BITVECTOR_PLUS) ||
// (t[1].getKind() == kind::BITVECTOR_MULT && t[0].getKind() == kind::BITVECTOR_PLUS))) {
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback