diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2013-05-07 18:11:29 -0700 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2013-05-07 18:11:29 -0700 |
commit | a735d95a5bfa8ab21ddbe5a2a66695327d3b7206 (patch) | |
tree | 96f083283877e8d8e8695aae7cf4101afc3cf6da /src | |
parent | 51db560206d030e3f0b7628169a92ce58c601db7 (diff) | |
download | abc-a735d95a5bfa8ab21ddbe5a2a66695327d3b7206.tar.gz abc-a735d95a5bfa8ab21ddbe5a2a66695327d3b7206.tar.bz2 abc-a735d95a5bfa8ab21ddbe5a2a66695327d3b7206.zip |
SAT sweeping under constraints (bug fix).
Diffstat (limited to 'src')
-rw-r--r-- | src/aig/gia/gia.h | 2 | ||||
-rw-r--r-- | src/aig/gia/giaEquiv.c | 7 | ||||
-rw-r--r-- | src/aig/gia/giaSweep.c | 2 | ||||
-rw-r--r-- | src/base/abci/abc.c | 14 | ||||
-rw-r--r-- | src/proof/ssc/sscCore.c | 4 |
5 files changed, 16 insertions, 13 deletions
diff --git a/src/aig/gia/gia.h b/src/aig/gia/gia.h index 48f0c215..ed38806e 100644 --- a/src/aig/gia/gia.h +++ b/src/aig/gia/gia.h @@ -891,7 +891,7 @@ extern int Gia_ManEquivCountLitsAll( Gia_Man_t * p ); extern int Gia_ManEquivCountClasses( Gia_Man_t * p ); extern void Gia_ManEquivPrintOne( Gia_Man_t * p, int i, int Counter ); extern void Gia_ManEquivPrintClasses( Gia_Man_t * p, int fVerbose, float Mem ); -extern Gia_Man_t * Gia_ManEquivReduce( Gia_Man_t * p, int fUseAll, int fDualOut, int fVerbose ); +extern Gia_Man_t * Gia_ManEquivReduce( Gia_Man_t * p, int fUseAll, int fDualOut, int fSkipPhase, int fVerbose ); extern Gia_Man_t * Gia_ManEquivReduceAndRemap( Gia_Man_t * p, int fSeq, int fMiterPairs ); extern int Gia_ManEquivSetColors( Gia_Man_t * p, int fVerbose ); extern Gia_Man_t * Gia_ManSpecReduce( Gia_Man_t * p, int fDualOut, int fSynthesis, int fReduce, int fSkipSome, int fVerbose ); diff --git a/src/aig/gia/giaEquiv.c b/src/aig/gia/giaEquiv.c index 3067f956..d795856a 100644 --- a/src/aig/gia/giaEquiv.c +++ b/src/aig/gia/giaEquiv.c @@ -414,7 +414,7 @@ void Gia_ManEquivReduce_rec( Gia_Man_t * pNew, Gia_Man_t * p, Gia_Obj_t * pObj, SeeAlso [] ***********************************************************************/ -Gia_Man_t * Gia_ManEquivReduce( Gia_Man_t * p, int fUseAll, int fDualOut, int fVerbose ) +Gia_Man_t * Gia_ManEquivReduce( Gia_Man_t * p, int fUseAll, int fDualOut, int fSkipPhase, int fVerbose ) { Gia_Man_t * pNew; Gia_Obj_t * pObj; @@ -445,7 +445,8 @@ Gia_Man_t * Gia_ManEquivReduce( Gia_Man_t * p, int fUseAll, int fDualOut, int fV return NULL; } */ - Gia_ManSetPhase( p ); + if ( !fSkipPhase ) + Gia_ManSetPhase( p ); if ( fDualOut ) Gia_ManEquivSetColors( p, fVerbose ); pNew = Gia_ManStart( Gia_ManObjNum(p) ); @@ -637,7 +638,7 @@ Gia_Man_t * Gia_ManEquivRemapDfs( Gia_Man_t * p ) Gia_Man_t * Gia_ManEquivReduceAndRemap( Gia_Man_t * p, int fSeq, int fMiterPairs ) { Gia_Man_t * pNew, * pFinal; - pNew = Gia_ManEquivReduce( p, 0, 0, 0 ); + pNew = Gia_ManEquivReduce( p, 0, 0, 0, 0 ); if ( pNew == NULL ) return NULL; if ( fMiterPairs ) diff --git a/src/aig/gia/giaSweep.c b/src/aig/gia/giaSweep.c index 994aedc1..4517bb7b 100644 --- a/src/aig/gia/giaSweep.c +++ b/src/aig/gia/giaSweep.c @@ -288,7 +288,7 @@ Gia_Man_t * Gia_ManFraigSweep( Gia_Man_t * p, void * pPars ) if ( p->pManTime == NULL ) { Gia_ManFraigSweepPerform( p, pPars ); - pNew = Gia_ManEquivReduce( p, 1, 0, 0 ); + pNew = Gia_ManEquivReduce( p, 1, 0, 0, 0 ); if ( pNew == NULL ) return Gia_ManDup(p); return pNew; diff --git a/src/base/abci/abc.c b/src/base/abci/abc.c index d7e36cfa..ec8e9e76 100644 --- a/src/base/abci/abc.c +++ b/src/base/abci/abc.c @@ -27365,7 +27365,7 @@ int Abc_CommandAbc9Srm( Abc_Frame_t * pAbc, int argc, char ** argv ) } if ( fSynthesis ) { - pTemp = Gia_ManEquivReduce( pAbc->pGia, 1, fDualOut, fVerbose ); + pTemp = Gia_ManEquivReduce( pAbc->pGia, 1, fDualOut, 0, fVerbose ); if ( pTemp ) { pTemp = Gia_ManSeqStructSweep( pAux = pTemp, 1, 1, 0 ); @@ -27612,7 +27612,7 @@ int Abc_CommandAbc9Reduce( Abc_Frame_t * pAbc, int argc, char ** argv ) } if ( fUseAll ) { - pTemp = Gia_ManEquivReduce( pAbc->pGia, fUseAll, fDualOut, fVerbose ); + pTemp = Gia_ManEquivReduce( pAbc->pGia, fUseAll, fDualOut, 0, fVerbose ); pTemp = Gia_ManSeqStructSweep( pTemp2 = pTemp, 1, 1, 0 ); Gia_ManStop( pTemp2 ); } @@ -31601,7 +31601,7 @@ usage: ***********************************************************************/ int Abc_CommandAbc9Test( Abc_Frame_t * pAbc, int argc, char ** argv ) { -// Gia_Man_t * pTemp = NULL; + Gia_Man_t * pTemp = NULL; int c, fVerbose = 0; int fSwitch = 0; // extern Gia_Man_t * Gia_VtaTest( Gia_Man_t * p ); @@ -31614,9 +31614,9 @@ int Abc_CommandAbc9Test( Abc_Frame_t * pAbc, int argc, char ** argv ) // extern void Unr_ManTest( Gia_Man_t * pGia ); // extern void Mig_ManTest( Gia_Man_t * pGia ); // extern int Gia_ManVerify( Gia_Man_t * pGia ); -// extern Gia_Man_t * Gia_SweeperFraigTest( Gia_Man_t * p, int nWords, int nConfs, int fVerbose ); // extern Gia_Man_t * Gia_ManOptimizeRing( Gia_Man_t * p ); // extern void Gia_ManCollectSeqTest( Gia_Man_t * p ); + extern Gia_Man_t * Gia_SweeperFraigTest( Gia_Man_t * p, int nWords, int nConfs, int fVerbose ); Extra_UtilGetoptReset(); while ( ( c = Extra_UtilGetopt( argc, argv, "svh" ) ) != EOF ) @@ -31668,10 +31668,10 @@ int Abc_CommandAbc9Test( Abc_Frame_t * pAbc, int argc, char ** argv ) // Unr_ManTest( pAbc->pGia ); // Mig_ManTest( pAbc->pGia ); // Gia_ManVerifyWithBoxes( pAbc->pGia ); -// pTemp = Gia_SweeperFraigTest( pAbc->pGia, 4, 1000, 0 ); -// pTemp = Gia_ManOptimizeRing( pAbc->pGia ); -// Abc_FrameUpdateGia( pAbc, pTemp ); // Gia_ManCollectSeqTest( pAbc->pGia ); +// pTemp = Gia_ManOptimizeRing( pAbc->pGia ); + pTemp = Gia_SweeperFraigTest( pAbc->pGia, 4, 1000, 0 ); + Abc_FrameUpdateGia( pAbc, pTemp ); return 0; usage: Abc_Print( -2, "usage: &test [-svh]\n" ); diff --git a/src/proof/ssc/sscCore.c b/src/proof/ssc/sscCore.c index 43d0e250..1a57a47c 100644 --- a/src/proof/ssc/sscCore.c +++ b/src/proof/ssc/sscCore.c @@ -298,6 +298,7 @@ clk = clock(); { p->nSatCallsUnsat++; pObj->Value = Abc_LitNotCond( pRepr->Value, pRepr->fPhase ^ pObj->fPhase ); + Gia_ObjSetProved( pAig, i ); } else if ( status == l_True ) { @@ -329,9 +330,10 @@ clk = clock(); p->timeSimSat += clock() - clk; } // Gia_ManEquivPrintClasses( pAig, 1, 0 ); +// Gia_ManPrint( pAig ); // generate the resulting AIG - pResult = Gia_ManEquivReduce( pAig, 1, 0, 0 ); + pResult = Gia_ManEquivReduce( pAig, 0, 0, 1, 0 ); if ( pResult == NULL ) { printf( "There is no equivalences.\n" ); |