summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2013-02-20 17:13:29 -0800
committerAlan Mishchenko <alanmi@berkeley.edu>2013-02-20 17:13:29 -0800
commitaa7daf1e51742a2f9748237263d0114738873b3b (patch)
tree2a449cd2c2869f9613aa6146199289f4e451b3cf
parent3e59c102e8abddc7cadb6d0cbbaa9b82011aa9d1 (diff)
downloadabc-aa7daf1e51742a2f9748237263d0114738873b3b.tar.gz
abc-aa7daf1e51742a2f9748237263d0114738873b3b.tar.bz2
abc-aa7daf1e51742a2f9748237263d0114738873b3b.zip
Integrating sweeping information.
-rw-r--r--src/aig/gia/giaSweep.c34
-rw-r--r--src/aig/gia/giaTim.c25
-rw-r--r--src/misc/tim/timMan.c2
3 files changed, 26 insertions, 35 deletions
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;
}
diff --git a/src/misc/tim/timMan.c b/src/misc/tim/timMan.c
index bfebef05..3ec2d8ac 100644
--- a/src/misc/tim/timMan.c
+++ b/src/misc/tim/timMan.c
@@ -184,7 +184,7 @@ Tim_Man_t * Tim_ManTrim( Tim_Man_t * p, Vec_Int_t * vBoxPres )
Tim_ManForEachCo( p, pObj, i )
pObj->TravId = 0;
// create new manager
- pNew = Tim_ManStart( p->nCis - nNewCis, p->nCos - nNewCos );
+ pNew = Tim_ManStart( nNewCis, nNewCos );
// copy box connectivity information
memcpy( pNew->pCis, p->pCis, sizeof(Tim_Obj_t) * Tim_ManPiNum(p) );
memcpy( pNew->pCos, p->pCos, sizeof(Tim_Obj_t) * Tim_ManPoNum(p) );