From d80071be843c8fad247daf8adb380a496d446b20 Mon Sep 17 00:00:00 2001 From: Alan Mishchenko Date: Tue, 26 Mar 2013 16:04:33 -0700 Subject: Fixing a bug in &cycle, which could generate an unreachable state. --- src/aig/gia/giaDup.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/aig/gia/giaDup.c b/src/aig/gia/giaDup.c index 2782ccf1..b79f7b8b 100644 --- a/src/aig/gia/giaDup.c +++ b/src/aig/gia/giaDup.c @@ -442,13 +442,12 @@ void Gia_ManCycle( Gia_Man_t * p, int nFrames ) { Gia_Obj_t * pObj, * pObjRi, * pObjRo; int i, k; -// Gia_ManRandom( 1 ); - // assign random primary inputs - Gia_ManForEachPi( p, pObj, k ) - pObj->fMark0 = (1 & Gia_ManRandom(0)); + Gia_ManRandom( 1 ); // iterate for the given number of frames for ( i = 0; i < nFrames; i++ ) { + Gia_ManForEachPi( p, pObj, k ) + pObj->fMark0 = (1 & Gia_ManRandom(0)); Gia_ManForEachAnd( p, pObj, k ) pObj->fMark0 = (Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj)) & (Gia_ObjFanin1(pObj)->fMark0 ^ Gia_ObjFaninC1(pObj)); @@ -461,16 +460,16 @@ void Gia_ManCycle( Gia_Man_t * p, int nFrames ) Gia_Man_t * Gia_ManDupCycled( Gia_Man_t * p, int nFrames ) { Gia_Man_t * pNew; - Vec_Int_t * vInits; + Vec_Bit_t * vInits; Gia_Obj_t * pObj; int i; Gia_ManCleanMark0(p); Gia_ManCycle( p, nFrames ); - vInits = Vec_IntAlloc( Gia_ManRegNum(p) ); + vInits = Vec_BitAlloc( Gia_ManRegNum(p) ); Gia_ManForEachRo( p, pObj, i ) - Vec_IntPush( vInits, pObj->fMark0 ); - pNew = Gia_ManDupFlip( p, Vec_IntArray(vInits) ); - Vec_IntFree( vInits ); + Vec_BitPush( vInits, pObj->fMark0 ); + pNew = Gia_ManDupFlip( p, Vec_BitArray(vInits) ); + Vec_BitFree( vInits ); Gia_ManCleanMark0(p); return pNew; } -- cgit v1.2.3 From e5054fa757cef6b7f7bc43ab1d06ae9f15d0e993 Mon Sep 17 00:00:00 2001 From: Alan Mishchenko Date: Tue, 26 Mar 2013 16:57:42 -0700 Subject: Making sure 'pdr -a' return UNDEC if it did not finish proving the remaining outputs to be UNSAT. --- src/proof/pdr/pdrCore.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/proof/pdr/pdrCore.c b/src/proof/pdr/pdrCore.c index 837e01a3..c1e408ab 100644 --- a/src/proof/pdr/pdrCore.c +++ b/src/proof/pdr/pdrCore.c @@ -606,7 +606,7 @@ int Pdr_ManSolveInt( Pdr_Man_t * p ) if ( !p->pPars->fSilent ) Abc_Print( 1, "Reached gap timeout (%d seconds).\n", p->pPars->nTimeOutGap ); p->pPars->iFrame = k; - return p->vCexes ? 0 : -1; + return -1; } RetValue = Pdr_ManCheckCube( p, k, NULL, &pCube, p->pPars->nConfLimit ); if ( RetValue == 1 ) @@ -620,7 +620,7 @@ int Pdr_ManSolveInt( Pdr_Man_t * p ) else if ( p->pPars->fVerbose ) Abc_Print( 1, "Computation cancelled by the callback.\n" ); p->pPars->iFrame = k; - return p->vCexes ? 0 : -1; + return -1; } if ( RetValue == 0 ) { @@ -636,7 +636,7 @@ int Pdr_ManSolveInt( Pdr_Man_t * p ) else if ( p->pPars->fVerbose ) Abc_Print( 1, "Computation cancelled by the callback.\n" ); p->pPars->iFrame = k; - return p->vCexes ? 0 : -1; + return -1; } if ( RetValue == 0 ) { @@ -702,7 +702,7 @@ int Pdr_ManSolveInt( Pdr_Man_t * p ) Abc_Print( 1, "Reached conflict limit (%d).\n", p->pPars->nConfLimit ); } p->pPars->iFrame = k; - return p->vCexes ? 0 : -1; + return -1; } if ( RetValue ) { @@ -722,7 +722,7 @@ int Pdr_ManSolveInt( Pdr_Man_t * p ) if ( p->pPars->pFuncStop && p->pPars->pFuncStop(p->pPars->RunId) ) { p->pPars->iFrame = k; - return p->vCexes ? 0 : -1; + return -1; } if ( p->timeToStop && clock() > p->timeToStop ) { @@ -736,7 +736,7 @@ int Pdr_ManSolveInt( Pdr_Man_t * p ) if ( !p->pPars->fSilent ) Abc_Print( 1, "Reached timeout (%d seconds).\n", p->pPars->nTimeOut ); p->pPars->iFrame = k; - return p->vCexes ? 0 : -1; + return -1; } if ( p->pPars->nTimeOutGap && p->pPars->timeLastSolved && clock() > p->pPars->timeLastSolved + p->pPars->nTimeOutGap * CLOCKS_PER_SEC ) { @@ -750,7 +750,7 @@ int Pdr_ManSolveInt( Pdr_Man_t * p ) if ( !p->pPars->fSilent ) Abc_Print( 1, "Reached gap timeout (%d seconds).\n", p->pPars->nTimeOutGap ); p->pPars->iFrame = k; - return p->vCexes ? 0 : -1; + return -1; } if ( p->pPars->nFrameMax && k >= p->pPars->nFrameMax ) { @@ -759,10 +759,11 @@ int Pdr_ManSolveInt( Pdr_Man_t * p ) if ( !p->pPars->fSilent ) Abc_Print( 1, "Reached limit on the number of timeframes (%d).\n", p->pPars->nFrameMax ); p->pPars->iFrame = k; - return p->vCexes ? 0 : -1; + return -1; } } - return p->vCexes ? 0 : RetValue; + assert( 0 ); + return -1; } /**Function************************************************************* -- cgit v1.2.3