summaryrefslogtreecommitdiffstats
path: root/src/aig/dar/darTable.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2007-06-08 08:01:00 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2007-06-08 08:01:00 -0700
commitd47752011d94805850f8713258634d1bde5e639f (patch)
tree81236dfb564a1d5c3f4a8e2f6cd56f5b5f88313e /src/aig/dar/darTable.c
parentfeb8fb692e09a2fc7c1da4f2fcf605d398e940f2 (diff)
downloadabc-d47752011d94805850f8713258634d1bde5e639f.tar.gz
abc-d47752011d94805850f8713258634d1bde5e639f.tar.bz2
abc-d47752011d94805850f8713258634d1bde5e639f.zip
Version abc70608
Diffstat (limited to 'src/aig/dar/darTable.c')
-rw-r--r--src/aig/dar/darTable.c29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/aig/dar/darTable.c b/src/aig/dar/darTable.c
index 8b4bfaf3..af9956ec 100644
--- a/src/aig/dar/darTable.c
+++ b/src/aig/dar/darTable.c
@@ -39,8 +39,15 @@ static unsigned long Dar_Hash( Dar_Obj_t * pObj, int TableSize )
static Dar_Obj_t ** Dar_TableFind( Dar_Man_t * p, Dar_Obj_t * pObj )
{
Dar_Obj_t ** ppEntry;
- assert( Dar_ObjChild0(pObj) && Dar_ObjChild1(pObj) );
- assert( Dar_ObjFanin0(pObj)->Id < Dar_ObjFanin1(pObj)->Id );
+ if ( Dar_ObjIsLatch(pObj) )
+ {
+ assert( Dar_ObjChild0(pObj) && Dar_ObjChild1(pObj) == NULL );
+ }
+ else
+ {
+ assert( Dar_ObjChild0(pObj) && Dar_ObjChild1(pObj) );
+ assert( Dar_ObjFanin0(pObj)->Id < Dar_ObjFanin1(pObj)->Id );
+ }
for ( ppEntry = p->pTable + Dar_Hash(pObj, p->nTableSize); *ppEntry; ppEntry = &(*ppEntry)->pNext )
if ( *ppEntry == pObj )
return ppEntry;
@@ -70,10 +77,20 @@ Dar_Obj_t * Dar_TableLookup( Dar_Man_t * p, Dar_Obj_t * pGhost )
{
Dar_Obj_t * pEntry;
assert( !Dar_IsComplement(pGhost) );
- assert( Dar_ObjChild0(pGhost) && Dar_ObjChild1(pGhost) );
- assert( Dar_ObjFanin0(pGhost)->Id < Dar_ObjFanin1(pGhost)->Id );
- if ( !Dar_ObjRefs(Dar_ObjFanin0(pGhost)) || !Dar_ObjRefs(Dar_ObjFanin1(pGhost)) )
- return NULL;
+ if ( pGhost->Type == DAR_AIG_LATCH )
+ {
+ assert( Dar_ObjChild0(pGhost) && Dar_ObjChild1(pGhost) == NULL );
+ if ( !Dar_ObjRefs(Dar_ObjFanin0(pGhost)) )
+ return NULL;
+ }
+ else
+ {
+ assert( pGhost->Type == DAR_AIG_AND );
+ assert( Dar_ObjChild0(pGhost) && Dar_ObjChild1(pGhost) );
+ assert( Dar_ObjFanin0(pGhost)->Id < Dar_ObjFanin1(pGhost)->Id );
+ if ( !Dar_ObjRefs(Dar_ObjFanin0(pGhost)) || !Dar_ObjRefs(Dar_ObjFanin1(pGhost)) )
+ return NULL;
+ }
for ( pEntry = p->pTable[Dar_Hash(pGhost, p->nTableSize)]; pEntry; pEntry = pEntry->pNext )
{
if ( Dar_ObjChild0(pEntry) == Dar_ObjChild0(pGhost) &&