mirror of https://github.com/YosysHQ/abc.git
Updates to &bmcs to help debugging.
This commit is contained in:
parent
efbf5208a2
commit
4c0b78cf7f
|
|
@ -40124,7 +40124,7 @@ int Abc_CommandAbc9SBmc( Abc_Frame_t * pAbc, int argc, char ** argv )
|
|||
return 0;
|
||||
|
||||
usage:
|
||||
Abc_Print( -2, "usage: &bmcs [-PCFAT num] [-gvwh]\n" );
|
||||
Abc_Print( -2, "usage: &bmcs [-PCFAT num] [-gevwh]\n" );
|
||||
Abc_Print( -2, "\t performs bounded model checking\n" );
|
||||
Abc_Print( -2, "\t-P num : the number of parallel solvers [default = %d]\n", pPars->nProcs );
|
||||
Abc_Print( -2, "\t-C num : the SAT solver conflict limit [default = %d]\n", pPars->nConfLimit );
|
||||
|
|
@ -40132,7 +40132,7 @@ usage:
|
|||
Abc_Print( -2, "\t-A num : the number of additional frames to unroll [default = %d]\n", pPars->nFramesAdd );
|
||||
Abc_Print( -2, "\t-T num : approximate timeout in seconds [default = %d]\n", pPars->nTimeOut );
|
||||
Abc_Print( -2, "\t-g : toggle using Glucose 3.0 [default = %s]\n", pPars->fUseGlucose? "Glucose" : "Satoko" );
|
||||
// Abc_Print( -2, "\t-e : toggle using variable eliminatation [default = %s]\n", pPars->fUseEliminate?"yes": "no" );
|
||||
Abc_Print( -2, "\t-e : toggle using variable eliminatation [default = %s]\n", pPars->fUseEliminate?"yes": "no" );
|
||||
Abc_Print( -2, "\t-v : toggle printing verbose information [default = %s]\n", pPars->fVerbose? "yes": "no" );
|
||||
Abc_Print( -2, "\t-w : toggle printing information about unfolding [default = %s]\n", pPars->fVeryVerbose? "yes": "no" );
|
||||
Abc_Print( -2, "\t-h : print the command usage\n");
|
||||
|
|
|
|||
|
|
@ -54,19 +54,19 @@ extern "C" {
|
|||
SeeAlso []
|
||||
|
||||
***********************************************************************/
|
||||
Gluco::Solver * glucose_solver_start()
|
||||
Gluco::SimpSolver * glucose_solver_start()
|
||||
{
|
||||
Solver * S = new Solver;
|
||||
SimpSolver * S = new SimpSolver;
|
||||
S->setIncrementalMode();
|
||||
return S;
|
||||
}
|
||||
|
||||
void glucose_solver_stop(Gluco::Solver* S)
|
||||
void glucose_solver_stop(Gluco::SimpSolver* S)
|
||||
{
|
||||
delete S;
|
||||
}
|
||||
|
||||
int glucose_solver_addclause(Gluco::Solver* S, int * plits, int nlits)
|
||||
int glucose_solver_addclause(Gluco::SimpSolver* S, int * plits, int nlits)
|
||||
{
|
||||
vec<Lit> lits;
|
||||
for ( int i = 0; i < nlits; i++,plits++)
|
||||
|
|
@ -81,14 +81,14 @@ int glucose_solver_addclause(Gluco::Solver* S, int * plits, int nlits)
|
|||
return S->addClause(lits); // returns 0 if the problem is UNSAT
|
||||
}
|
||||
|
||||
void glucose_solver_setcallback(Gluco::Solver* S, void * pman, int(*pfunc)(void*, int, int*))
|
||||
void glucose_solver_setcallback(Gluco::SimpSolver* S, void * pman, int(*pfunc)(void*, int, int*))
|
||||
{
|
||||
S->pCnfMan = pman;
|
||||
S->pCnfFunc = pfunc;
|
||||
S->nCallConfl = 1000;
|
||||
}
|
||||
|
||||
int glucose_solver_solve(Gluco::Solver* S, int * plits, int nlits)
|
||||
int glucose_solver_solve(Gluco::SimpSolver* S, int * plits, int nlits)
|
||||
{
|
||||
vec<Lit> lits;
|
||||
for (int i=0;i<nlits;i++,plits++)
|
||||
|
|
@ -97,22 +97,22 @@ int glucose_solver_solve(Gluco::Solver* S, int * plits, int nlits)
|
|||
p.x = *plits;
|
||||
lits.push(p);
|
||||
}
|
||||
Gluco::lbool res = S->solveLimited(lits);
|
||||
Gluco::lbool res = S->solveLimited(lits, 0);
|
||||
return (res == l_True ? 1 : res == l_False ? -1 : 0);
|
||||
}
|
||||
|
||||
int glucose_solver_addvar(Gluco::Solver* S)
|
||||
int glucose_solver_addvar(Gluco::SimpSolver* S)
|
||||
{
|
||||
S->newVar();
|
||||
return S->nVars() - 1;
|
||||
}
|
||||
|
||||
int glucose_solver_read_cex_varvalue(Gluco::Solver* S, int ivar)
|
||||
int glucose_solver_read_cex_varvalue(Gluco::SimpSolver* S, int ivar)
|
||||
{
|
||||
return S->model[ivar] == l_True;
|
||||
}
|
||||
|
||||
void glucose_solver_setstop(Gluco::Solver* S, int * pstop)
|
||||
void glucose_solver_setstop(Gluco::SimpSolver* S, int * pstop)
|
||||
{
|
||||
S->pstop = pstop;
|
||||
}
|
||||
|
|
@ -155,33 +155,33 @@ bmcg_sat_solver * bmcg_sat_solver_start()
|
|||
}
|
||||
void bmcg_sat_solver_stop(bmcg_sat_solver* s)
|
||||
{
|
||||
glucose_solver_stop((Gluco::Solver*)s);
|
||||
glucose_solver_stop((Gluco::SimpSolver*)s);
|
||||
}
|
||||
|
||||
int bmcg_sat_solver_addclause(bmcg_sat_solver* s, int * plits, int nlits)
|
||||
{
|
||||
return glucose_solver_addclause((Gluco::Solver*)s,plits,nlits);
|
||||
return glucose_solver_addclause((Gluco::SimpSolver*)s,plits,nlits);
|
||||
}
|
||||
|
||||
void bmcg_sat_solver_setcallback(bmcg_sat_solver* s, void * pman, int(*pfunc)(void*, int, int*))
|
||||
{
|
||||
glucose_solver_setcallback((Gluco::Solver*)s,pman,pfunc);
|
||||
glucose_solver_setcallback((Gluco::SimpSolver*)s,pman,pfunc);
|
||||
}
|
||||
|
||||
int bmcg_sat_solver_solve(bmcg_sat_solver* s, int * plits, int nlits)
|
||||
{
|
||||
return glucose_solver_solve((Gluco::Solver*)s,plits,nlits);
|
||||
return glucose_solver_solve((Gluco::SimpSolver*)s,plits,nlits);
|
||||
}
|
||||
|
||||
int bmcg_sat_solver_final(bmcg_sat_solver* s, int ** ppArray)
|
||||
{
|
||||
*ppArray = (int *)(Lit *)((Gluco::Solver*)s)->conflict;
|
||||
return ((Gluco::Solver*)s)->conflict.size();
|
||||
*ppArray = (int *)(Lit *)((Gluco::SimpSolver*)s)->conflict;
|
||||
return ((Gluco::SimpSolver*)s)->conflict.size();
|
||||
}
|
||||
|
||||
int bmcg_sat_solver_addvar(bmcg_sat_solver* s)
|
||||
{
|
||||
return glucose_solver_addvar((Gluco::Solver*)s);
|
||||
return glucose_solver_addvar((Gluco::SimpSolver*)s);
|
||||
}
|
||||
|
||||
void bmcg_sat_solver_set_nvars( bmcg_sat_solver* s, int nvars )
|
||||
|
|
@ -193,61 +193,61 @@ void bmcg_sat_solver_set_nvars( bmcg_sat_solver* s, int nvars )
|
|||
|
||||
int bmcg_sat_solver_eliminate( bmcg_sat_solver* s, int turn_off_elim )
|
||||
{
|
||||
return 1;
|
||||
// return 1;
|
||||
return ((Gluco::SimpSolver*)s)->eliminate(turn_off_elim != 0);
|
||||
}
|
||||
|
||||
int bmcg_sat_solver_var_is_elim( bmcg_sat_solver* s, int v )
|
||||
{
|
||||
return 0;
|
||||
// return 0;
|
||||
return ((Gluco::SimpSolver*)s)->isEliminated(v);
|
||||
}
|
||||
|
||||
int bmcg_sat_solver_read_cex_varvalue(bmcg_sat_solver* s, int ivar)
|
||||
{
|
||||
return glucose_solver_read_cex_varvalue((Gluco::Solver*)s, ivar);
|
||||
return glucose_solver_read_cex_varvalue((Gluco::SimpSolver*)s, ivar);
|
||||
}
|
||||
|
||||
void bmcg_sat_solver_set_stop(bmcg_sat_solver* s, int * pstop)
|
||||
{
|
||||
glucose_solver_setstop((Gluco::Solver*)s, pstop);
|
||||
glucose_solver_setstop((Gluco::SimpSolver*)s, pstop);
|
||||
}
|
||||
|
||||
abctime bmcg_sat_solver_set_runtime_limit(bmcg_sat_solver* s, abctime Limit)
|
||||
{
|
||||
abctime nRuntimeLimit = ((Gluco::Solver*)s)->nRuntimeLimit;
|
||||
((Gluco::Solver*)s)->nRuntimeLimit = Limit;
|
||||
abctime nRuntimeLimit = ((Gluco::SimpSolver*)s)->nRuntimeLimit;
|
||||
((Gluco::SimpSolver*)s)->nRuntimeLimit = Limit;
|
||||
return nRuntimeLimit;
|
||||
}
|
||||
|
||||
void bmcg_sat_solver_set_conflict_budget(bmcg_sat_solver* s, int Limit)
|
||||
{
|
||||
if ( Limit > 0 )
|
||||
((Gluco::Solver*)s)->setConfBudget( (int64_t)Limit );
|
||||
((Gluco::SimpSolver*)s)->setConfBudget( (int64_t)Limit );
|
||||
else
|
||||
((Gluco::Solver*)s)->budgetOff();
|
||||
((Gluco::SimpSolver*)s)->budgetOff();
|
||||
}
|
||||
|
||||
int bmcg_sat_solver_varnum(bmcg_sat_solver* s)
|
||||
{
|
||||
return ((Gluco::Solver*)s)->nVars();
|
||||
return ((Gluco::SimpSolver*)s)->nVars();
|
||||
}
|
||||
int bmcg_sat_solver_clausenum(bmcg_sat_solver* s)
|
||||
{
|
||||
return ((Gluco::Solver*)s)->nClauses();
|
||||
return ((Gluco::SimpSolver*)s)->nClauses();
|
||||
}
|
||||
int bmcg_sat_solver_learntnum(bmcg_sat_solver* s)
|
||||
{
|
||||
return ((Gluco::Solver*)s)->nLearnts();
|
||||
return ((Gluco::SimpSolver*)s)->nLearnts();
|
||||
}
|
||||
int bmcg_sat_solver_conflictnum(bmcg_sat_solver* s)
|
||||
{
|
||||
return ((Gluco::Solver*)s)->conflicts;
|
||||
return ((Gluco::SimpSolver*)s)->conflicts;
|
||||
}
|
||||
|
||||
int bmcg_sat_solver_minimize_assumptions(bmcg_sat_solver * s, int * plits, int nlits)
|
||||
{
|
||||
vec<int>*array = &((Gluco::Solver*)s)->user_vec;
|
||||
vec<int>*array = &((Gluco::SimpSolver*)s)->user_vec;
|
||||
int i, nlitsL, nlitsR, nresL, nresR, status;
|
||||
if ( nlits == 1 )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -167,7 +167,8 @@ class SimpSolver : public Solver {
|
|||
// Implementation of inline methods:
|
||||
|
||||
|
||||
inline bool SimpSolver::isEliminated (Var v) const { return eliminated.size() ? eliminated[v] != 0 : 0; }
|
||||
//inline bool SimpSolver::isEliminated (Var v) const { return eliminated[v]; }
|
||||
inline bool SimpSolver::isEliminated (Var v) const { return eliminated.size() > 0 ? eliminated[v] != 0 : 0; }
|
||||
inline void SimpSolver::updateElimHeap(Var v) {
|
||||
assert(use_simplification);
|
||||
// if (!frozen[v] && !isEliminated(v) && value(v) == l_Undef)
|
||||
|
|
|
|||
Loading…
Reference in New Issue