summaryrefslogtreecommitdiffstats
path: root/src/opt
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2008-02-09 08:01:00 -0800
committerAlan Mishchenko <alanmi@berkeley.edu>2008-02-09 08:01:00 -0800
commitd9760b04a80adbb44a203aeb614ab6576171aa9b (patch)
treebf9487e99c91b2d4ca5d56a956a424205c7a18e4 /src/opt
parentf2d4f6c26eb610cf4843004fc6955a1548aa9f8f (diff)
downloadabc-d9760b04a80adbb44a203aeb614ab6576171aa9b.tar.gz
abc-d9760b04a80adbb44a203aeb614ab6576171aa9b.tar.bz2
abc-d9760b04a80adbb44a203aeb614ab6576171aa9b.zip
Version abc80209
Diffstat (limited to 'src/opt')
-rw-r--r--src/opt/mfs/mfsCore.c1
-rw-r--r--src/opt/mfs/mfsInt.h1
-rw-r--r--src/opt/mfs/mfsMan.c2
-rw-r--r--src/opt/mfs/mfsStrash.c23
4 files changed, 26 insertions, 1 deletions
diff --git a/src/opt/mfs/mfsCore.c b/src/opt/mfs/mfsCore.c
index aed0abe5..082b35d4 100644
--- a/src/opt/mfs/mfsCore.c
+++ b/src/opt/mfs/mfsCore.c
@@ -175,6 +175,7 @@ int Abc_NtkMfs( Abc_Ntk_t * pNtk, Mfs_Par_t * pPars )
pTemp = Abc_NtkStrash( pNtk->pExcare, 0, 0, 0 );
p->pCare = Abc_NtkToDar( pTemp, 0 );
Abc_NtkDelete( pTemp );
+ p->vSuppsInv = Aig_ManSupportsInverse( p->pCare );
}
// if ( pPars->fVerbose )
{
diff --git a/src/opt/mfs/mfsInt.h b/src/opt/mfs/mfsInt.h
index ddd16407..e51e0bba 100644
--- a/src/opt/mfs/mfsInt.h
+++ b/src/opt/mfs/mfsInt.h
@@ -49,6 +49,7 @@ struct Mfs_Man_t_
Mfs_Par_t * pPars;
Abc_Ntk_t * pNtk;
Aig_Man_t * pCare;
+ Vec_Ptr_t * vSuppsInv;
int nFaninMax;
// intermeditate data for the node
Vec_Ptr_t * vRoots; // the roots of the window
diff --git a/src/opt/mfs/mfsMan.c b/src/opt/mfs/mfsMan.c
index 519b855d..768e5295 100644
--- a/src/opt/mfs/mfsMan.c
+++ b/src/opt/mfs/mfsMan.c
@@ -155,6 +155,8 @@ void Mfs_ManStop( Mfs_Man_t * p )
Mfs_ManPrint( p );
if ( p->pCare )
Aig_ManStop( p->pCare );
+ if ( p->vSuppsInv )
+ Vec_VecFree( (Vec_Vec_t *)p->vSuppsInv );
Mfs_ManClean( p );
Int_ManFree( p->pMan );
Vec_IntFree( p->vMem );
diff --git a/src/opt/mfs/mfsStrash.c b/src/opt/mfs/mfsStrash.c
index 8e945045..a3475752 100644
--- a/src/opt/mfs/mfsStrash.c
+++ b/src/opt/mfs/mfsStrash.c
@@ -179,7 +179,8 @@ Aig_Man_t * Abc_NtkConstructAig( Mfs_Man_t * p, Abc_Obj_t * pNode )
Aig_Man_t * pMan;
Abc_Obj_t * pFanin;
Aig_Obj_t * pObjAig, * pPi, * pPo;
- int i;
+ Vec_Int_t * vOuts;
+ int i, k, iOut;
// start the new manager
pMan = Aig_ManStart( 1000 );
// construct the root node's AIG cone
@@ -197,6 +198,25 @@ Aig_Man_t * Abc_NtkConstructAig( Mfs_Man_t * p, Abc_Obj_t * pNode )
pPi->pData = pFanin->pCopy;
}
// construct the constraints
+ Vec_PtrForEachEntry( p->vSupp, pFanin, i )
+ {
+ vOuts = Vec_PtrEntry( p->vSuppsInv, (int)pFanin->pData );
+ Vec_IntForEachEntry( vOuts, iOut, k )
+ {
+ pPo = Aig_ManPo( p->pCare, iOut );
+ if ( Aig_ObjIsTravIdCurrent( p->pCare, pPo ) )
+ continue;
+ Aig_ObjSetTravIdCurrent( p->pCare, pPo );
+ if ( Aig_ObjFanin0(pPo) == Aig_ManConst1(p->pCare) )
+ continue;
+ pObjAig = Abc_NtkConstructCare_rec( p->pCare, Aig_ObjFanin0(pPo), pMan );
+ if ( pObjAig == NULL )
+ continue;
+ pObjAig = Aig_NotCond( pObjAig, Aig_ObjFaninC0(pPo) );
+ Aig_ObjCreatePo( pMan, pObjAig );
+ }
+ }
+/*
Aig_ManForEachPo( p->pCare, pPo, i )
{
// assert( Aig_ObjFanin0(pPo) != Aig_ManConst1(p->pCare) );
@@ -208,6 +228,7 @@ Aig_Man_t * Abc_NtkConstructAig( Mfs_Man_t * p, Abc_Obj_t * pNode )
pObjAig = Aig_NotCond( pObjAig, Aig_ObjFaninC0(pPo) );
Aig_ObjCreatePo( pMan, pObjAig );
}
+*/
}
if ( p->pPars->fResub )
{