Skip to content

Commit 45a5e28

Browse files
committed
satcheck minisat2: make all solver hardness processing conditional
There is no need to run process_clause when its output wouldn't even be used.
1 parent a0dbf74 commit 45a5e28

File tree

3 files changed

+17
-15
lines changed

3 files changed

+17
-15
lines changed

src/solvers/sat/cnf.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ bvt cnft::eliminate_duplicates(const bvt &bv)
413413

414414
/// filter 'true' from clause, eliminate duplicates, recognise trivially
415415
/// satisfied clauses
416-
bool cnft::process_clause(const bvt &bv, bvt &dest)
416+
bool cnft::process_clause(const bvt &bv, bvt &dest) const
417417
{
418418
dest.clear();
419419

src/solvers/sat/cnf.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class cnft:public propt
5555

5656
size_t _no_variables;
5757

58-
bool process_clause(const bvt &bv, bvt &dest);
58+
bool process_clause(const bvt &bv, bvt &dest) const;
5959

6060
static bool is_all(const bvt &bv, literalt l)
6161
{

src/solvers/sat/satcheck_minisat2.cpp

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -140,22 +140,24 @@ void satcheck_minisat2_baset<T>::lcnf(const bvt &bv)
140140

141141
solver->addClause_(c);
142142

143-
// To map clauses to lines of program code, track clause indices in the
144-
// dimacs cnf output. Dimacs output is generated after processing clauses
145-
// to remove duplicates and clauses that are trivially true. Here, a clause
146-
// is checked to see if it can be thus eliminated. If not, add the clause
147-
// index to list of clauses in solver_hardnesst::register_clause().
148-
static size_t cnf_clause_index = 0;
149-
bvt cnf;
150-
bool clause_removed = process_clause(bv, cnf);
151-
152-
if(!clause_removed)
153-
cnf_clause_index++;
154-
155143
with_solver_hardness(
156-
[&bv, &cnf, &clause_removed](solver_hardnesst &hardness) {
144+
[this, &bv](solver_hardnesst &hardness) {
145+
// To map clauses to lines of program code, track clause indices in the
146+
// dimacs cnf output. Dimacs output is generated after processing
147+
// clauses to remove duplicates and clauses that are trivially true.
148+
// Here, a clause is checked to see if it can be thus eliminated. If
149+
// not, add the clause index to list of clauses in
150+
// solver_hardnesst::register_clause().
151+
static size_t cnf_clause_index = 0;
152+
bvt cnf;
153+
bool clause_removed = process_clause(bv, cnf);
154+
155+
if(!clause_removed)
156+
cnf_clause_index++;
157+
157158
hardness.register_clause(bv, cnf, cnf_clause_index, !clause_removed);
158159
});
160+
159161
clause_counter++;
160162
}
161163
catch(const Minisat::OutOfMemoryException &)

0 commit comments

Comments
 (0)