TransformMap = new ASTNodeMap(100);
ASTNode result = TransformFormula(form);
-#ifndef NDEBUG
+#if 0
{
ASTNodeSet visited;
assertTransformPostConditions(result,visited);
if (bm->UserFlags.stats_flag)
printArrayStats();
-
// This establishes equalities between every indexes, and a fresh variable.
if (!bm->UserFlags.ackermannisation)
{
const Kind k = term.GetKind();
- // Check the signed operations have been removed.
- assert( SBVDIV != k);
- assert( SBVMOD != k);
- assert( SBVREM !=k);
-
// Check the array reads / writes have been removed
assert( READ !=k );
assert( WRITE !=k);
}
else
result = term;
-
- if (SBVDIV == result.GetKind()
- || SBVREM == result.GetKind()
- || SBVMOD == result.GetKind())
- {
- ASTNode r = TranslateSignedDivModRem(result,nf,bm);
- if (r != result && bm->UserFlags.optimize_flag)
- {
- result = simp->SimplifyTerm_TopLevel(r);
- }
- else
- result = r;
- }
}
break;
}
static bool debug_simplifyingNodeFactory = false;
-static const bool translate_signed = true;
-
ASTNode
SimplifyingNodeFactory::CreateNode(Kind kind, const ASTVec & children)
{
result = bm.CreateZeroConst(width);
else if (children[1].GetKind() == BVUMINUS && children[1][0] == children[0])
result = bm.CreateZeroConst(width);
- else if (translate_signed)
- result = BEEV::ArrayTransformer::TranslateSignedDivModRem(hashing.CreateTerm(kind, width, children), this, &bm);
break;
case BEEV::BVDIV:
bm.CreateOneConst(width), bm.CreateZeroConst(width));
if (children[1].isConstant() && CONSTANTBV::BitVector_is_full(children[1].GetBVConst()))
result = NodeFactory::CreateTerm(BVUMINUS, width, children[0]);
- else if (translate_signed)
- result = BEEV::ArrayTransformer::TranslateSignedDivModRem(hashing.CreateTerm(kind, width, children), this, &bm);
break;
case SBVREM:
result = NodeFactory::CreateTerm(SBVREM, width, children[0], children[1][0]);
else if (children[0].GetKind() == BVUMINUS && children[0][0] == children[1])
result = bm.CreateZeroConst(width);
- else if (translate_signed)
- result = BEEV::ArrayTransformer::TranslateSignedDivModRem(hashing.CreateTerm(kind, width, children), this, &bm);
break;
case BEEV::BVMOD:
result = bvSignedRemainderBothWays(children, output, n.GetSTPMgr());
mult_like=true;
}
-
- // This propagator is very slow. It needs to be reimplemented.
- #if 0
else if (k == SBVMOD)
{
- result = bvSignedModulusBothWays(children, output, n.GetSTPMgr());
+ // This propagator is very slow. It needs to be reimplemented.
+ //result = bvSignedModulusBothWays(children, output, n.GetSTPMgr());
mult_like=true;
}
- #endif
else
#include "../simplifier/constantBitP/ConstantBitPropagation.h"
#include "../simplifier/constantBitP/NodeToFixedBitsMap.h"
#include "../simplifier/simplifier.h"
+#include "../AST/ArrayTransformer.h"
namespace BEEV
{
if (n.isConstant())
{
+ // This doesn't hold any longer because we convert BVSDIV and friends to ASTNodes.
+#if 0
simplifier::constantBitP::NodeToFixedBitsMap::NodeToFixedBitsMapType::const_iterator it;
it = cb->fixedMap->map->find(n);
if (it == cb->fixedMap->map->end())
cerr << n;
assert(it != cb->fixedMap->map->end());
}assert(it->second->isTotallyFixed());
+#endif
return;
}
result = BBMult(mpcd1, mpcd2, support, term);
break;
}
+ case SBVREM:
+ case SBVMOD:
+ case SBVDIV:
+ {
+ ASTNode p = ArrayTransformer::TranslateSignedDivModRem(term,ASTNF,term.GetSTPMgr());
+ result = BBTerm(p,support);
+ break;
+ }
+
case BVDIV:
case BVMOD:
{