From 9b035b4aedd977213a5f5acb6e8cb01bf160c415 Mon Sep 17 00:00:00 2001 From: Liana Hadarean Date: Mon, 6 May 2013 21:46:30 -0400 Subject: [PATCH] fixed bv rewrite rule bug --- src/theory/bv/theory_bv_rewriter.cpp | 70 ++++++++++++++-------------- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/src/theory/bv/theory_bv_rewriter.cpp b/src/theory/bv/theory_bv_rewriter.cpp index 7844e5b92..9c072444d 100644 --- a/src/theory/bv/theory_bv_rewriter.cpp +++ b/src/theory/bv/theory_bv_rewriter.cpp @@ -222,15 +222,16 @@ RewriteResponse TheoryBVRewriter::RewriteConcat(TNode node, bool preregister) { RewriteResponse TheoryBVRewriter::RewriteAnd(TNode node, bool preregister){ Node resultNode = node; - - resultNode = LinearRewriteStrategy - < RewriteRule, - RewriteRule, - RewriteRule - >::apply(node); + if (!preregister) { + resultNode = LinearRewriteStrategy + < RewriteRule, + RewriteRule, + RewriteRule + >::apply(node); - if (resultNode.getKind() != node.getKind()) { - return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); + if (resultNode.getKind() != node.getKind()) { + return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); + } } return RewriteResponse(REWRITE_DONE, resultNode); @@ -238,39 +239,40 @@ RewriteResponse TheoryBVRewriter::RewriteAnd(TNode node, bool preregister){ RewriteResponse TheoryBVRewriter::RewriteOr(TNode node, bool preregister){ Node resultNode = node; + if (! preregister) { + resultNode = LinearRewriteStrategy + < RewriteRule, + RewriteRule, + RewriteRule + >::apply(node); - resultNode = LinearRewriteStrategy - < RewriteRule, - RewriteRule, - RewriteRule - >::apply(node); - - if (resultNode.getKind() != node.getKind()) { - return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); + if (resultNode.getKind() != node.getKind()) { + return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); + } } - return RewriteResponse(REWRITE_DONE, resultNode); } RewriteResponse TheoryBVRewriter::RewriteXor(TNode node, bool preregister) { Node resultNode = node; - - resultNode = LinearRewriteStrategy - < RewriteRule, // flatten the expression - RewriteRule, // simplify duplicates and constants - RewriteRule, // checks if the constant part is zero and eliminates it - RewriteRule - >::apply(node); - - // this simplification introduces new terms and might require further - // rewriting - if (RewriteRule::applies(resultNode)) { - resultNode = RewriteRule::run (resultNode); - return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); - } - - if (resultNode.getKind() != node.getKind()) { - return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); + if (! preregister) { + resultNode = LinearRewriteStrategy + < RewriteRule, // flatten the expression + RewriteRule, // simplify duplicates and constants + RewriteRule, // checks if the constant part is zero and eliminates it + RewriteRule + >::apply(node); + + // this simplification introduces new terms and might require further + // rewriting + if (RewriteRule::applies(resultNode)) { + resultNode = RewriteRule::run (resultNode); + return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); + } + + if (resultNode.getKind() != node.getKind()) { + return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); + } } return RewriteResponse(REWRITE_DONE, resultNode); -- 2.30.2