diff options
Diffstat (limited to 'src/sat')
-rw-r--r-- | src/sat/bsat/satInterA.c | 19 | ||||
-rw-r--r-- | src/sat/bsat/satStore.h | 2 |
2 files changed, 19 insertions, 2 deletions
diff --git a/src/sat/bsat/satInterA.c b/src/sat/bsat/satInterA.c index dabb10a3..b3b4ec7f 100644 --- a/src/sat/bsat/satInterA.c +++ b/src/sat/bsat/satInterA.c @@ -948,7 +948,7 @@ void Inta_ManPrepareInter( Inta_Man_t * p ) SeeAlso [] ***********************************************************************/ -void * Inta_ManInterpolate( Inta_Man_t * p, Sto_Man_t * pCnf, void * vVarsAB, int fVerbose ) +void * Inta_ManInterpolate( Inta_Man_t * p, Sto_Man_t * pCnf, abctime TimeToStop, void * vVarsAB, int fVerbose ) { Aig_Man_t * pRes; Aig_Obj_t * pObj; @@ -956,6 +956,9 @@ void * Inta_ManInterpolate( Inta_Man_t * p, Sto_Man_t * pCnf, void * vVarsAB, in int RetValue = 1; abctime clkTotal = Abc_Clock(); + if ( Abc_Clock() > TimeToStop ) + return NULL; + // check that the CNF makes sense assert( pCnf->nVars > 0 && pCnf->nClauses > 0 ); p->pCnf = pCnf; @@ -980,7 +983,15 @@ void * Inta_ManInterpolate( Inta_Man_t * p, Sto_Man_t * pCnf, void * vVarsAB, in // write the root clauses Sto_ManForEachClauseRoot( p->pCnf, pClause ) + { Inta_ManProofWriteOne( p, pClause ); + if ( TimeToStop && Abc_Clock() > TimeToStop ) + { + Aig_ManStop( pRes ); + p->pAig = NULL; + return NULL; + } + } // propagate root level assignments if ( Inta_ManProcessRoots( p ) ) @@ -995,6 +1006,12 @@ void * Inta_ManInterpolate( Inta_Man_t * p, Sto_Man_t * pCnf, void * vVarsAB, in RetValue = 0; break; } + if ( TimeToStop && Abc_Clock() > TimeToStop ) + { + Aig_ManStop( pRes ); + p->pAig = NULL; + return NULL; + } } } diff --git a/src/sat/bsat/satStore.h b/src/sat/bsat/satStore.h index 206c6939..960f391a 100644 --- a/src/sat/bsat/satStore.h +++ b/src/sat/bsat/satStore.h @@ -130,7 +130,7 @@ extern int Int_ManInterpolate( Int_Man_t * p, Sto_Man_t * pCnf, int fVe typedef struct Inta_Man_t_ Inta_Man_t; extern Inta_Man_t * Inta_ManAlloc(); extern void Inta_ManFree( Inta_Man_t * p ); -extern void * Inta_ManInterpolate( Inta_Man_t * p, Sto_Man_t * pCnf, void * vVarsAB, int fVerbose ); +extern void * Inta_ManInterpolate( Inta_Man_t * p, Sto_Man_t * pCnf, abctime TimeToStop, void * vVarsAB, int fVerbose ); /*=== satInterB.c ==========================================================*/ typedef struct Intb_Man_t_ Intb_Man_t; |