From 3062f8b2fd432127229e1d24fb37ebcde2317ca9 Mon Sep 17 00:00:00 2001 From: trevor_hansen Date: Sat, 30 Apr 2011 04:18:02 +0000 Subject: [PATCH] Extra simplification rules. git-svn-id: https://stp-fast-prover.svn.sourceforge.net/svnroot/stp-fast-prover/trunk/stp@1291 e59a4935-1847-0410-ae03-e826735625c1 --- src/AST/NodeFactory/SimplifyingNodeFactory.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/AST/NodeFactory/SimplifyingNodeFactory.cpp b/src/AST/NodeFactory/SimplifyingNodeFactory.cpp index ae33358..87df19f 100644 --- a/src/AST/NodeFactory/SimplifyingNodeFactory.cpp +++ b/src/AST/NodeFactory/SimplifyingNodeFactory.cpp @@ -130,6 +130,10 @@ ASTNode SimplifyingNodeFactory::CreateNode(Kind kind, const ASTVec & children) result = NodeFactory::CreateNode(BEEV::BVGT, children[0][0], children[1][0]); if (children[0].GetKind() ==BEEV::BVCONCAT && children[1].GetKind() == BEEV::BVCONCAT && children[0][0] == children[1][0]) result = NodeFactory::CreateNode(BEEV::BVGT, children[0][1], children[1][1]); + if (children[1].isConstant() && CONSTANTBV::BitVector_is_empty(children[1].GetBVConst())) + result = NodeFactory::CreateNode(BEEV::NOT, NodeFactory::CreateNode(BEEV::EQ, children[0], children[1])); + if (children[0].isConstant() && CONSTANTBV::BitVector_is_full(children[0].GetBVConst())) + result = NodeFactory::CreateNode(BEEV::NOT, NodeFactory::CreateNode(BEEV::EQ, children[0], children[1])); break; @@ -769,7 +773,8 @@ ASTNode SimplifyingNodeFactory::CreateTerm(Kind kind, unsigned int width, result = NodeFactory::CreateTerm(BEEV::ITE, width, children[0], children[1], children[2][2]); else if (children[1].GetKind() == BEEV::ITE && (children[1][0] == children[0])) result = NodeFactory::CreateTerm(BEEV::ITE, width, children[0], children[1][1], children[2]); - + else if (children[0].GetKind() == BEEV::NOT) + result = NodeFactory::CreateTerm(BEEV::ITE, width, children[0][0], children[2], children[1]); break; } @@ -1015,7 +1020,7 @@ ASTNode SimplifyingNodeFactory::CreateTerm(Kind kind, unsigned int width, result = bm.CreateZeroConst(width); else if (children[0].GetKind() == BEEV::BVUMINUS && children[1] == children[0][0]) result = bm.CreateZeroConst(width); - /* This is ridiculously complicated, it should be cleaner. + // This is ridiculously complicated, it should be cleaner. else if (children[1].GetKind() == BEEV::BVPLUS && children[1][1].GetKind() == BEEV::BVUMINUS && children[0] == children[1][1][0]) result = children[1][0]; else if (children[1].GetKind() == BEEV::BVPLUS && children[1][0].GetKind() == BEEV::BVUMINUS && children[0] == children[1][0][0]) @@ -1024,8 +1029,6 @@ ASTNode SimplifyingNodeFactory::CreateTerm(Kind kind, unsigned int width, result = children[0][1]; else if (children[0].GetKind() == BEEV::BVPLUS && children[0][1].GetKind() == BEEV::BVUMINUS && children[1] == children[0][1][0]) result = children[0][0]; - */ - } break; -- 2.47.3