From: trevor_hansen Date: Sat, 30 Apr 2011 12:28:07 +0000 (+0000) Subject: Important Bugfix. The prior checkin sometimes, but rarely, returned the wrong result. X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=211828e0a9b59fda4e56c074cc7605ffab31c734;p=francis%2Fstp.git Important Bugfix. The prior checkin sometimes, but rarely, returned the wrong result. git-svn-id: https://stp-fast-prover.svn.sourceforge.net/svnroot/stp-fast-prover/trunk/stp@1294 e59a4935-1847-0410-ae03-e826735625c1 --- diff --git a/src/AST/NodeFactory/SimplifyingNodeFactory.cpp b/src/AST/NodeFactory/SimplifyingNodeFactory.cpp index df3e578..c72532d 100644 --- a/src/AST/NodeFactory/SimplifyingNodeFactory.cpp +++ b/src/AST/NodeFactory/SimplifyingNodeFactory.cpp @@ -786,13 +786,10 @@ ASTNode SimplifyingNodeFactory::CreateTerm(Kind kind, unsigned int width, 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]); -/* - else if (children[0].GetKind() ==BEEV::EQ && children[0][1] == children[1]) + else if (children[0].GetKind() ==BEEV::EQ && children[0][1] == children[1] && children[0][0].GetKind() == BEEV::BVCONST) result = NodeFactory::CreateTerm(BEEV::ITE, width, children[0], children[0][0], children[2]); - else if (children[0].GetKind() == BEEV::EQ && children[0][0] == children[1]) + else if (children[0].GetKind() == BEEV::EQ && children[0][0] == children[1] && children[0][1].GetKind() == BEEV::BVCONST) result = NodeFactory::CreateTerm(BEEV::ITE, width, children[0], children[0][1], children[2]); -*/ - break; } @@ -1039,13 +1036,13 @@ ASTNode SimplifyingNodeFactory::CreateTerm(Kind kind, unsigned int 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. - else if (children[1].GetKind() == BEEV::BVPLUS && children[1][1].GetKind() == BEEV::BVUMINUS && children[0] == children[1][1][0]) + else if (children[1].GetKind() == BEEV::BVPLUS && children[1][1].GetKind() == BEEV::BVUMINUS && children[0] == children[1][1][0] && children[1].Degree() ==2 ) result = children[1][0]; - else if (children[1].GetKind() == BEEV::BVPLUS && children[1][0].GetKind() == BEEV::BVUMINUS && children[0] == children[1][0][0]) + else if (children[1].GetKind() == BEEV::BVPLUS && children[1][0].GetKind() == BEEV::BVUMINUS && children[0] == children[1][0][0] && children[1].Degree() ==2 ) result = children[1][1]; - else if (children[0].GetKind() == BEEV::BVPLUS && children[0][0].GetKind() == BEEV::BVUMINUS && children[1] == children[0][0][0]) + else if (children[0].GetKind() == BEEV::BVPLUS && children[0][0].GetKind() == BEEV::BVUMINUS && children[1] == children[0][0][0] && children[1].Degree() ==2 ) result = children[0][1]; - else if (children[0].GetKind() == BEEV::BVPLUS && children[0][1].GetKind() == BEEV::BVUMINUS && children[1] == children[0][1][0]) + else if (children[0].GetKind() == BEEV::BVPLUS && children[0][1].GetKind() == BEEV::BVUMINUS && children[1] == children[0][1][0] && children[1].Degree() ==2 ) result = children[0][0]; } break;