19 LOG (
"flushing large watches");
21 LOG (
"flushing and saving irredundant binary clauses too");
23 LOG (
"keep watching irredundant binary clauses");
31 size_t flushed = 0, collected = 0;
33 size_t deduplicated = 0;
36 unsigneds *marked = &
solver->analyzed;
43 while (
p != end_watches) {
47 const value other_value = values[other];
48 if (!lit_value && !other_value) {
85 for (
all_stack (
unsigned, other, *marked))
90 LOG (
"flushed %zu large watches", flushed);
91 LOG (
"removed %zu duplicated binary clauses", deduplicated);
92 LOG (
"collected %zu satisfied binary clauses", collected);
105 LOG (
"entering dense mode with full occurrence lists");
110 LOG (
"switched to full occurrence lists");
114static void resume_watching_irredundant_binaries (
kissat *
solver,
115 litpairs *binaries) {
118 size_t resumed_watching = 0;
128 watches *first_watches = all_watches + first;
129 watch first_watch = kissat_binary_watch (second);
132 watches *second_watches = all_watches + second;
133 watch second_watch = kissat_binary_watch (first);
140 LOG (
"resumed watching %zu binary clauses", resumed_watching);
144resume_watching_large_clauses_after_elimination (
kissat *
solver) {
146 size_t resumed_watching_redundant = 0;
147 size_t resumed_watching_irredundant = 0;
158 bool collect =
false;
160 if (values[
lit] > 0) {
165 const unsigned idx =
IDX (
lit);
166 if (
flags[idx].eliminated) {
179 unsigned *lits = c->lits;
184 const unsigned l0 = lits[0];
185 const unsigned l1 = lits[1];
192 resumed_watching_redundant++;
194 resumed_watching_irredundant++;
197 LOG (
"resumed watching %zu irredundant and %zu redundant large clauses",
198 resumed_watching_irredundant, resumed_watching_redundant);
207 LOG (
"resuming sparse mode watching clauses");
209 LOG (
"switched to watching clauses");
212 LOG (
"resuming watching %zu irredundant binaries",
216 if (flush_eliminated)
217 resume_watching_large_clauses_after_elimination (
solver);
220 LOG (
"forcing to propagate units on all clauses");
221 kissat_reset_propagate (
solver);
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
ABC_NAMESPACE_HEADER_START typedef word ward
#define all_stack(T, E, S)
ABC_NAMESPACE_IMPL_START typedef signed char value
void kissat_mark_clause_as_garbage(kissat *solver, clause *c)
void kissat_delete_binary(kissat *solver, unsigned a, unsigned b)
void kissat_enter_dense_mode(kissat *solver, litpairs *irredundant)
void kissat_resume_sparse_mode(kissat *solver, bool flush_eliminated, litpairs *irredundant)
#define all_literals(LIT)
void kissat_sort_literals(struct kissat *, unsigned size, unsigned *lits)
#define all_literals_in_clause(LIT, C)
#define KISSAT_assert(ignore)
clause * kissat_probing_propagate(kissat *solver, clause *ignore, bool flush)
clause * kissat_search_propagate(kissat *solver)
ABC_NAMESPACE_HEADER_START typedef unsigned reference
void kissat_release_vectors(kissat *solver)
void kissat_watch_large_clauses(kissat *solver)
void kissat_flush_large_watches(kissat *solver)
void kissat_flush_large_connected(kissat *solver)
#define BEGIN_WATCHES(WS)
#define PUSH_WATCHES(W, E)
#define SET_END_OF_WATCHES(WS, P)