summaryrefslogtreecommitdiff
path: root/src/prop/bvminisat/simp/SimpSolver.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/prop/bvminisat/simp/SimpSolver.cc')
-rw-r--r--src/prop/bvminisat/simp/SimpSolver.cc19
1 files changed, 7 insertions, 12 deletions
diff --git a/src/prop/bvminisat/simp/SimpSolver.cc b/src/prop/bvminisat/simp/SimpSolver.cc
index 903ffa270..c8ce13410 100644
--- a/src/prop/bvminisat/simp/SimpSolver.cc
+++ b/src/prop/bvminisat/simp/SimpSolver.cc
@@ -32,7 +32,7 @@ static const char* _cat = "SIMP";
static BoolOption opt_use_asymm (_cat, "asymm", "Shrink clauses by asymmetric branching.", false);
static BoolOption opt_use_rcheck (_cat, "rcheck", "Check if a clause is already implied. (costly)", false);
-static BoolOption opt_use_elim (_cat, "elim", "Perform variable elimination.", true);
+static BoolOption opt_use_elim (_cat, "elim", "Perform variable elimination.", false);
static IntOption opt_grow (_cat, "grow", "Allow a variable elimination step to grow by a number of clauses.", 0);
static IntOption opt_clause_lim (_cat, "cl-lim", "Variables are not eliminated if it produces a resolvent with a length above this limit. -1 means no limit", 20, IntRange(-1, INT32_MAX));
static IntOption opt_subsumption_lim (_cat, "sub-lim", "Do not check if subsumption against a clause larger than this. -1 means no limit.", 1000, IntRange(-1, INT32_MAX));
@@ -100,20 +100,14 @@ Var SimpSolver::newVar(bool sign, bool dvar, bool freeze) {
lbool SimpSolver::solve_(bool do_simp, bool turn_off_simp)
{
- vec<Lit> atom_propagations_backup;
- atom_propagations.moveTo(atom_propagations_backup);
- vec<int> atom_propagations_lim_backup;
- atom_propagations_lim.moveTo(atom_propagations_lim_backup);
-
only_bcp = false;
- cancelUntil(0);
vec<Var> extra_frozen;
lbool result = l_True;
do_simp &= use_simplification;
- if (do_simp){
+ if (do_simp) {
// Assumptions must be temporarily frozen to run variable elimination:
for (int i = 0; i < assumptions.size(); i++){
Var v = var(assumptions[i]);
@@ -127,7 +121,11 @@ lbool SimpSolver::solve_(bool do_simp, bool turn_off_simp)
extra_frozen.push(v);
} }
- result = lbool(eliminate(turn_off_simp));
+ if (do_simp && clause_added) {
+ cancelUntil(0);
+ result = lbool(eliminate(turn_off_simp));
+ clause_added = false;
+ }
}
if (result == l_True)
@@ -135,9 +133,6 @@ lbool SimpSolver::solve_(bool do_simp, bool turn_off_simp)
else if (verbosity >= 1)
printf("===============================================================================\n");
- atom_propagations_backup.moveTo(atom_propagations);
- atom_propagations_lim_backup.moveTo(atom_propagations_lim);
-
if (do_simp)
// Unfreeze the assumptions that were frozen:
for (int i = 0; i < extra_frozen.size(); i++)
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback