summaryrefslogtreecommitdiffstats
path: root/src/sat/bsat
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2013-06-28 10:42:31 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2013-06-28 10:42:31 -0700
commit184c5d4ea467731005c92bc159c68d57c83c6c6a (patch)
treeec585fa6f993ed00851000069887812a4734d678 /src/sat/bsat
parente93cfb18ee42e75e6d55c4fd02e5455c4ec16cc8 (diff)
downloadabc-184c5d4ea467731005c92bc159c68d57c83c6c6a.tar.gz
abc-184c5d4ea467731005c92bc159c68d57c83c6c6a.tar.bz2
abc-184c5d4ea467731005c92bc159c68d57c83c6c6a.zip
Adding timeout to the interpolant computation procedure.
Diffstat (limited to 'src/sat/bsat')
-rw-r--r--src/sat/bsat/satInterA.c19
-rw-r--r--src/sat/bsat/satStore.h2
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;