From e23dd881fb64403ca46823398b722e6d19c87768 Mon Sep 17 00:00:00 2001 From: Alan Mishchenko Date: Tue, 29 Oct 2013 12:30:16 -0700 Subject: Wrapper around the BMC engine to restart it with higher resource limits. --- src/sat/bmc/bmcBmcAnd.c | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) (limited to 'src/sat') 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 /// //////////////////////////////////////////////////////////////////////// -- cgit v1.2.3