24#ifdef ABC_USE_PTHREADS
27#include "../lib/pthread.h"
45static volatile int g_nRunIds = 0;
49#ifndef ABC_USE_PTHREADS
57typedef struct Bmc3_ThData_t_
67extern pthread_mutex_t g_mutex;
72 if ( RunId == g_nRunIds )
74 status = pthread_mutex_lock(&g_mutex);
assert( status == 0 );
76 status = pthread_mutex_unlock(&g_mutex);
assert( status == 0 );
79 status = pthread_join( *(pthread_t *)(pWla->
pThread), NULL );
85void * Wla_Bmc3Thread (
void * pArg )
89 int nFramesNoChangeLim = 10;
90 Bmc3_ThData_t * pData = (Bmc3_ThData_t *)pArg;
95 pBmcPars->
RunId = pData->RunId;
97 if ( pData->pWla->pPars->fShrinkAbs )
98 pBmcPars->
nFramesMax = pData->pWla->iCexFrame + nFramesNoChangeLim;
108 if ( pData->fVerbose )
109 Abc_Print( 1,
"Bmc3 found CEX. RunId=%d.\n", pData->RunId );
111 status = pthread_mutex_lock(&g_mutex);
assert( status == 0 );
113 status = pthread_mutex_unlock(&g_mutex);
assert( status == 0 );
115 else if ( RetValue == -1 )
117 if ( pData->RunId < g_nRunIds && pData->fVerbose )
118 Abc_Print( 1,
"Bmc3 was cancelled. RunId=%d.\n", pData->RunId );
120 if ( pData->pWla->nIters > 1 && pData->RunId == g_nRunIds )
122 RetValue =
Wla_ManShrinkAbs( pData->pWla, pData->pWla->iCexFrame + nFramesNoChangeLim, pData->RunId );
123 pData->pWla->iCexFrame += nFramesNoChangeLim;
127 pData->pWla->fNewAbs = 1;
128 status = pthread_mutex_lock(&g_mutex);
assert( status == 0 );
130 status = pthread_mutex_unlock(&g_mutex);
assert( status == 0 );
141 pthread_exit( NULL );
149 Bmc3_ThData_t * pData;
157 pData->ppCex = ppCex;
158 pData->RunId = g_nRunIds;
161 status = pthread_create( (pthread_t *)pWla->
pThread, NULL, Wla_Bmc3Thread, pData );
struct Abc_Ntk_t_ Abc_Ntk_t
ABC_DLL void Abc_NtkDelete(Abc_Ntk_t *pNtk)
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Aig_ManStop(Aig_Man_t *p)
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
void Saig_ParBmcSetDefaultParams(Saig_ParBmc_t *p)
struct Saig_ParBmc_t_ Saig_ParBmc_t
typedefABC_NAMESPACE_HEADER_START struct Abc_Cex_t_ Abc_Cex_t
INCLUDES ///.
int Wla_CallBackToStop(int RunId)
void Wla_ManJoinThread(Wla_Man_t *pWla, int RunId)
int Wla_CallBackToStop(int RunId)
int Abc_NtkDarBmc3(Abc_Ntk_t *pAbcNtk, Saig_ParBmc_t *pBmcPars, int fOrDecomp)
void Wla_ManConcurrentBmc3(Wla_Man_t *pWla, Aig_Man_t *pAig, Abc_Cex_t **ppCex)
int Wla_ManShrinkAbs(Wla_Man_t *pWla, int nFrames, int RunId)
ABC_NAMESPACE_IMPL_START Abc_Ntk_t * Abc_NtkFromAigPhase(Aig_Man_t *pAig)
DECLARATIONS ///.
struct Wla_Man_t_ Wla_Man_t