summaryrefslogtreecommitdiff
path: root/src/theory/bv
diff options
context:
space:
mode:
authorClark Barrett <barrett@cs.nyu.edu>2012-06-11 17:31:13 +0000
committerClark Barrett <barrett@cs.nyu.edu>2012-06-11 17:31:13 +0000
commita982d0ab03118e31c40052c9beae6ffaec5318aa (patch)
treea78b60a95353ae1d536ec191bb3bb6533f405564 /src/theory/bv
parent74a3cbc108cda7f33c6d4db03fcec8a6a84fc6f5 (diff)
OK, now the rewrite issues are fixed
Diffstat (limited to 'src/theory/bv')
-rw-r--r--src/theory/bv/theory_bv_rewrite_rules_normalization.h8
-rw-r--r--src/theory/bv/theory_bv_rewriter.cpp14
2 files changed, 15 insertions, 7 deletions
diff --git a/src/theory/bv/theory_bv_rewrite_rules_normalization.h b/src/theory/bv/theory_bv_rewrite_rules_normalization.h
index f5577e2ed..6ac9da7cb 100644
--- a/src/theory/bv/theory_bv_rewrite_rules_normalization.h
+++ b/src/theory/bv/theory_bv_rewrite_rules_normalization.h
@@ -300,10 +300,10 @@ Node RewriteRule<MultSimplify>::apply(TNode node) {
TNode current = node[i];
if (current.getKind() == kind::CONST_BITVECTOR) {
BitVector value = current.getConst<BitVector>();
- if(value == BitVector(size, (unsigned) 0)) {
+ constant = constant * value;
+ if(constant == BitVector(size, (unsigned) 0)) {
return utils::mkConst(size, 0);
}
- constant = constant * current.getConst<BitVector>();
} else {
children.push_back(current);
}
@@ -543,8 +543,8 @@ Node RewriteRule<SolveEq>::apply(TNode node) {
newRight = utils::mkSortedNode(kind::BITVECTOR_PLUS, childrenRight);
}
- Assert(newLeft == Rewriter::rewrite(newLeft));
- Assert(newRight == Rewriter::rewrite(newRight));
+ // Assert(newLeft == Rewriter::rewrite(newLeft));
+ // Assert(newRight == Rewriter::rewrite(newRight));
if (newLeft == newRight) {
Assert (newLeft == utils::mkConst(size, (unsigned)0));
diff --git a/src/theory/bv/theory_bv_rewriter.cpp b/src/theory/bv/theory_bv_rewriter.cpp
index 85ccbc787..25cbae68c 100644
--- a/src/theory/bv/theory_bv_rewriter.cpp
+++ b/src/theory/bv/theory_bv_rewriter.cpp
@@ -525,13 +525,21 @@ RewriteResponse TheoryBVRewriter::RewriteEqual(TNode node, bool preregister) {
Node resultNode = LinearRewriteStrategy
< RewriteRule<FailEq>,
RewriteRule<SimplifyEq>,
- RewriteRule<ReflexivityEq>,
- RewriteRule<SolveEq>
+ RewriteRule<ReflexivityEq>
>::apply(node);
+ if(RewriteRule<SolveEq>::applies(resultNode)) {
+ resultNode = RewriteRule<SolveEq>::run<false>(resultNode);
+ if (resultNode != node) {
+ return RewriteResponse(REWRITE_AGAIN_FULL, resultNode);
+ }
+ }
+
if(RewriteRule<BitwiseEq>::applies(resultNode)) {
resultNode = RewriteRule<BitwiseEq>::run<false>(resultNode);
- return RewriteResponse(REWRITE_AGAIN_FULL, resultNode);
+ if (resultNode != node) {
+ return RewriteResponse(REWRITE_AGAIN_FULL, resultNode);
+ }
}
return RewriteResponse(REWRITE_DONE, resultNode);
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback