summaryrefslogtreecommitdiffstats
path: root/src/proof/cec/cecClass.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2020-08-12 19:32:42 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2020-08-12 19:32:42 -0700
commit850d39fec30b46b049717ae0a7a5743396b14ecd (patch)
treecbdd0b663fd4583bb7a9429a07cb1269eb15147d /src/proof/cec/cecClass.c
parentb74b7dfc2d2065eebc800c9165a3e15caeb4453d (diff)
downloadabc-850d39fec30b46b049717ae0a7a5743396b14ecd.tar.gz
abc-850d39fec30b46b049717ae0a7a5743396b14ecd.tar.bz2
abc-850d39fec30b46b049717ae0a7a5743396b14ecd.zip
Making &cec use precomputed simulation info.
Diffstat (limited to 'src/proof/cec/cecClass.c')
-rw-r--r--src/proof/cec/cecClass.c33
1 files changed, 24 insertions, 9 deletions
diff --git a/src/proof/cec/cecClass.c b/src/proof/cec/cecClass.c
index 2d820c39..be88b9be 100644
--- a/src/proof/cec/cecClass.c
+++ b/src/proof/cec/cecClass.c
@@ -878,19 +878,34 @@ int Cec_ManSimClassesPrepare( Cec_ManSim_t * p, int LevelMax )
if ( pObj->Value )
Gia_ObjSetRepr( p->pAig, Gia_ObjId(p->pAig, pObj), 0 );
// perform simulation
- p->nWords = 1;
- do {
+ if ( p->pAig->nSimWords )
+ {
+ p->nWords = 2*p->pAig->nSimWords;
+ assert( Vec_WrdSize(p->pAig->vSimsPi) == Gia_ManCiNum(p->pAig) * p->pAig->nSimWords );
+ //Cec_ManSimCreateInfo( p, p->vCiSimInfo, p->vCoSimInfo );
+ for ( i = 0; i < Gia_ManCiNum(p->pAig); i++ )
+ memmove( Vec_PtrEntry(p->vCiSimInfo, i), Vec_WrdEntryP(p->pAig->vSimsPi, i*p->pAig->nSimWords), sizeof(word)*p->pAig->nSimWords );
+ if ( Cec_ManSimSimulateRound( p, p->vCiSimInfo, p->vCoSimInfo ) )
+ return 1;
if ( p->pPars->fVerbose )
Gia_ManEquivPrintClasses( p->pAig, 0, Cec_MemUsage(p) );
- for ( i = 0; i < 4; i++ )
- {
- Cec_ManSimCreateInfo( p, p->vCiSimInfo, p->vCoSimInfo );
- if ( Cec_ManSimSimulateRound( p, p->vCiSimInfo, p->vCoSimInfo ) )
- return 1;
+ }
+ else
+ {
+ p->nWords = 1;
+ do {
+ if ( p->pPars->fVerbose )
+ Gia_ManEquivPrintClasses( p->pAig, 0, Cec_MemUsage(p) );
+ for ( i = 0; i < 4; i++ )
+ {
+ Cec_ManSimCreateInfo( p, p->vCiSimInfo, p->vCoSimInfo );
+ if ( Cec_ManSimSimulateRound( p, p->vCiSimInfo, p->vCoSimInfo ) )
+ return 1;
+ }
+ p->nWords = 2 * p->nWords + 1;
}
- p->nWords = 2 * p->nWords + 1;
+ while ( p->nWords <= p->pPars->nWords );
}
- while ( p->nWords <= p->pPars->nWords );
return 0;
}