} //End of TopLevelSTP()
ASTNode
- STP::callSizeReducing(ASTNode simplified_solved_InputToSAT, BVSolver* bvSolver, const int initial_difficulty_score)
+ STP::callSizeReducing(ASTNode simplified_solved_InputToSAT, BVSolver* bvSolver, PropagateEqualities *pe, const int initial_difficulty_score)
{
while (true)
{
ASTNode last = simplified_solved_InputToSAT;
- simplified_solved_InputToSAT = sizeReducing(last, bvSolver);
+ simplified_solved_InputToSAT = sizeReducing(last, bvSolver,pe);
if (last == simplified_solved_InputToSAT)
break;
}
// These transformations should never increase the size of the DAG.
ASTNode
- STP::sizeReducing(ASTNode simplified_solved_InputToSAT, BVSolver* bvSolver)
+ STP::sizeReducing(ASTNode simplified_solved_InputToSAT, BVSolver* bvSolver, PropagateEqualities *pe)
{
- simplified_solved_InputToSAT = simp->topLevel(simplified_solved_InputToSAT, arrayTransformer);
+ simplified_solved_InputToSAT = pe->topLevel(simplified_solved_InputToSAT, arrayTransformer);
if (simp->hasUnappliedSubstitutions())
{
simplified_solved_InputToSAT = simp->applySubstitutionMap(simplified_solved_InputToSAT);
simp->haveAppliedSubstitutionMap();
- bm->ASTNodeStats("After Propagating Equalities: ", simplified_solved_InputToSAT);
+ bm->ASTNodeStats(pe->message.c_str(), simplified_solved_InputToSAT);
}
if (bm->UserFlags.isSet("enable-unconstrained", "1"))
// A heap object so I can easily control its lifetime.
BVSolver* bvSolver = new BVSolver(bm, simp);
+ PropagateEqualities * pe = new PropagateEqualities(simp,bm->defaultNodeFactory,bm);
ASTNode simplified_solved_InputToSAT = original_input;
assert(!arrayops);
// Run size reducing just once.
- simplified_solved_InputToSAT = sizeReducing(simplified_solved_InputToSAT, bvSolver);
+ simplified_solved_InputToSAT = sizeReducing(simplified_solved_InputToSAT, bvSolver,pe);
unsigned initial_difficulty_score = difficulty.score(simplified_solved_InputToSAT);
// Currently we discards all the state each time sizeReducing is called,
// so it's expensive to call.
if (!arrayops && initial_difficulty_score < 1000000)
- simplified_solved_InputToSAT = callSizeReducing(simplified_solved_InputToSAT, bvSolver, initial_difficulty_score);
+ simplified_solved_InputToSAT = callSizeReducing(simplified_solved_InputToSAT, bvSolver,pe, initial_difficulty_score);
if ((!arrayops || bm->UserFlags.isSet("array-difficulty-reversion", "1")))
{
if (bm->UserFlags.optimize_flag)
{
- simplified_solved_InputToSAT = simp->topLevel(simplified_solved_InputToSAT, arrayTransformer);
+ simplified_solved_InputToSAT = pe->topLevel(simplified_solved_InputToSAT, arrayTransformer);
// Imagine:
// The simplifier simplifies (0 + T) to T
simp->haveAppliedSubstitutionMap();
}
- bm->ASTNodeStats("after pure substitution: ", simplified_solved_InputToSAT);
+ bm->ASTNodeStats(pe->message.c_str(), simplified_solved_InputToSAT);
simplified_solved_InputToSAT = simp->SimplifyFormula_TopLevel(simplified_solved_InputToSAT, false);
if (bm->UserFlags.optimize_flag)
{
- simplified_solved_InputToSAT = simp->topLevel(simplified_solved_InputToSAT, arrayTransformer);
+ simplified_solved_InputToSAT = pe->topLevel(simplified_solved_InputToSAT, arrayTransformer);
if (simp->hasUnappliedSubstitutions())
{
simp->haveAppliedSubstitutionMap();
}
- bm->ASTNodeStats("after pure substitution: ", simplified_solved_InputToSAT);
+ bm->ASTNodeStats(pe->message.c_str(), simplified_solved_InputToSAT);
simplified_solved_InputToSAT = simp->SimplifyFormula_TopLevel(simplified_solved_InputToSAT, false);
bm->ASTNodeStats("after simplification: ", simplified_solved_InputToSAT);
// Deleting it clears out all the buckets associated with hashmaps etc. too.
delete bvSolver;
bvSolver = NULL;
+ delete pe;
+ pe = NULL;
if (bm->UserFlags.stats_flag)
simp->printCacheStatus();
#include "../to-sat/ASTNode/ToSAT.h"
#include "../parser/LetMgr.h"
#include "../absrefine_counterexample/AbsRefine_CounterExample.h"
+#include "../simplifier/PropagateEqualities.h"
namespace BEEV
{
ArrayTransformer * arrayTransformer;
- ASTNode sizeReducing(ASTNode input, BVSolver* bvSolver);
+ ASTNode sizeReducing(ASTNode input, BVSolver* bvSolver, PropagateEqualities *pe);
// A copy of all the state we need to restore to a prior expression.
struct Revert_to
public:
// calls sizeReducing and the bitblasting simplification.
- ASTNode callSizeReducing(ASTNode simplified_solved_InputToSAT, BVSolver* bvSolver, const int initial_difficulty_score);
+ ASTNode callSizeReducing(ASTNode simplified_solved_InputToSAT, BVSolver* bvSolver, PropagateEqualities *pe, const int initial_difficulty_score);
/****************************************************************
#include "../STPManager/STPManager.h"
#include "../AST/NodeFactory/SimplifyingNodeFactory.h"
#include "VariablesInExpression.h"
-#include "PropagateEqualities.h"
namespace BEEV {
STPMgr* bm;
ASTNode ASTTrue, ASTFalse, ASTUndefined;
NodeFactory *nf;
- PropagateEqualities *pe;
// These are used to avoid substituting {x = f(y,z), z = f(x)}
typedef hash_map<ASTNode, Symbols*,ASTNode::ASTNodeHasher> DependsType;
loopCount = 0;
substitutionsLastApplied =0;
nf = new SimplifyingNodeFactory (*bm->hashingNodeFactory, *bm);
- pe = new PropagateEqualities(_simp, nf, bm);
}
void clear()
{
SolverMap->clear();
haveAppliedSubstitutionMap();
- pe->alreadyVisited.clear();
}
virtual ~SubstitutionMap();
return false;
}
- ASTNode propagate(const ASTNode& a, ArrayTransformer*at);
-
ASTNode applySubstitutionMap(const ASTNode& n);
ASTNode applySubstitutionMapUntilArrays(const ASTNode& n);