summaryrefslogtreecommitdiffstats
path: root/src/aig/csw/cswMan.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/aig/csw/cswMan.c')
-rw-r--r--src/aig/csw/cswMan.c47
1 files changed, 32 insertions, 15 deletions
diff --git a/src/aig/csw/cswMan.c b/src/aig/csw/cswMan.c
index 180fecef..2af1a844 100644
--- a/src/aig/csw/cswMan.c
+++ b/src/aig/csw/cswMan.c
@@ -39,10 +39,10 @@
SeeAlso []
***********************************************************************/
-Csw_Man_t * Csw_ManStart( Dar_Man_t * pMan, int nCutsMax, int nLeafMax, int fVerbose )
+Csw_Man_t * Csw_ManStart( Aig_Man_t * pMan, int nCutsMax, int nLeafMax, int fVerbose )
{
Csw_Man_t * p;
- Dar_Obj_t * pObj;
+ Aig_Obj_t * pObj;
int i;
assert( nCutsMax >= 2 );
assert( nLeafMax <= 16 );
@@ -54,24 +54,26 @@ Csw_Man_t * Csw_ManStart( Dar_Man_t * pMan, int nCutsMax, int nLeafMax, int fVer
p->fVerbose = fVerbose;
p->pManAig = pMan;
// create the new manager
- p->pManRes = Dar_ManStartFrom( pMan );
- assert( Dar_ManPiNum(p->pManAig) == Dar_ManPiNum(p->pManRes) );
+ p->pManRes = Aig_ManStartFrom( pMan );
+ assert( Aig_ManPiNum(p->pManAig) == Aig_ManPiNum(p->pManRes) );
// allocate room for cuts and equivalent nodes
- p->pEquiv = ALLOC( Dar_Obj_t *, Dar_ManObjIdMax(pMan) + 1 );
- p->pCuts = ALLOC( Csw_Cut_t *, Dar_ManObjIdMax(pMan) + 1 );
- memset( p->pCuts, 0, sizeof(Dar_Obj_t *) * (Dar_ManObjIdMax(pMan) + 1) );
+ p->pnRefs = ALLOC( int, Aig_ManObjIdMax(pMan) + 1 );
+ p->pEquiv = ALLOC( Aig_Obj_t *, Aig_ManObjIdMax(pMan) + 1 );
+ p->pCuts = ALLOC( Csw_Cut_t *, Aig_ManObjIdMax(pMan) + 1 );
+ memset( p->pCuts, 0, sizeof(Aig_Obj_t *) * (Aig_ManObjIdMax(pMan) + 1) );
+ memset( p->pnRefs, 0, sizeof(int) * (Aig_ManObjIdMax(pMan) + 1) );
// allocate memory manager
- p->nTruthWords = Dar_TruthWordNum(nLeafMax);
+ p->nTruthWords = Aig_TruthWordNum(nLeafMax);
p->nCutSize = sizeof(Csw_Cut_t) + sizeof(int) * nLeafMax + sizeof(unsigned) * p->nTruthWords;
- p->pMemCuts = Dar_MmFixedStart( p->nCutSize * p->nCutsMax, 512 );
+ p->pMemCuts = Aig_MmFixedStart( p->nCutSize * p->nCutsMax, 512 );
// allocate hash table for cuts
- p->nTableSize = Cudd_PrimeCws( Dar_ManNodeNum(pMan) * p->nCutsMax / 2 );
+ p->nTableSize = Aig_PrimeCudd( Aig_ManNodeNum(pMan) * p->nCutsMax / 2 );
p->pTable = ALLOC( Csw_Cut_t *, p->nTableSize );
- memset( p->pTable, 0, sizeof(Dar_Obj_t *) * p->nTableSize );
+ memset( p->pTable, 0, sizeof(Aig_Obj_t *) * p->nTableSize );
// set the pointers to the available fraig nodes
- Csw_ObjSetEquiv( p, Dar_ManConst1(p->pManAig), Dar_ManConst1(p->pManRes) );
- Dar_ManForEachPi( p->pManAig, pObj, i )
- Csw_ObjSetEquiv( p, pObj, Dar_ManPi(p->pManRes, i) );
+ Csw_ObjSetEquiv( p, Aig_ManConst1(p->pManAig), Aig_ManConst1(p->pManRes) );
+ Aig_ManForEachPi( p->pManAig, pObj, i )
+ Csw_ObjSetEquiv( p, pObj, Aig_ManPi(p->pManRes, i) );
// room for temporary truth tables
p->puTemp[0] = ALLOC( unsigned, 4 * p->nTruthWords );
p->puTemp[1] = p->puTemp[0] + p->nTruthWords;
@@ -93,8 +95,23 @@ Csw_Man_t * Csw_ManStart( Dar_Man_t * pMan, int nCutsMax, int nLeafMax, int fVer
***********************************************************************/
void Csw_ManStop( Csw_Man_t * p )
{
+ if ( p->fVerbose )
+ {
+ int nNodesBeg = Aig_ManNodeNum(p->pManAig);
+ int nNodesEnd = Aig_ManNodeNum(p->pManRes);
+ printf( "Beg = %7d. End = %7d. (%6.2f %%) Try = %7d. Cuts = %8d.\n",
+ nNodesBeg, nNodesEnd, 100.0*(nNodesBeg-nNodesEnd)/nNodesBeg,
+ p->nNodesTried, Csw_TableCountCuts( p ) );
+ printf( "Triv0 = %6d. Triv1 = %6d. Triv2 = %6d. Cut-replace = %6d.\n",
+ p->nNodesTriv0, p->nNodesTriv1, p->nNodesTriv2, p->nNodesCuts );
+ PRTP( "Cuts ", p->timeCuts, p->timeTotal );
+ PRTP( "Hashing ", p->timeHash, p->timeTotal );
+ PRTP( "Other ", p->timeOther, p->timeTotal );
+ PRTP( "TOTAL ", p->timeTotal, p->timeTotal );
+ }
free( p->puTemp[0] );
- Dar_MmFixedStop( p->pMemCuts, 0 );
+ Aig_MmFixedStop( p->pMemCuts, 0 );
+ free( p->pnRefs );
free( p->pEquiv );
free( p->pCuts );
free( p->pTable );