Commit e4ab09d7 by Alan Mishchenko

Sweeper return value normalization.

parent ec298486
...@@ -984,6 +984,7 @@ extern Gia_Man_t * Gia_ManDupLastPis( Gia_Man_t * p, int nLastPis ); ...@@ -984,6 +984,7 @@ extern Gia_Man_t * Gia_ManDupLastPis( Gia_Man_t * p, int nLastPis );
extern Gia_Man_t * Gia_ManDupFlip( Gia_Man_t * p, int * pInitState ); extern Gia_Man_t * Gia_ManDupFlip( Gia_Man_t * p, int * pInitState );
extern Gia_Man_t * Gia_ManDupCycled( Gia_Man_t * pAig, Abc_Cex_t * pCex, int nFrames ); extern Gia_Man_t * Gia_ManDupCycled( Gia_Man_t * pAig, Abc_Cex_t * pCex, int nFrames );
extern Gia_Man_t * Gia_ManDup( Gia_Man_t * p ); extern Gia_Man_t * Gia_ManDup( Gia_Man_t * p );
extern Gia_Man_t * Gia_ManDupZero( Gia_Man_t * p );
extern Gia_Man_t * Gia_ManDupPerm( Gia_Man_t * p, Vec_Int_t * vPiPerm ); extern Gia_Man_t * Gia_ManDupPerm( Gia_Man_t * p, Vec_Int_t * vPiPerm );
extern Gia_Man_t * Gia_ManDupPermFlop( Gia_Man_t * p, Vec_Int_t * vFfPerm ); extern Gia_Man_t * Gia_ManDupPermFlop( Gia_Man_t * p, Vec_Int_t * vFfPerm );
extern Gia_Man_t * Gia_ManDupPermFlopGap( Gia_Man_t * p, Vec_Int_t * vFfPerm ); extern Gia_Man_t * Gia_ManDupPermFlopGap( Gia_Man_t * p, Vec_Int_t * vFfPerm );
......
...@@ -558,6 +558,30 @@ Gia_Man_t * Gia_ManDup( Gia_Man_t * p ) ...@@ -558,6 +558,30 @@ Gia_Man_t * Gia_ManDup( Gia_Man_t * p )
SeeAlso [] SeeAlso []
***********************************************************************/ ***********************************************************************/
Gia_Man_t * Gia_ManDupZero( Gia_Man_t * p )
{
Gia_Man_t * pNew; int i;
pNew = Gia_ManStart( 1 + Gia_ManCiNum(p) + Gia_ManCoNum(p) );
pNew->pName = Abc_UtilStrsav( p->pName );
for ( i = 0; i < Gia_ManCiNum(p); i++ )
Gia_ManAppendCi( pNew );
for ( i = 0; i < Gia_ManCoNum(p); i++ )
Gia_ManAppendCo( pNew, 0 );
Gia_ManSetRegNum( pNew, Gia_ManRegNum(p) );
return pNew;
}
/**Function*************************************************************
Synopsis [Duplicates AIG without any changes.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
Gia_Man_t * Gia_ManDupPerm( Gia_Man_t * p, Vec_Int_t * vPiPerm ) Gia_Man_t * Gia_ManDupPerm( Gia_Man_t * p, Vec_Int_t * vPiPerm )
{ {
// Vec_Int_t * vPiPermInv; // Vec_Int_t * vPiPermInv;
......
...@@ -90,16 +90,22 @@ Ssc_Man_t * Ssc_ManStart( Gia_Man_t * pAig, Gia_Man_t * pCare, Ssc_Pars_t * pPar ...@@ -90,16 +90,22 @@ Ssc_Man_t * Ssc_ManStart( Gia_Man_t * pAig, Gia_Man_t * pCare, Ssc_Pars_t * pPar
Ssc_ManStartSolver( p ); Ssc_ManStartSolver( p );
if ( p->pSat == NULL ) if ( p->pSat == NULL )
{ {
printf( "Constraints are UNSAT after propagation (likely a bug!).\n" ); printf( "Constraints are UNSAT after propagation.\n" );
Ssc_ManStop( p ); Ssc_ManStop( p );
return NULL; return (Ssc_Man_t *)(ABC_PTRINT_T)1;
} }
// p->vPivot = Ssc_GiaFindPivotSim( p->pFraig ); // p->vPivot = Ssc_GiaFindPivotSim( p->pFraig );
// Vec_IntFreeP( &p->vPivot ); // Vec_IntFreeP( &p->vPivot );
p->vPivot = Ssc_ManFindPivotSat( p ); p->vPivot = Ssc_ManFindPivotSat( p );
if ( p->vPivot == (Vec_Int_t *)(ABC_PTRINT_T)1 )
{
printf( "Constraints are UNSAT.\n" );
Ssc_ManStop( p );
return (Ssc_Man_t *)(ABC_PTRINT_T)1;
}
if ( p->vPivot == NULL ) if ( p->vPivot == NULL )
{ {
printf( "Constraints are UNSAT or conflict limit is too low.\n" ); printf( "Conflict limit is reached while trying to find one SAT assignment.\n" );
Ssc_ManStop( p ); Ssc_ManStop( p );
return NULL; return NULL;
} }
...@@ -229,7 +235,9 @@ clk = Abc_Clock(); ...@@ -229,7 +235,9 @@ clk = Abc_Clock();
Gia_ManRandom( 1 ); Gia_ManRandom( 1 );
// sweeping manager // sweeping manager
p = Ssc_ManStart( pAig, pCare, pPars ); p = Ssc_ManStart( pAig, pCare, pPars );
if ( p == NULL ) if ( p == (Ssc_Man_t *)(ABC_PTRINT_T)1 ) // UNSAT
return Gia_ManDupZero( pAig );
if ( p == NULL ) // timeout
return Gia_ManDup( pAig ); return Gia_ManDup( pAig );
if ( p->pPars->fVerbose ) if ( p->pPars->fVerbose )
printf( "Care set produced %d hits out of %d.\n", Ssc_GiaEstimateCare(p->pFraig, 5), 640 ); printf( "Care set produced %d hits out of %d.\n", Ssc_GiaEstimateCare(p->pFraig, 5), 640 );
......
...@@ -323,10 +323,12 @@ void Ssc_ManCollectSatPattern( Ssc_Man_t * p, Vec_Int_t * vPattern ) ...@@ -323,10 +323,12 @@ void Ssc_ManCollectSatPattern( Ssc_Man_t * p, Vec_Int_t * vPattern )
Vec_Int_t * Ssc_ManFindPivotSat( Ssc_Man_t * p ) Vec_Int_t * Ssc_ManFindPivotSat( Ssc_Man_t * p )
{ {
Vec_Int_t * vInit; Vec_Int_t * vInit;
int status; int status = sat_solver_solve( p->pSat, NULL, NULL, p->pPars->nBTLimit, 0, 0, 0 );
status = sat_solver_solve( p->pSat, NULL, NULL, p->pPars->nBTLimit, 0, 0, 0 ); if ( status == l_False )
if ( status != l_True ) // unsat or undec return (Vec_Int_t *)(ABC_PTRINT_T)1;
if ( status == l_Undef )
return NULL; return NULL;
assert( status == l_True );
vInit = Vec_IntAlloc( Gia_ManCiNum(p->pFraig) ); vInit = Vec_IntAlloc( Gia_ManCiNum(p->pFraig) );
Ssc_ManCollectSatPattern( p, vInit ); Ssc_ManCollectSatPattern( p, vInit );
return vInit; return vInit;
......
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