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;
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;
}
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])
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;