summaryrefslogtreecommitdiffstats
path: root/src/aig/ntl/ntlSweep.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/aig/ntl/ntlSweep.c')
-rw-r--r--src/aig/ntl/ntlSweep.c31
1 files changed, 13 insertions, 18 deletions
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;
}
////////////////////////////////////////////////////////////////////////