summaryrefslogtreecommitdiffstats
path: root/src/sat/bmc/bmcBmcAnd.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2013-10-29 12:30:16 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2013-10-29 12:30:16 -0700
commite23dd881fb64403ca46823398b722e6d19c87768 (patch)
treec72d5f72421df52fa2026d1cc65a1c06309aedfe /src/sat/bmc/bmcBmcAnd.c
parente3f9ad3c9747bd9ad50406186828fefa59af4677 (diff)
downloadabc-e23dd881fb64403ca46823398b722e6d19c87768.tar.gz
abc-e23dd881fb64403ca46823398b722e6d19c87768.tar.bz2
abc-e23dd881fb64403ca46823398b722e6d19c87768.zip
Wrapper around the BMC engine to restart it with higher resource limits.
Diffstat (limited to 'src/sat/bmc/bmcBmcAnd.c')
-rw-r--r--src/sat/bmc/bmcBmcAnd.c39
1 files changed, 38 insertions, 1 deletions
diff --git a/src/sat/bmc/bmcBmcAnd.c b/src/sat/bmc/bmcBmcAnd.c
index d69c05ae..e6200667 100644
--- a/src/sat/bmc/bmcBmcAnd.c
+++ b/src/sat/bmc/bmcBmcAnd.c
@@ -953,7 +953,7 @@ Cnf_Dat_t * Cnf_DeriveGia( Gia_Man_t * p )
SeeAlso []
***********************************************************************/
-int Gia_ManBmcPerform( Gia_Man_t * pGia, Bmc_AndPar_t * pPars )
+int Gia_ManBmcPerformInt( Gia_Man_t * pGia, Bmc_AndPar_t * pPars )
{
Bmc_Mna_t * p;
Gia_Man_t * pTemp;
@@ -1050,6 +1050,43 @@ int Gia_ManBmcPerform( Gia_Man_t * pGia, Bmc_AndPar_t * pPars )
return RetValue;
}
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+int Gia_ManBmcPerform( Gia_Man_t * pGia, Bmc_AndPar_t * pPars )
+{
+ abctime TimeToStop = pPars->nTimeOut ? pPars->nTimeOut * CLOCKS_PER_SEC + Abc_Clock() : 0;
+ if ( pPars->nFramesAdd == 0 )
+ return Gia_ManBmcPerformInt( pGia, pPars );
+ // iterate over the engine until we read the global timeout
+ assert( pPars->nTimeOut >= 0 );
+ while ( 1 )
+ {
+ if ( TimeToStop && TimeToStop < Abc_Clock() )
+ return -1;
+ if ( Gia_ManBmcPerformInt( pGia, pPars ) == 0 )
+ return 0;
+ // set the new runtime limit
+ if ( pPars->nTimeOut )
+ {
+ pPars->nTimeOut = Abc_MinInt( pPars->nTimeOut-1, (int)((TimeToStop - Abc_Clock()) / CLOCKS_PER_SEC) );
+ if ( pPars->nTimeOut <= 0 )
+ return -1;
+ }
+ // set the new frames limit
+ pPars->nFramesAdd *= 2;
+ }
+ return -1;
+}
+
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////