From 2dc38429884b93a04ef917cf75602437b421adf1 Mon Sep 17 00:00:00 2001 From: Alan Mishchenko Date: Sun, 13 Apr 2008 08:01:00 -0700 Subject: Version abc80413 --- src/aig/ntl/ntlSweep.c | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) (limited to 'src/aig/ntl/ntlSweep.c') diff --git a/src/aig/ntl/ntlSweep.c b/src/aig/ntl/ntlSweep.c index 3b9cd61f..000b8f0a 100644 --- a/src/aig/ntl/ntlSweep.c +++ b/src/aig/ntl/ntlSweep.c @@ -90,31 +90,23 @@ void Ntl_ManSweepMark( Ntl_Man_t * p ) SeeAlso [] ***********************************************************************/ -Ntl_Man_t * Ntl_ManSweep( Ntl_Man_t * p, Aig_Man_t * pAig, int fVerbose ) +int Ntl_ManSweep( Ntl_Man_t * p, int fVerbose ) { int nObjsOld[NTL_OBJ_VOID]; - Ntl_Man_t * pNew; Ntl_Mod_t * pRoot; Ntl_Net_t * pNet; Ntl_Obj_t * pObj; int i, k, nNetsOld; - - // insert the AIG into the netlist - pNew = Ntl_ManInsertAig( p, pAig ); - if ( pNew == NULL ) - { - printf( "Ntl_ManSweep(): Inserting AIG has failed.\n" ); - return NULL; - } + int Counter = 0; // remember the number of objects - pRoot = Ntl_ManRootModel( pNew ); + pRoot = Ntl_ManRootModel( p ); for ( i = 0; i < NTL_OBJ_VOID; i++ ) nObjsOld[i] = pRoot->nObjs[i]; nNetsOld = Ntl_ModelCountNets(pRoot); // mark the nets that do not fanout into POs - Ntl_ManSweepMark( pNew ); + Ntl_ManSweepMark( p ); // remove the useless objects and their nets Ntl_ModelForEachObj( pRoot, pObj, i ) @@ -126,20 +118,22 @@ Ntl_Man_t * Ntl_ManSweep( Ntl_Man_t * p, Aig_Man_t * pAig, int fVerbose ) } // remove the fanout nets Ntl_ObjForEachFanout( pObj, pNet, k ) - Ntl_ModelDeleteNet( pRoot, Ntl_ObjFanout0(pObj) ); + if ( pNet != NULL ) + Ntl_ModelDeleteNet( pRoot, pNet ); // remove the object if ( Ntl_ObjIsNode(pObj) && Ntl_ObjFaninNum(pObj) == 1 ) pRoot->nObjs[NTL_OBJ_LUT1]--; - else + else pRoot->nObjs[pObj->Type]--; Vec_PtrWriteEntry( pRoot->vObjs, pObj->Id, NULL ); - pObj->Id = NTL_OBJ_NONE; + pObj->Type = NTL_OBJ_NONE; + Counter++; } // print detailed statistics of sweeping if ( fVerbose ) { - printf( "Sweep:" ); + printf( "Swept away:" ); printf( " Node = %d (%4.1f %%)", nObjsOld[NTL_OBJ_NODE] - pRoot->nObjs[NTL_OBJ_NODE], !nObjsOld[NTL_OBJ_NODE]? 0.0: 100.0 * (nObjsOld[NTL_OBJ_NODE] - pRoot->nObjs[NTL_OBJ_NODE]) / nObjsOld[NTL_OBJ_NODE] ); @@ -153,9 +147,10 @@ Ntl_Man_t * Ntl_ManSweep( Ntl_Man_t * p, Aig_Man_t * pAig, 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" ); -// printf( "Also, sweep reduced %d nets.\n", nNetsOld - Ntl_ModelCountNets(pRoot) ); } - return pNew; + if ( !Ntl_ManCheck( p ) ) + printf( "Ntl_ManSweep: The check has failed for design %s.\n", p->pName ); + return Counter; } //////////////////////////////////////////////////////////////////////// -- cgit v1.2.3