From 08253a50eba6c2b7f0346763c923a5abff20708e Mon Sep 17 00:00:00 2001 From: Alan Mishchenko Date: Mon, 26 Mar 2012 20:21:05 -0700 Subject: Logic sharing for multi-input gates (bug fix). --- src/base/abci/abcExtract.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/base/abci/abcExtract.c b/src/base/abci/abcExtract.c index c0d4d70c..100f88e1 100644 --- a/src/base/abci/abcExtract.c +++ b/src/base/abci/abcExtract.c @@ -43,7 +43,7 @@ struct Abc_ShaMan_t_ static inline word Abc_NtkSharePack( int Lev, int Id ) { return (((word)Lev) << 32) | Id; } static inline int Abc_NtkShareUnpackLev( word Num ) { return (Num >> 32); } -static inline int Abc_NtkShareUnpackId( word Num ) { return Num & 0xFFFF; } +static inline int Abc_NtkShareUnpackId( word Num ) { return Num & 0xFFFFFFFF; } //////////////////////////////////////////////////////////////////////// @@ -188,9 +188,12 @@ Vec_Wrd_t * Abc_NtkShareSuperAnd( Abc_Obj_t * pObj, int * pCounter ) } if ( i == -1 ) break; + assert( Abc_ObjIsNode(pRoot) ); // extract pObj0 = Abc_ObjChild0(pRoot); pObj1 = Abc_ObjChild1(pRoot); + assert( Abc_ObjIsNode(Abc_ObjRegular(pObj0)) || Abc_ObjIsCi(Abc_ObjRegular(pObj0)) ); + assert( Abc_ObjIsNode(Abc_ObjRegular(pObj1)) || Abc_ObjIsCi(Abc_ObjRegular(pObj1)) ); Vec_WrdPushOrder( vSuper, Abc_NtkSharePack(Abc_ObjLevel(Abc_ObjRegular(pObj0)), Abc_ObjToLit(pObj0)) ); Vec_WrdPushOrder( vSuper, Abc_NtkSharePack(Abc_ObjLevel(Abc_ObjRegular(pObj1)), Abc_ObjToLit(pObj1)) ); (*pCounter)++; @@ -217,6 +220,10 @@ Vec_Wrd_t * Abc_NtkShareSuperAnd( Abc_Obj_t * pObj, int * pCounter ) } Vec_WrdForEachEntry( vSuper, Num, i ) Vec_WrdWriteEntry( vSuper, i, Abc_NtkShareUnpackId(Num) ); + if ( Vec_WrdSize(vSuper) == 1 ) + { + int s = 0; + } return vSuper; } -- cgit v1.2.3