]> git.unchartedbackwaters.co.uk Git - francis/stp.git/commitdiff
Extra simplification rules.
authortrevor_hansen <trevor_hansen@e59a4935-1847-0410-ae03-e826735625c1>
Sat, 30 Apr 2011 04:18:02 +0000 (04:18 +0000)
committertrevor_hansen <trevor_hansen@e59a4935-1847-0410-ae03-e826735625c1>
Sat, 30 Apr 2011 04:18:02 +0000 (04:18 +0000)
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

index ae33358540404fd329b9a3b0162aa53df0410c61..87df19f2d5e43dad5501433d951f483f6665ce51 100644 (file)
@@ -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;