summaryrefslogtreecommitdiffstats
path: root/src/base/abci/abcDar.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2012-11-09 12:43:03 -0800
committerAlan Mishchenko <alanmi@berkeley.edu>2012-11-09 12:43:03 -0800
commitfdcbb2cf374a456ffdef088a2f09d3acbbc86201 (patch)
tree940b0de3522e9006f37bdb6fb14b9f74534ed0e5 /src/base/abci/abcDar.c
parentaa2c7c05466c9e0a4beb5e536a6ea2cd70333433 (diff)
downloadabc-fdcbb2cf374a456ffdef088a2f09d3acbbc86201.tar.gz
abc-fdcbb2cf374a456ffdef088a2f09d3acbbc86201.tar.bz2
abc-fdcbb2cf374a456ffdef088a2f09d3acbbc86201.zip
Performance bug fix in choice generation.
Diffstat (limited to 'src/base/abci/abcDar.c')
-rw-r--r--src/base/abci/abcDar.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/src/base/abci/abcDar.c b/src/base/abci/abcDar.c
index dbb75f59..83da1c60 100644
--- a/src/base/abci/abcDar.c
+++ b/src/base/abci/abcDar.c
@@ -864,7 +864,6 @@ Abc_Ntk_t * Abc_NtkAfterTrim( Aig_Man_t * pMan, Abc_Ntk_t * pNtkOld )
***********************************************************************/
Abc_Ntk_t * Abc_NtkFromDarChoices( Abc_Ntk_t * pNtkOld, Aig_Man_t * pMan )
{
- Vec_Ptr_t * vNodes;
Abc_Ntk_t * pNtkNew;
Aig_Obj_t * pObj, * pTemp;
int i;
@@ -874,32 +873,40 @@ Abc_Ntk_t * Abc_NtkFromDarChoices( Abc_Ntk_t * pNtkOld, Aig_Man_t * pMan )
pNtkNew = Abc_NtkStartFrom( pNtkOld, ABC_NTK_STRASH, ABC_FUNC_AIG );
pNtkNew->nConstrs = pMan->nConstrs;
// transfer the pointers to the basic nodes
+ Aig_ManCleanData( pMan );
Aig_ManConst1(pMan)->pData = Abc_AigConst1(pNtkNew);
Aig_ManForEachCi( pMan, pObj, i )
pObj->pData = Abc_NtkCi(pNtkNew, i);
-
// rebuild the AIG
- vNodes = Aig_ManDfsChoices( pMan );
- Vec_PtrForEachEntry( Aig_Obj_t *, vNodes, pObj, i )
+ Aig_ManForEachNode( pMan, pObj, i )
{
pObj->pData = Abc_AigAnd( (Abc_Aig_t *)pNtkNew->pManFunc, (Abc_Obj_t *)Aig_ObjChild0Copy(pObj), (Abc_Obj_t *)Aig_ObjChild1Copy(pObj) );
if ( (pTemp = Aig_ObjEquiv(pMan, pObj)) )
{
- Abc_Obj_t * pAbcRepr, * pAbcObj;
assert( pTemp->pData != NULL );
- pAbcRepr = (Abc_Obj_t *)pObj->pData;
- pAbcObj = (Abc_Obj_t *)pTemp->pData;
- pAbcObj->pData = pAbcRepr->pData;
- pAbcRepr->pData = pAbcObj;
+ ((Abc_Obj_t *)pObj->pData)->pData = ((Abc_Obj_t *)pTemp->pData);
}
}
-//Abc_Print( 1, "Total = %d. Collected = %d.\n", Aig_ManNodeNum(pMan), Vec_PtrSize(vNodes) );
- Vec_PtrFree( vNodes );
// connect the PO nodes
Aig_ManForEachCo( pMan, pObj, i )
Abc_ObjAddFanin( Abc_NtkCo(pNtkNew, i), (Abc_Obj_t *)Aig_ObjChild0Copy(pObj) );
if ( !Abc_NtkCheck( pNtkNew ) )
Abc_Print( 1, "Abc_NtkFromDar(): Network check has failed.\n" );
+
+ // verify topological order
+ if ( 0 )
+ {
+ Abc_Obj_t * pNode;
+ Abc_NtkForEachNode( pNtkNew, pNode, i )
+ if ( Abc_AigNodeIsChoice( pNode ) )
+ {
+ int Counter = 0;
+ for ( pNode = Abc_ObjEquiv(pNode); pNode; pNode = Abc_ObjEquiv(pNode) )
+ Counter++;
+ printf( "%d ", Counter );
+ }
+ printf( "\n" );
+ }
return pNtkNew;
}