From aa7daf1e51742a2f9748237263d0114738873b3b Mon Sep 17 00:00:00 2001 From: Alan Mishchenko Date: Wed, 20 Feb 2013 17:13:29 -0800 Subject: Integrating sweeping information. --- src/aig/gia/giaSweep.c | 34 ++++++++++++---------------------- src/aig/gia/giaTim.c | 25 +++++++++++++------------ 2 files changed, 25 insertions(+), 34 deletions(-) (limited to 'src/aig') diff --git a/src/aig/gia/giaSweep.c b/src/aig/gia/giaSweep.c index fe4c275c..358fb5fb 100644 --- a/src/aig/gia/giaSweep.c +++ b/src/aig/gia/giaSweep.c @@ -178,7 +178,7 @@ Gia_Man_t * Gia_ManFraigReduceGia( Gia_Man_t * p, int * pReprs ) Gia_ManForEachObj( p, pObj, i ) { if ( Gia_ObjIsAnd(pObj) ) - pObj->Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0CopyRepr(p, pObj, pReprs), Gia_ObjFanin1CopyRepr(p, pObj, pReprs) ); + pObj->Value = Gia_ManHashAnd( pNew, Gia_ObjFanin0CopyRepr(p, pObj, pReprs), Gia_ObjFanin1CopyRepr(p, pObj, pReprs) ); else if ( Gia_ObjIsCi(pObj) ) pObj->Value = Gia_ManAppendCi( pNew ); else if ( Gia_ObjIsCo(pObj) ) @@ -188,6 +188,15 @@ Gia_Man_t * Gia_ManFraigReduceGia( Gia_Man_t * p, int * pReprs ) else assert( 0 ); } Gia_ManHashStop( pNew ); +/* + { + Gia_Man_t * pTemp; + Gia_ManPrintStats( pNew, 0, 0, 0 ); + pNew = Gia_ManCleanup( pTemp = pNew ); + Gia_ManStop( pTemp ); + Gia_ManPrintStats( pNew, 0, 0, 0 ); + } +*/ return pNew; } @@ -210,17 +219,6 @@ int * Gia_ManFraigSelectReprs( Gia_Man_t * p, Gia_Man_t * pGia, int fVerbose ) int i, iLitGia, iLitGia2, iReprGia, fCompl; int nConsts = 0, nReprs = 0; pGia2Abc[0] = 0; -/* - Gia_ManForEachObj( p, pObj, i ) - printf( "%d %d ", i, Gia_ObjValue(pObj) ); - printf( "\n" ); - printf( "\n" ); - - Gia_ManForEachObj( pGia, pObj, i ) - printf( "%d %d ", i, Gia_ObjReprSelf(pGia, i) ); - printf( "\n" ); - printf( "\n" ); -*/ Gia_ManSetPhase( pGia ); Gia_ManForEachObj1( p, pObj, i ) { @@ -246,6 +244,8 @@ int * Gia_ManFraigSelectReprs( Gia_Man_t * p, Gia_Man_t * pGia, int fVerbose ) nConsts++; else nReprs++; + assert( Abc_Lit2Var(pReprs[i]) < i ); +// printf( "%d -> %d\n", i, Abc_Lit2Var(pReprs[i]) ); } } ABC_FREE( pGia2Abc ); @@ -308,9 +308,6 @@ Gia_Man_t * Gia_ManFraigSweep( Gia_Man_t * p, void * pPars ) pNew = Gia_ManDupWithHierarchy( p, NULL ); if ( pNew == NULL ) return NULL; - // normalizing AIG - pNew = Gia_ManDupNormalize( pTemp = pNew ); - Gia_ManStop( pTemp ); // find global equivalences pNew->pManTime = p->pManTime; pGia = Gia_ManDupWithBoxes( pNew, p->pAigExtra ); @@ -323,13 +320,6 @@ Gia_Man_t * Gia_ManFraigSweep( Gia_Man_t * p, void * pPars ) pNew = Gia_ManFraigReduceGia( pTemp = pNew, pReprs ); Gia_ManStop( pTemp ); ABC_FREE( pReprs ); - // order reduced AIG - pNew->pManTime = p->pManTime; - pNew = Gia_ManDupWithHierarchy( pTemp = pNew, NULL ); - pTemp->pManTime = NULL; - Gia_ManStop( pTemp ); - if ( pNew == NULL ) - return NULL; // derive new AIG assert( pNew->pManTime == NULL ); assert( pNew->pAigExtra == NULL ); diff --git a/src/aig/gia/giaTim.c b/src/aig/gia/giaTim.c index 5d08b783..c774e309 100644 --- a/src/aig/gia/giaTim.c +++ b/src/aig/gia/giaTim.c @@ -199,7 +199,7 @@ Vec_Int_t * Gia_ManDupFindOrderWithHie( Gia_Man_t * p ) Gia_Obj_t * pObj; int i, k, curCi, curCo; assert( p->pManTime != NULL ); - assert( Gia_ManIsNormalized( p ) ); +// assert( Gia_ManIsNormalized( p ) ); // start trav IDs Gia_ManIncrementTravId( p ); // start the array @@ -655,21 +655,22 @@ void * Gia_ManUpdateTimMan( Gia_Man_t * p, Vec_Int_t * vBoxPres ) ***********************************************************************/ Gia_Man_t * Gia_ManUpdateExtraAig( void * pTime, Gia_Man_t * pAig, Vec_Int_t * vBoxPres ) { - Gia_Man_t * pNew; + Gia_Man_t * pNew = NULL; Vec_Int_t * vOutPres; Tim_Man_t * pManTime = (Tim_Man_t *)pTime; - int i, k, curPo; + int i, k, curPo = 0; assert( Vec_IntSize(vBoxPres) == Tim_ManBoxNum(pManTime) ); - assert( Gia_ManPoNum(pAig) == Tim_ManCoNum(pManTime) - Tim_ManPoNum(pManTime) ); + assert( Gia_ManPoNum(pAig) == Tim_ManCiNum(pManTime) - Tim_ManPiNum(pManTime) ); vOutPres = Vec_IntAlloc( 100 ); - for ( curPo = i = 0; i < Tim_ManBoxNum(pManTime); i++, curPo += Tim_ManBoxInputNum(pManTime, i) ) - if ( Vec_IntEntry(vBoxPres, i) ) - for ( k = 0; k < Tim_ManBoxInputNum(pManTime, i); k++ ) - Vec_IntPush( vOutPres, curPo + k ); - assert( curPo == Tim_ManCoNum(pManTime) - Tim_ManPoNum(pManTime) ); - for ( k = curPo; k < Tim_ManCoNum(pManTime); k++ ) - Vec_IntPush( vOutPres, k ); - pNew = Gia_ManDupOutputVec( pAig, vOutPres ); + for ( i = 0; i < Tim_ManBoxNum(pManTime); i++ ) + { + for ( k = 0; k < Tim_ManBoxOutputNum(pManTime, i); k++ ) + Vec_IntPush( vOutPres, Vec_IntEntry(vBoxPres, i) ); + curPo += Tim_ManBoxOutputNum(pManTime, i); + } + assert( curPo == Gia_ManPoNum(pAig) ); + if ( Vec_IntSize(vOutPres) > 0 ) + pNew = Gia_ManDupOutputVec( pAig, vOutPres ); Vec_IntFree( vOutPres ); return pNew; } -- cgit v1.2.3