ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
proprobe.c
Go to the documentation of this file.
1#include "proprobe.h"
2#include "fastassign.h"
3#include "trail.h"
4
6
7#define PROPAGATE_LITERAL probing_propagate_literal
8#define PROPAGATION_TYPE "probing"
9#define PROBING_PROPAGATION
10
11#include "proplit.h"
12
13static void update_probing_propagation_statistics (kissat *solver,
14 unsigned propagated) {
15 const uint64_t ticks = solver->ticks;
16 LOG (PROPAGATION_TYPE " propagation took %u propagations", propagated);
17 LOG (PROPAGATION_TYPE " propagation took %" PRIu64 " ticks", ticks);
18
19 ADD (propagations, propagated);
20 ADD (probing_propagations, propagated);
21
22#if defined(METRICS)
23 if (solver->backbone_computing) {
24 ADD (backbone_propagations, propagated);
25 ADD (backbone_ticks, ticks);
26 }
27 if (solver->vivifying) {
28 ADD (vivify_propagations, propagated);
29 ADD (vivify_ticks, ticks);
30 }
31#endif
32
33 ADD (probing_ticks, ticks);
34 ADD (ticks, ticks);
35}
36
38 bool flush) {
39 KISSAT_assert (solver->probing);
40 KISSAT_assert (solver->watching);
41 KISSAT_assert (!solver->inconsistent);
42
43 START (propagate);
44
45 clause *conflict = 0;
46 unsigned *propagate = solver->propagate;
47 solver->ticks = 0;
48 while (!conflict && propagate != END_ARRAY (solver->trail)) {
49 const unsigned lit = *propagate++;
50 conflict = probing_propagate_literal (solver, ignore, lit);
51 }
52
53 const unsigned propagated = propagate - solver->propagate;
54 solver->propagate = propagate;
55 update_probing_propagation_statistics (solver, propagated);
56 kissat_update_conflicts_and_trail (solver, conflict, flush);
57
58 STOP (propagate);
59
60 return conflict;
61}
62
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
#define END_ARRAY
Definition array.h:51
#define ADD(NAME, DELTA)
#define LOG(...)
#define KISSAT_assert(ignore)
Definition global.h:13
#define solver
Definition kitten.c:211
#define STOP(P)
Definition profile.hpp:158
#define START(P)
Definition profile.hpp:150
#define PROPAGATION_TYPE
Definition propbeyond.c:9
clause * kissat_probing_propagate(kissat *solver, clause *ignore, bool flush)
Definition proprobe.c:37
int lit
Definition satVec.h:130