diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2009-03-10 08:01:00 -0700 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2009-03-10 08:01:00 -0700 |
commit | 32314347bae6ddcd841a268e797ec4da45726abb (patch) | |
tree | e2e5fd1711f04a06d0da2b8003bc02cb9a5dd446 /src/aig/gia/giaScl.c | |
parent | c03f9b516bed2c06ec2bfc78617eba5fc9a11c32 (diff) | |
download | abc-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.c | 52 |
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 ); } |