34static inline void Aig_ObjCleanGlobalBdd( DdManager * dd,
Aig_Obj_t * pObj ) { Cudd_RecursiveDeref( dd, (DdNode *)pObj->
pData ); pObj->
pData = NULL; }
53 DdNode * bFunc, * bFunc0, * bFunc1;
54 assert( !Aig_IsComplement(pNode) );
55 if ( Cudd_ReadKeys(dd)-Cudd_ReadDead(dd) > (
unsigned)nBddSizeMax )
59 printf(
"The number of live nodes reached %d.\n", nBddSizeMax );
64 if ( Aig_ObjGlobalBdd(pNode) == NULL )
67 bFunc0 =
Bbr_NodeGlobalBdds_rec( dd, Aig_ObjFanin0(pNode), nBddSizeMax, fDropInternal, pProgress, pCounter, fVerbose );
71 bFunc1 =
Bbr_NodeGlobalBdds_rec( dd, Aig_ObjFanin1(pNode), nBddSizeMax, fDropInternal, pProgress, pCounter, fVerbose );
75 bFunc0 = Cudd_NotCond( bFunc0, Aig_ObjFaninC0(pNode) );
76 bFunc1 = Cudd_NotCond( bFunc1, Aig_ObjFaninC1(pNode) );
78 bFunc = Cudd_bddAnd( dd, bFunc0, bFunc1 ); Cudd_Ref( bFunc );
79 Cudd_RecursiveDeref( dd, bFunc0 );
80 Cudd_RecursiveDeref( dd, bFunc1 );
84 assert( Aig_ObjGlobalBdd(pNode) == NULL );
85 Aig_ObjSetGlobalBdd( pNode, bFunc );
91 bFunc = Aig_ObjGlobalBdd(pNode);
93 if ( --pNode->
nRefs == 0 && fDropInternal )
96 Aig_ObjSetGlobalBdd( pNode, NULL );
165 dd = Cudd_Init( Aig_ManCiNum(
p), 0, CUDD_UNIQUE_SLOTS, CUDD_CACHE_SLOTS, 0 );
168 Cudd_AutodynEnable( dd, CUDD_REORDER_SYMM_SIFT );
172 Aig_ObjSetGlobalBdd( Aig_ManConst1(
p), dd->one ); Cudd_Ref( dd->one );
176 Aig_ObjSetGlobalBdd( pObj, dd->vars[i] ); Cudd_Ref( dd->vars[i] );
185 bFunc =
Bbr_NodeGlobalBdds_rec( dd, Aig_ObjFanin0(pObj), nBddSizeMax, fDropInternal, pProgress, &Counter, fVerbose );
189 printf(
"Constructing global BDDs is aborted.\n" );
196 bFunc = Cudd_NotCond( bFunc, Aig_ObjFaninC0(pObj) ); Cudd_Ref( bFunc );
197 Aig_ObjSetGlobalBdd( pObj, bFunc );
205 Cudd_ReduceHeap( dd, CUDD_REORDER_SYMM_SIFT, 1 );
206 Cudd_AutodynDisable( dd );
DdNode * Bbr_NodeGlobalBdds_rec(DdManager *dd, Aig_Obj_t *pNode, int nBddSizeMax, int fDropInternal, ProgressBar *pProgress, int *pCounter, int fVerbose)
FUNCTION DEFINITIONS ///.