Commit 4efc89d3 by Alan Mishchenko

Enabled detecting CEXes in multiple POs without stopping (sim3 -a).

parent dfd871c2
...@@ -549,44 +549,40 @@ int Ssw_RarManObjWhichOne( Ssw_RarMan_t * p, Aig_Obj_t * pObj ) ...@@ -549,44 +549,40 @@ int Ssw_RarManObjWhichOne( Ssw_RarMan_t * p, Aig_Obj_t * pObj )
int Ssw_RarManCheckNonConstOutputs( Ssw_RarMan_t * p, int * pnSolvedNow, int iFrame, int fNotVerbose, clock_t Time ) int Ssw_RarManCheckNonConstOutputs( Ssw_RarMan_t * p, int * pnSolvedNow, int iFrame, int fNotVerbose, clock_t Time )
{ {
Aig_Obj_t * pObj; Aig_Obj_t * pObj;
int i; int i, RetValue = 0;
p->iFailPo = -1; p->iFailPo = -1;
p->iFailPat = -1; p->iFailPat = -1;
Saig_ManForEachPo( p->pAig, pObj, i ) Saig_ManForEachPo( p->pAig, pObj, i )
{ {
if ( p->pAig->nConstrs && i >= Saig_ManPoNum(p->pAig) - p->pAig->nConstrs ) if ( p->pAig->nConstrs && i >= Saig_ManPoNum(p->pAig) - p->pAig->nConstrs )
return 0; break;
if ( p->vCexes && Vec_PtrEntry(p->vCexes, i) ) if ( p->vCexes && Vec_PtrEntry(p->vCexes, i) )
continue; continue;
if ( !Ssw_RarManObjIsConst(p, pObj) ) if ( Ssw_RarManObjIsConst(p, pObj) )
continue;
RetValue = 1;
p->iFailPo = i;
p->iFailPat = Ssw_RarManObjWhichOne( p, pObj );
if ( pnSolvedNow == NULL )
break;
// remember the one solved
(*pnSolvedNow)++;
if ( p->vCexes == NULL )
p->vCexes = Vec_PtrStart( Saig_ManPoNum(p->pAig) );
assert( Vec_PtrEntry(p->vCexes, p->iFailPo) == NULL );
Vec_PtrWriteEntry( p->vCexes, p->iFailPo, (void *)(ABC_PTRINT_T)1 );
// print final report
if ( !fNotVerbose )
{ {
p->iFailPo = i; int nOutDigits = Abc_Base10Log( Saig_ManPoNum(p->pAig) );
p->iFailPat = Ssw_RarManObjWhichOne( p, pObj ); Abc_Print( 1, "Output %*d was asserted in frame %4d (solved %*d out of %*d outputs). ",
nOutDigits, p->iFailPo, iFrame,
// remember the one solved nOutDigits, *pnSolvedNow,
if ( pnSolvedNow ) nOutDigits, Saig_ManPoNum(p->pAig) );
{ Abc_PrintTime( 1, "Time", Time );
(*pnSolvedNow)++;
if ( p->vCexes == NULL )
p->vCexes = Vec_PtrStart( Saig_ManPoNum(p->pAig) );
assert( Vec_PtrEntry(p->vCexes, p->iFailPo) == NULL );
Vec_PtrWriteEntry( p->vCexes, p->iFailPo, (void *)(ABC_PTRINT_T)1 );
// print final report
if ( !fNotVerbose )
{
int nOutDigits = Abc_Base10Log( Saig_ManPoNum(p->pAig) );
Abc_Print( 1, "Output %*d was asserted in frame %4d (solved %*d out of %*d outputs). ",
nOutDigits, p->iFailPo, iFrame,
nOutDigits, *pnSolvedNow,
nOutDigits, Saig_ManPoNum(p->pAig) );
Abc_PrintTime( 1, "Time", Time );
}
continue;
}
return 1;
} }
} }
return 0; return RetValue;
} }
/**Function************************************************************* /**Function*************************************************************
......
...@@ -238,6 +238,8 @@ Abc_Cex_t* _cex_get_vec(int i) ...@@ -238,6 +238,8 @@ Abc_Cex_t* _cex_get_vec(int i)
return NULL; return NULL;
} }
if ( pCex == (Abc_Cex_t *)1 )
return pCex;
return Abc_CexDup( pCex, -1 ); return Abc_CexDup( pCex, -1 );
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment