From ee11ee1833c01a4705b52210e122db298825d388 Mon Sep 17 00:00:00 2001 From: Alan Mishchenko Date: Wed, 25 Sep 2013 13:18:21 -0700 Subject: Changes to enable decomposition of non-DSD functions. --- src/aig/gia/gia.h | 1 + src/aig/gia/giaUtil.c | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) (limited to 'src/aig/gia') diff --git a/src/aig/gia/gia.h b/src/aig/gia/gia.h index 70fda8d4..5a6148d0 100644 --- a/src/aig/gia/gia.h +++ b/src/aig/gia/gia.h @@ -1227,6 +1227,7 @@ extern void Gia_ObjPrint( Gia_Man_t * p, Gia_Obj_t * pObj ); extern void Gia_ManPrint( Gia_Man_t * p ); extern void Gia_ManPrintCo( Gia_Man_t * p, Gia_Obj_t * pObj ); extern void Gia_ManPrintCone( Gia_Man_t * p, Gia_Obj_t * pObj, int * pLeaves, int nLeaves, Vec_Int_t * vNodes ); +extern void Gia_ManPrintCone2( Gia_Man_t * p, Gia_Obj_t * pObj ); extern void Gia_ManInvertConstraints( Gia_Man_t * pAig ); extern void Gia_ManInvertPos( Gia_Man_t * pAig ); extern int Gia_ManCompare( Gia_Man_t * p1, Gia_Man_t * p2 ); diff --git a/src/aig/gia/giaUtil.c b/src/aig/gia/giaUtil.c index cad6f5ad..cf1aa762 100644 --- a/src/aig/gia/giaUtil.c +++ b/src/aig/gia/giaUtil.c @@ -1194,6 +1194,7 @@ void Gia_ManPrintCo( Gia_Man_t * p, Gia_Obj_t * pObj ) Gia_ManPrintCo_rec( p, Gia_ObjFanin0(pObj) ); Gia_ObjPrint( p, pObj ); } + void Gia_ManPrintCollect_rec( Gia_Man_t * p, Gia_Obj_t * pObj, Vec_Int_t * vNodes ) { if ( Vec_IntFind(vNodes, Gia_ObjId(p, pObj)) >= 0 ) @@ -1215,6 +1216,28 @@ void Gia_ManPrintCone( Gia_Man_t * p, Gia_Obj_t * pObj, int * pLeaves, int nLeav Gia_ObjPrint( p, pObj ); } +void Gia_ManPrintCollect2_rec( Gia_Man_t * p, Gia_Obj_t * pObj, Vec_Int_t * vNodes ) +{ + if ( Vec_IntFind(vNodes, Gia_ObjId(p, pObj)) >= 0 ) + return; + if ( Gia_ObjIsCo(pObj) || Gia_ObjIsAnd(pObj) ) + Gia_ManPrintCollect2_rec( p, Gia_ObjFanin0(pObj), vNodes ); + if ( Gia_ObjIsAnd(pObj) ) + Gia_ManPrintCollect2_rec( p, Gia_ObjFanin1(pObj), vNodes ); + Vec_IntPush( vNodes, Gia_ObjId(p, pObj) ); +} +void Gia_ManPrintCone2( Gia_Man_t * p, Gia_Obj_t * pObj ) +{ + Vec_Int_t * vNodes; + int i; + vNodes = Vec_IntAlloc( 100 ); + Gia_ManPrintCollect2_rec( p, pObj, vNodes ); + printf( "GIA logic cone for node %d:\n", Gia_ObjId(p, pObj) ); + Gia_ManForEachObjVec( vNodes, p, pObj, i ) + Gia_ObjPrint( p, pObj ); + Vec_IntFree( vNodes ); +} + /**Function************************************************************* Synopsis [Complements the constraint outputs.] -- cgit v1.2.3