diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2008-05-10 08:01:00 -0700 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2008-05-10 08:01:00 -0700 |
commit | 0f03f34924b64814791347c5dcf0633dd244d341 (patch) | |
tree | 0b72993e4638a476ab4dc292311e6f3af35ffb2c /src/aig/ntl | |
parent | e94ccfd3fb07d22ed426e0386ccf536e470744b7 (diff) | |
download | abc-0f03f34924b64814791347c5dcf0633dd244d341.tar.gz abc-0f03f34924b64814791347c5dcf0633dd244d341.tar.bz2 abc-0f03f34924b64814791347c5dcf0633dd244d341.zip |
Version abc80510
Diffstat (limited to 'src/aig/ntl')
-rw-r--r-- | src/aig/ntl/ntl.h | 13 | ||||
-rw-r--r-- | src/aig/ntl/ntlSweep.c | 31 |
2 files changed, 36 insertions, 8 deletions
diff --git a/src/aig/ntl/ntl.h b/src/aig/ntl/ntl.h index 55581026..c4950650 100644 --- a/src/aig/ntl/ntl.h +++ b/src/aig/ntl/ntl.h @@ -98,6 +98,7 @@ struct Ntl_Mod_t_ float * pDelayTable; // other data members void * pCopy; + int nUsed, nRems; }; struct Ntl_Obj_t_ @@ -186,12 +187,12 @@ static inline void Ntl_ObjSetFanout( Ntl_Obj_t * p, Ntl_Net_t * pNet, int /// ITERATORS /// //////////////////////////////////////////////////////////////////////// -#define Ntl_ManForEachModel( p, pNtl, i ) \ - Vec_PtrForEachEntry( p->vModels, pNtl, i ) -#define Ntl_ManForEachCiNet( p, pNtl, i ) \ - Vec_PtrForEachEntry( p->vCis, pNtl, i ) -#define Ntl_ManForEachCoNet( p, pNtl, i ) \ - Vec_PtrForEachEntry( p->vCos, pNtl, i ) +#define Ntl_ManForEachModel( p, pMod, i ) \ + Vec_PtrForEachEntry( p->vModels, pMod, i ) +#define Ntl_ManForEachCiNet( p, pNet, i ) \ + Vec_PtrForEachEntry( p->vCis, pNet, i ) +#define Ntl_ManForEachCoNet( p, pNet, i ) \ + Vec_PtrForEachEntry( p->vCos, pNet, i ) #define Ntl_ManForEachNode( p, pObj, i ) \ for ( i = 0; (i < Vec_PtrSize(p->vNodes)) && (((pObj) = Vec_PtrEntry(p->vNodes, i)), 1); i++ ) \ if ( (pObj) == NULL || !Ntl_ObjIsNode(pObj) ) {} else diff --git a/src/aig/ntl/ntlSweep.c b/src/aig/ntl/ntlSweep.c index ed602297..8309e1b3 100644 --- a/src/aig/ntl/ntlSweep.c +++ b/src/aig/ntl/ntlSweep.c @@ -97,11 +97,11 @@ void Ntl_ManSweepMark( Ntl_Man_t * p ) int Ntl_ManSweep( Ntl_Man_t * p, int fVerbose ) { int nObjsOld[NTL_OBJ_VOID]; - Ntl_Mod_t * pRoot; + Ntl_Mod_t * pRoot, * pMod; Ntl_Net_t * pNet; Ntl_Obj_t * pObj; int i, k, nNetsOld; - int Counter = 0; + int ModelCounter = 0, Counter = 0; // remember the number of objects pRoot = Ntl_ManRootModel( p ); @@ -112,6 +112,23 @@ int Ntl_ManSweep( Ntl_Man_t * p, int fVerbose ) // mark the nets that do not fanout into POs Ntl_ManSweepMark( p ); + // count how many boxes of each type are swept away + if ( fVerbose ) + { + Ntl_ManForEachModel( p, pMod, i ) + pMod->nUsed = pMod->nRems = 0; + Ntl_ModelForEachObj( pRoot, pObj, i ) + if ( Ntl_ObjIsBox(pObj) && pObj->pImplem ) + { + pObj->pImplem->nUsed++; + if ( !pObj->fMark ) + { + if ( pObj->pImplem->nRems++ == 0 ) + ModelCounter++; + } + } + } + // remove the useless objects and their nets Ntl_ModelForEachObj( pRoot, pObj, i ) { @@ -134,6 +151,8 @@ int Ntl_ManSweep( Ntl_Man_t * p, int fVerbose ) Counter++; } + + // print detailed statistics of sweeping if ( fVerbose ) { @@ -151,6 +170,14 @@ int Ntl_ManSweep( Ntl_Man_t * p, int fVerbose ) nObjsOld[NTL_OBJ_BOX] - pRoot->nObjs[NTL_OBJ_BOX], !nObjsOld[NTL_OBJ_BOX]? 0.0: 100.0 * (nObjsOld[NTL_OBJ_BOX] - pRoot->nObjs[NTL_OBJ_BOX]) / nObjsOld[NTL_OBJ_BOX] ); printf( "\n" ); + if ( ModelCounter ) + { + printf( "Sweep removed %d boxed of %d types (out of %d types):\n", + nObjsOld[NTL_OBJ_BOX] - pRoot->nObjs[NTL_OBJ_BOX], ModelCounter, Vec_PtrSize(p->vModels)-1 ); + Ntl_ManForEachModel( p, pMod, i ) + if ( i ) + printf( "Model %3d : %-40s Swept = %5d. Left = %5d.\n", i, pMod->pName, pMod->nRems, pMod->nUsed-pMod->nRems ); + } } if ( !Ntl_ManCheck( p ) ) printf( "Ntl_ManSweep: The check has failed for design %s.\n", p->pName ); |