From f866920eb5603f60fb087c96607d58c94fb31f28 Mon Sep 17 00:00:00 2001 From: Alan Mishchenko Date: Sat, 2 Jul 2011 13:58:12 -0700 Subject: Added a new demitering feature for dual-output miters. --- src/aig/saig/saigMiter.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'src/aig/saig/saigMiter.c') diff --git a/src/aig/saig/saigMiter.c b/src/aig/saig/saigMiter.c index 0fdac6cc..be80f545 100644 --- a/src/aig/saig/saigMiter.c +++ b/src/aig/saig/saigMiter.c @@ -694,6 +694,63 @@ int Saig_ManDemiterSimpleDiff( Aig_Man_t * p, Aig_Man_t ** ppAig0, Aig_Man_t ** return 1; } +/**Function************************************************************* + + Synopsis [Returns 1 if AIG can be demitered.] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +int Saig_ManDemiterDual( Aig_Man_t * p, Aig_Man_t ** ppAig0, Aig_Man_t ** ppAig1 ) +{ + Aig_Man_t * pTemp; + Aig_Obj_t * pObj; + int i, k; + + if ( p->pFanData ) + Aig_ManFanoutStop( p ); + + k = 0; + pTemp = Aig_ManDupSimple( p ); + Saig_ManForEachPo( pTemp, pObj, i ) + { + if ( i & 1 ) + Aig_ObjDeletePo( pTemp, pObj ); + else + Vec_PtrWriteEntry( pTemp->vPos, k++, pObj ); + } + Saig_ManForEachLi( pTemp, pObj, i ) + Vec_PtrWriteEntry( pTemp->vPos, k++, pObj ); + Vec_PtrShrink( pTemp->vPos, k ); + pTemp->nTruePos = k - Saig_ManRegNum(pTemp); + Aig_ManSeqCleanup( pTemp ); + *ppAig0 = Aig_ManDupSimple( pTemp ); + Aig_ManStop( pTemp ); + + k = 0; + pTemp = Aig_ManDupSimple( p ); + Saig_ManForEachPo( pTemp, pObj, i ) + { + if ( i & 1 ) + Vec_PtrWriteEntry( pTemp->vPos, k++, pObj ); + else + Aig_ObjDeletePo( pTemp, pObj ); + } + Saig_ManForEachLi( pTemp, pObj, i ) + Vec_PtrWriteEntry( pTemp->vPos, k++, pObj ); + Vec_PtrShrink( pTemp->vPos, k ); + pTemp->nTruePos = k - Saig_ManRegNum(pTemp); + Aig_ManSeqCleanup( pTemp ); + *ppAig1 = Aig_ManDupSimple( pTemp ); + Aig_ManStop( pTemp ); + + return 1; +} + /**Function************************************************************* Synopsis [Duplicates the AIG to have constant-0 initial state.] -- cgit v1.2.3