summaryrefslogtreecommitdiffstats
path: root/src/aig/gia/giaScl.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2009-03-10 08:01:00 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2009-03-10 08:01:00 -0700
commit32314347bae6ddcd841a268e797ec4da45726abb (patch)
treee2e5fd1711f04a06d0da2b8003bc02cb9a5dd446 /src/aig/gia/giaScl.c
parentc03f9b516bed2c06ec2bfc78617eba5fc9a11c32 (diff)
downloadabc-32314347bae6ddcd841a268e797ec4da45726abb.tar.gz
abc-32314347bae6ddcd841a268e797ec4da45726abb.tar.bz2
abc-32314347bae6ddcd841a268e797ec4da45726abb.zip
Version abc90310
Diffstat (limited to 'src/aig/gia/giaScl.c')
-rw-r--r--src/aig/gia/giaScl.c52
1 files changed, 34 insertions, 18 deletions
diff --git a/src/aig/gia/giaScl.c b/src/aig/gia/giaScl.c
index 3f72b0b9..9058af7d 100644
--- a/src/aig/gia/giaScl.c
+++ b/src/aig/gia/giaScl.c
@@ -30,7 +30,7 @@
/**Function*************************************************************
- Synopsis [Returns the number of unmarked nodes.]
+ Synopsis [Marks unreachable internal nodes and returned their number.]
Description []
@@ -45,13 +45,13 @@ int Gia_ManCombMarkUsed_rec( Gia_Man_t * p, Gia_Obj_t * pObj )
return 0;
pObj->fMark0 = 0;
assert( Gia_ObjIsAnd(pObj) );
- return Gia_ManCombMarkUsed_rec( p, Gia_ObjFanin0(pObj) ) +
- Gia_ManCombMarkUsed_rec( p, Gia_ObjFanin1(pObj) ) + 1;
+ return 1 + Gia_ManCombMarkUsed_rec( p, Gia_ObjFanin0(pObj) )
+ + Gia_ManCombMarkUsed_rec( p, Gia_ObjFanin1(pObj) );
}
/**Function*************************************************************
- Synopsis [Returns the number of unused nodes.]
+ Synopsis [Marks unreachable internal nodes and returned their number.]
Description []
@@ -90,7 +90,7 @@ Gia_Man_t * Gia_ManCleanup( Gia_Man_t * p )
/**Function*************************************************************
- Synopsis [Marks CIs/COs reachable from POs.]
+ Synopsis [Marks CIs/COs/ANDs unreachable from POs.]
Description []
@@ -99,29 +99,26 @@ Gia_Man_t * Gia_ManCleanup( Gia_Man_t * p )
SeeAlso []
***********************************************************************/
-void Gia_ManSeqMarkUsed_rec( Gia_Man_t * p, Gia_Obj_t * pObj, Vec_Int_t * vRoots )
+int Gia_ManSeqMarkUsed_rec( Gia_Man_t * p, Gia_Obj_t * pObj, Vec_Int_t * vRoots )
{
if ( !pObj->fMark0 )
- return;
+ return 0;
pObj->fMark0 = 0;
if ( Gia_ObjIsCo(pObj) )
- {
- Gia_ManSeqMarkUsed_rec( p, Gia_ObjFanin0(pObj), vRoots );
- return;
- }
+ return Gia_ManSeqMarkUsed_rec( p, Gia_ObjFanin0(pObj), vRoots );
if ( Gia_ObjIsRo(p, pObj) )
{
Vec_IntPush( vRoots, Gia_ObjId(p, Gia_ObjRoToRi(p, pObj)) );
- return;
+ return 0;
}
assert( Gia_ObjIsAnd(pObj) );
- Gia_ManSeqMarkUsed_rec( p, Gia_ObjFanin0(pObj), vRoots );
- Gia_ManSeqMarkUsed_rec( p, Gia_ObjFanin1(pObj), vRoots );
+ return 1 + Gia_ManSeqMarkUsed_rec( p, Gia_ObjFanin0(pObj), vRoots )
+ + Gia_ManSeqMarkUsed_rec( p, Gia_ObjFanin1(pObj), vRoots );
}
/**Function*************************************************************
- Synopsis [Performs sequential cleanup.]
+ Synopsis [Marks CIs/COs/ANDs unreachable from POs.]
Description []
@@ -130,19 +127,38 @@ void Gia_ManSeqMarkUsed_rec( Gia_Man_t * p, Gia_Obj_t * pObj, Vec_Int_t * vRoots
SeeAlso []
***********************************************************************/
-Gia_Man_t * Gia_ManSeqCleanup( Gia_Man_t * p )
+int Gia_ManSeqMarkUsed( Gia_Man_t * p )
{
Vec_Int_t * vRoots;
Gia_Obj_t * pObj;
- int i;
+ int i, nNodes = 0;
Gia_ManSetMark0( p );
Gia_ManConst0(p)->fMark0 = 0;
Gia_ManForEachPi( p, pObj, i )
pObj->fMark0 = 0;
+ Gia_ManForEachPo( p, pObj, i )
+ pObj->fMark0 = 0;
vRoots = Gia_ManCollectPoIds( p );
Gia_ManForEachObjVec( vRoots, p, pObj, i )
- Gia_ManSeqMarkUsed_rec( p, pObj, vRoots );
+ nNodes += Gia_ManSeqMarkUsed_rec( p, pObj, vRoots );
Vec_IntFree( vRoots );
+ return nNodes;
+}
+
+/**Function*************************************************************
+
+ Synopsis [Performs sequential cleanup.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Gia_Man_t * Gia_ManSeqCleanup( Gia_Man_t * p )
+{
+ Gia_ManSeqMarkUsed( p );
return Gia_ManDupMarked( p );
}