ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
propsearch.c
Go to the documentation of this file.
1#include "propsearch.h"
2#include "fastassign.h"
3#include "print.h"
4#include "trail.h"
5
7
8#define PROPAGATE_LITERAL search_propagate_literal
9#define PROPAGATION_TYPE "search"
10
11#include "proplit.h"
12
13static inline void
14update_search_propagation_statistics (kissat *solver,
15 const unsigned *saved_propagate) {
16 KISSAT_assert (saved_propagate <= solver->propagate);
17 const unsigned propagated = solver->propagate - saved_propagate;
18
19 LOG ("propagated %u literals", propagated);
20 LOG ("propagation took %" PRIu64 " ticks", solver->ticks);
21
22 ADD (propagations, propagated);
23 ADD (ticks, solver->ticks);
24
25 ADD (search_propagations, propagated);
26 ADD (search_ticks, solver->ticks);
27
28 if (solver->stable) {
29 ADD (stable_propagations, propagated);
30 ADD (stable_ticks, solver->ticks);
31 } else {
32 ADD (focused_propagations, propagated);
33 ADD (focused_ticks, solver->ticks);
34 }
35}
36
37static clause *search_propagate (kissat *solver) {
38 clause *res = 0;
39 unsigned *propagate = solver->propagate;
40 while (!res && propagate != END_ARRAY (solver->trail))
41 res = search_propagate_literal (solver, *propagate++);
42 solver->propagate = propagate;
43 return res;
44}
45
47 KISSAT_assert (!solver->probing);
48 KISSAT_assert (solver->watching);
49 KISSAT_assert (!solver->inconsistent);
50
51 START (propagate);
52
53 solver->ticks = 0;
54 const unsigned *saved_propagate = solver->propagate;
55 clause *conflict = search_propagate (solver);
56 update_search_propagation_statistics (solver, saved_propagate);
57 kissat_update_conflicts_and_trail (solver, conflict, true);
58 if (conflict && solver->randec) {
59 if (!--solver->randec)
60 kissat_very_verbose (solver, "last random decision conflict");
61 else if (solver->randec == 1)
63 "one more random decision conflict to go");
64 else
66 "%s more random decision conflicts to go",
67 FORMAT_COUNT (solver->randec));
68 }
69
70 STOP (propagate);
71
72 return conflict;
73}
74
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
#define END_ARRAY
Definition array.h:51
#define ADD(NAME, DELTA)
#define LOG(...)
#define FORMAT_COUNT(WORD)
Definition format.h:33
#define KISSAT_assert(ignore)
Definition global.h:13
#define solver
Definition kitten.c:211
#define kissat_very_verbose(...)
Definition print.h:52
#define STOP(P)
Definition profile.hpp:158
#define START(P)
Definition profile.hpp:150
clause * kissat_search_propagate(kissat *solver)
Definition propsearch.c:46