mirror of https://github.com/YosysHQ/abc.git
Fixing performance problem in 'cone -s'
This commit is contained in:
parent
f402293bcd
commit
8866a1aa6d
|
|
@ -727,6 +727,7 @@ extern ABC_DLL Abc_Obj_t * Abc_ObjAlloc( Abc_Ntk_t * pNtk, Abc_ObjType_t
|
|||
extern ABC_DLL void Abc_ObjRecycle( Abc_Obj_t * pObj );
|
||||
extern ABC_DLL Abc_Obj_t * Abc_NtkCreateObj( Abc_Ntk_t * pNtk, Abc_ObjType_t Type );
|
||||
extern ABC_DLL void Abc_NtkDeleteObj( Abc_Obj_t * pObj );
|
||||
extern ABC_DLL void Abc_NtkDeleteObjPo( Abc_Obj_t * pObj );
|
||||
extern ABC_DLL void Abc_NtkDeleteObj_rec( Abc_Obj_t * pObj, int fOnlyNodes );
|
||||
extern ABC_DLL void Abc_NtkDeleteAll_rec( Abc_Obj_t * pObj );
|
||||
extern ABC_DLL Abc_Obj_t * Abc_NtkDupObj( Abc_Ntk_t * pNtkNew, Abc_Obj_t * pObj, int fCopyName );
|
||||
|
|
|
|||
|
|
@ -1538,7 +1538,8 @@ void Abc_NtkMakeSeq( Abc_Ntk_t * pNtk, int nLatchesToAdd )
|
|||
Abc_Ntk_t * Abc_NtkMakeOnePo( Abc_Ntk_t * pNtkInit, int Output, int nRange )
|
||||
{
|
||||
Abc_Ntk_t * pNtk;
|
||||
Vec_Ptr_t * vPosToRemove;
|
||||
Vec_Ptr_t * vPosLeft;
|
||||
Vec_Ptr_t * vCosLeft;
|
||||
Abc_Obj_t * pNodePo;
|
||||
int i;
|
||||
assert( !Abc_NtkIsNetlist(pNtkInit) );
|
||||
|
|
@ -1556,17 +1557,22 @@ Abc_Ntk_t * Abc_NtkMakeOnePo( Abc_Ntk_t * pNtkInit, int Output, int nRange )
|
|||
if ( nRange < 1 )
|
||||
nRange = 1;
|
||||
|
||||
// collect POs to remove
|
||||
vPosToRemove = Vec_PtrAlloc( 100 );
|
||||
// filter POs
|
||||
vPosLeft = Vec_PtrAlloc( nRange );
|
||||
Abc_NtkForEachPo( pNtk, pNodePo, i )
|
||||
if ( i < Output || i >= Output + nRange )
|
||||
Vec_PtrPush( vPosToRemove, pNodePo );
|
||||
|
||||
// remove the POs
|
||||
Vec_PtrForEachEntry( Abc_Obj_t *, vPosToRemove, pNodePo, i )
|
||||
Abc_NtkDeleteObj( pNodePo );
|
||||
Vec_PtrFree( vPosToRemove );
|
||||
Abc_NtkDeleteObjPo( pNodePo );
|
||||
else
|
||||
Vec_PtrPush( vPosLeft, pNodePo );
|
||||
// filter COs
|
||||
vCosLeft = Vec_PtrDup( vPosLeft );
|
||||
for ( i = Abc_NtkPoNum(pNtk); i < Abc_NtkCoNum(pNtk); i++ )
|
||||
Vec_PtrPush( vCosLeft, Abc_NtkCo(pNtk, i) );
|
||||
// update arrays
|
||||
Vec_PtrFree( pNtk->vPos ); pNtk->vPos = vPosLeft;
|
||||
Vec_PtrFree( pNtk->vCos ); pNtk->vCos = vCosLeft;
|
||||
|
||||
// clean the network
|
||||
if ( Abc_NtkIsStrash(pNtk) )
|
||||
{
|
||||
Abc_AigCleanup( (Abc_Aig_t *)pNtk->pManFunc );
|
||||
|
|
|
|||
|
|
@ -228,6 +228,35 @@ void Abc_NtkDeleteObj( Abc_Obj_t * pObj )
|
|||
Abc_ObjRecycle( pObj );
|
||||
}
|
||||
|
||||
/**Function*************************************************************
|
||||
|
||||
Synopsis [Deletes the PO from the network.]
|
||||
|
||||
Description []
|
||||
|
||||
SideEffects []
|
||||
|
||||
SeeAlso []
|
||||
|
||||
***********************************************************************/
|
||||
void Abc_NtkDeleteObjPo( Abc_Obj_t * pObj )
|
||||
{
|
||||
assert( Abc_ObjIsPo(pObj) );
|
||||
// remove from the table of names
|
||||
if ( Nm_ManFindNameById(pObj->pNtk->pManName, pObj->Id) )
|
||||
Nm_ManDeleteIdName(pObj->pNtk->pManName, pObj->Id);
|
||||
// delete fanins
|
||||
Abc_ObjDeleteFanin( pObj, Abc_ObjFanin0(pObj) );
|
||||
// remove from the list of objects
|
||||
Vec_PtrWriteEntry( pObj->pNtk->vObjs, pObj->Id, NULL );
|
||||
pObj->Id = (1<<26)-1;
|
||||
pObj->pNtk->nObjCounts[pObj->Type]--;
|
||||
pObj->pNtk->nObjs--;
|
||||
// recycle the object memory
|
||||
Abc_ObjRecycle( pObj );
|
||||
}
|
||||
|
||||
|
||||
/**Function*************************************************************
|
||||
|
||||
Synopsis [Deletes the node and MFFC of the node.]
|
||||
|
|
|
|||
Loading…
Reference in New Issue