ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
sweep.h File Reference
#include <stdbool.h>
#include "global.h"
Include dependency graph for sweep.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

bool kissat_sweep (struct kissat *)
 

Function Documentation

◆ kissat_sweep()

bool kissat_sweep ( struct kissat * solver)

Definition at line 1650 of file sweep.c.

1650 {
1651 if (!GET_OPTION (sweep))
1652 return false;
1653 if (solver->inconsistent)
1654 return false;
1656 return false;
1657 if (DELAYING (sweep))
1658 return false;
1659 KISSAT_assert (!solver->level);
1660 KISSAT_assert (!solver->unflushed);
1661 START (sweep);
1662 INC (sweep);
1663 statistics *statistics = &solver->statistics_;
1664 uint64_t equivalences = statistics->sweep_equivalences;
1665 uint64_t units = statistics->sweep_units;
1667 init_sweeper (solver, &sweeper);
1668 const unsigned scheduled = schedule_sweeping (&sweeper);
1669 uint64_t swept = 0, limit = 10;
1670 for (;;) {
1671 if (solver->inconsistent)
1672 break;
1674 break;
1675 if (solver->statistics_.kitten_ticks > sweeper.limit.ticks)
1676 break;
1677 unsigned idx = next_scheduled (&sweeper);
1678 if (idx == INVALID_IDX)
1679 break;
1680 FLAGS (idx)->sweep = false;
1681#ifndef KISSAT_QUIET
1682 const char *res =
1683#endif
1684 sweep_variable (&sweeper, idx);
1686 solver, "swept[%" PRIu64 "] external variable %d %s", swept,
1687 kissat_export_literal (solver, LIT (idx)), res);
1688 if (++swept == limit) {
1690 "found %" PRIu64 " equivalences and %" PRIu64
1691 " units after sweeping %" PRIu64 " variables ",
1692 statistics->sweep_equivalences - equivalences,
1693 solver->statistics_.sweep_units - units, swept);
1694 limit *= 10;
1695 }
1696 }
1697 kissat_very_verbose (solver, "swept %" PRIu64 " variables", swept);
1698 equivalences = statistics->sweep_equivalences - equivalences,
1699 units = solver->statistics_.sweep_units - units;
1700 kissat_phase (solver, "sweep", GET (sweep),
1701 "found %" PRIu64 " equivalences and %" PRIu64 " units",
1702 equivalences, units);
1703 unschedule_sweeping (&sweeper, swept, scheduled);
1704 unsigned inactive = release_sweeper (&sweeper);
1705
1706 if (!solver->inconsistent) {
1707 solver->propagate = solver->trail.begin;
1709 }
1710
1711 uint64_t eliminated = equivalences + units;
1712#ifndef KISSAT_QUIET
1713 KISSAT_assert (solver->active >= inactive);
1714 solver->active -= inactive;
1715 REPORT (!eliminated, '=');
1716 solver->active += inactive;
1717#else
1718 (void) inactive;
1719#endif
1720 if (kissat_average (eliminated, swept) < 0.001)
1721 BUMP_DELAY (sweep);
1722 else
1723 REDUCE_DELAY (sweep);
1724 STOP (sweep);
1725 return eliminated;
1726}
#define INC(NAME)
#define FLAGS
#define BUMP_DELAY(NAME)
Definition kimits.h:183
#define REDUCE_DELAY(NAME)
Definition kimits.h:185
#define DELAYING(NAME)
Definition kimits.h:181
#define KISSAT_assert(ignore)
Definition global.h:13
#define solver
Definition kitten.c:211
#define GET_OPTION(N)
Definition options.h:295
#define kissat_extremely_verbose(...)
Definition print.h:53
#define kissat_very_verbose(...)
Definition print.h:52
#define kissat_phase(...)
Definition print.h:48
#define STOP(P)
Definition profile.hpp:158
#define START(P)
Definition profile.hpp:150
clause * kissat_probing_propagate(kissat *solver, clause *ignore, bool flush)
Definition proprobe.c:37
#define REPORT(...)
Definition report.h:10
#define LIT(IDX)
Definition literal.h:31
#define INVALID_IDX
Definition literal.h:18
#define GET(NAME)
Definition statistics.h:416
struct sweeper::@220272220222261246232307276064033320167134062222 limit
uint64_t ticks
Definition sweep.c:35
#define TERMINATED(BIT)
Definition terminate.h:42
#define sweep_terminated_7
Definition terminate.h:76
#define sweep_terminated_8
Definition terminate.h:77
Here is the call graph for this function: