824 {
826 return;
828 return;
829#ifndef KISSAT_QUIET
830 const unsigned variables_before =
solver->active;
831#endif
836 const unsigned fastelrounds =
GET_OPTION (fastelrounds);
837 const size_t fasteloccs =
GET_OPTION (fasteloccs);
838#ifndef KISSAT_QUIET
839 unsigned eliminated = 0;
840#endif
841 unsigned round = 0;
842 candidates candidates;
844 bool done = false;
845 do {
846 if (round++ >= fastelrounds)
847 break;
849 solver,
"gathering candidates for fast elimination round %u",
850 round);
854 flags *pivot_flags = all_flags + pivot;
856 continue;
858 continue;
859 const unsigned lit =
LIT (pivot);
861 if (
pos > fasteloccs)
862 continue;
863 const unsigned not_lit =
LIT (pivot);
864 const size_t neg = flush_occurrences (
solver, not_lit);
865 if (neg > fasteloccs)
866 continue;
867 const unsigned score =
pos + neg;
868 if (score > fasteloccs)
869 continue;
872 }
873#ifndef KISSAT_QUIET
874 const size_t size_candidates =
SIZE_STACK (candidates);
875 const size_t active_variables =
solver->active;
877 solver,
"gathered %zu candidates %.0f%% in elimination round %u",
878 size_candidates, kissat_percent (size_candidates, active_variables),
879 round);
880#endif
882 unsigned eliminated_this_round = 0;
885 flags *pivot_flags = all_flags + pivot;
887 continue;
889 continue;
891 done = true;
892 break;
893 }
894 if (try_to_fast_eliminate (
solver, pivot))
895 eliminated_this_round++;
896 if (
solver->inconsistent) {
897 done = true;
898 break;
899 }
902 if (
solver->inconsistent) {
903 done = true;
904 break;
905 }
906 }
908#ifndef KISSAT_QUIET
909 eliminated += eliminated_this_round;
911 solver,
"fast eliminated %u of %zu candidates %.0f%% in round %u",
912 eliminated_this_round, size_candidates,
913 kissat_percent (eliminated_this_round, size_candidates), round);
914#endif
915 if (!eliminated_this_round)
916 done = true;
917 } while (!done);
920 FLAGS (idx)->eliminate =
true;
921 flush_eliminated_binary_clauses (
solver);
923#ifndef KISSAT_QUIET
924 const unsigned original_variables =
solver->statistics.variables_original;
925 const unsigned variables_after =
solver->active;
928 "[fastel] "
929 "fast elimination of %u variables %.0f%% (%u remain %.0f%%)",
930 eliminated, kissat_percent (eliminated, variables_before),
931 variables_after,
932 kissat_percent (variables_after, original_variables));
933#endif
935 REPORT (!eliminated,
'e');
936}
#define all_stack(T, E, S)
void kissat_enter_dense_mode(kissat *solver, litpairs *irredundant)
void kissat_resume_sparse_mode(kissat *solver, bool flush_eliminated, litpairs *irredundant)
void kissat_flush_units_while_connected(kissat *solver)
#define RANK_CANDIDATE(CANDIDATE)
#define all_variables(IDX)
#define KISSAT_assert(ignore)
#define kissat_verbose(...)
#define kissat_extremely_verbose(...)
#define kissat_very_verbose(...)
#define RADIX_STACK(VTYPE, RTYPE, S, RANK)
#define fastel_terminated_1
void kissat_connect_irredundant_large_clauses(kissat *solver)