54 DdNode * bSupp, * bTemp;
56 nSize = Cudd_ReadSize( (DdManager *)Vec_PtrEntry( vDdMans, 0 ) );
57 vSupps = Vec_PtrAlloc( 100 );
59 vOne = Vec_IntStart( nSize );
61 Vec_IntWriteEntry( vOne, Entry, 1 );
62 Vec_PtrPush( vSupps, vOne );
66 vOne = Vec_IntStart( nSize );
67 bSupp = Cudd_Support( dd, dd->bFunc ); Cudd_Ref( bSupp );
68 for ( bTemp = bSupp; bTemp != Cudd_ReadOne(dd); bTemp = cuddT(bTemp) )
69 Vec_IntWriteEntry( vOne, bTemp->index, 1 );
70 Cudd_RecursiveDeref( dd, bSupp );
71 Vec_PtrPush( vSupps, vOne );
74 vOne = Vec_IntStart( nSize );
76 Vec_IntWriteEntry( vOne, Entry, 1 );
79 Vec_IntWriteEntry( vOne, Aig_ObjId(pObj), 1 );
80 Vec_PtrPush( vSupps, vOne );
83 assert( nSize == Aig_ManObjNumMax(
p) );
90 Counter += Vec_IntEntry(vOne, i);
93 printf(
"Obj = %4d : ", i );
94 if ( Saig_ObjIsPi(
p,pObj) )
96 else if ( Saig_ObjIsLo(
p,pObj) )
98 else if ( Saig_ObjIsLi(
p,pObj) )
100 else if ( Aig_ObjIsNode(pObj) )
103 printf(
"%d", Vec_IntEntry(vOne, i) );
125 int nVarsAll, Counter, iSupp = -1, Entry, i, k;
127 *pvQuant0 = Vec_PtrAlloc( Vec_PtrSize(vSupps) );
128 *pvQuant1 = Vec_PtrAlloc( Vec_PtrSize(vSupps) );
131 Vec_PtrPush( *pvQuant0, Vec_IntAlloc(16) );
132 Vec_PtrPush( *pvQuant1, Vec_IntAlloc(16) );
135 nVarsAll = Vec_IntSize( (
Vec_Int_t *)Vec_PtrEntry(vSupps, 0) );
136 for ( i = 0; i < nVarsAll; i++ )
140 if ( Vec_IntEntry(vOne, i) )
148 Vec_IntPush( (
Vec_Int_t *)Vec_PtrEntry(*pvQuant0, iSupp), i );
150 Vec_IntPush( (
Vec_Int_t *)Vec_PtrEntry(*pvQuant1, iSupp), i );
154 for ( i = 0; i < Vec_PtrSize(vSupps); i++ )
156 printf(
"%2d : Quant0 = ", i );
158 printf(
"%d ", Entry );
163 for ( i = 0; i < Vec_PtrSize(vSupps); i++ )
165 printf(
"%2d : Quant1 = ", i );
167 printf(
"%d ", Entry );
188 DdNode * bBdd0, * bBdd1, * bProd, * bRes, * bTemp;
191 dd = Cudd_Init( Aig_ManObjNumMax(
p), 0, CUDD_UNIQUE_SLOTS, CUDD_CACHE_SLOTS, 0 );
192 Cudd_AutodynEnable( dd, CUDD_REORDER_SYMM_SIFT );
193 dd->TimeStop = TimeTarget;
196 pObj->
pData = Cudd_bddIthVar( dd, Aig_ObjId(pObj) );
201 bBdd0 = Cudd_NotCond( (DdNode *)Aig_ObjFanin0(pObj)->pData, Aig_ObjFaninC0(pObj) );
202 bBdd1 = Cudd_NotCond( (DdNode *)Aig_ObjFanin1(pObj)->pData, Aig_ObjFaninC1(pObj) );
205 pObj->
pData = Cudd_bddAnd( dd, bBdd0, bBdd1 );
206 if ( pObj->
pData == NULL )
209 Vec_PtrFree( vNodes );
212 Cudd_Ref( (DdNode *)pObj->
pData );
216 bRes = Cudd_ReadOne(dd); Cudd_Ref( bRes );
219 assert( Aig_ObjIsNode(pObj) );
220 bProd = Cudd_bddXnor( dd, Cudd_bddIthVar(dd, Aig_ObjId(pObj)), (DdNode *)pObj->
pData ); Cudd_Ref( bProd );
223 bRes = Cudd_bddAnd( dd, bTemp = bRes, bProd );
227 Vec_PtrFree( vRange );
228 Vec_PtrFree( vNodes );
232 Cudd_RecursiveDeref( dd, bTemp );
233 Cudd_RecursiveDeref( dd, bProd );
236 Cudd_RecursiveDeref( dd, (DdNode *)pObj->
pData );
238 Vec_PtrFree( vRange );
239 Vec_PtrFree( vNodes );
240 Cudd_AutodynDisable( dd );
291 DdNode * bProd, * bRes, * bTemp;
297 assert( dd->bFunc2 == NULL );
298 dd->bFunc2 = dd->bFunc; Cudd_Ref( dd->bFunc2 );
300 Cudd_AutodynEnable( dd, CUDD_REORDER_SYMM_SIFT );
304 Abc_Print( 1,
"Part %2d : Init =%5d. ", i, Cudd_DagSize(bRes) );
306 bRes = Cudd_bddExistAbstract( dd, bTemp = bRes, bProd ); Cudd_Ref( bRes );
307 Cudd_RecursiveDeref( dd, bTemp );
308 Cudd_RecursiveDeref( dd, bProd );
311 Cudd_AutodynDisable( dd );
314 Abc_Print( 1,
"Quant =%5d. ", Cudd_DagSize(bRes) );
315 Cudd_ReduceHeap( dd, CUDD_REORDER_SYMM_SIFT, 100 );
317 Abc_Print( 1,
"Reo = %5d. ", Cudd_DagSize(bRes) );
318 Cudd_ReduceHeap( dd, CUDD_REORDER_SYMM_SIFT, 100 );
320 Abc_Print( 1,
"Reo = %5d. ", Cudd_DagSize(bRes) );
322 Abc_Print( 1,
"Supp = %3d. ", Cudd_SupportSize(dd, bRes) );
324 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
366 abctime TimeTarget,
int fBackward,
int fReorder,
int fVerbose )
370 DdNode * bImage, * bGroup, * bCube, * bTemp;
372 abctime clk, clk0 = Abc_Clock();
374 bImage = bInit; Cudd_Ref( bImage );
380 Cudd_RecursiveDeref( dd, bTemp );
381 Cudd_RecursiveDeref( dd, bCube );
387 bImage = Cudd_bddExistAbstract( dd, bTemp = bImage, bCube );
388 if ( bImage == NULL )
390 Cudd_RecursiveDeref( dd, bTemp );
391 Cudd_RecursiveDeref( dd, bCube );
395 Cudd_RecursiveDeref( dd, bTemp );
396 Cudd_RecursiveDeref( dd, bCube );
403printf(
" %2d : ", i );
405 bGroup = Cudd_bddTransfer( ddPart, dd, ddPart->bFunc );
406 if ( bGroup == NULL )
410printf(
"Pt0 =%6d. Pt1 =%6d. ", Cudd_DagSize(ddPart->bFunc), Cudd_DagSize(bGroup) );
415 bImage = Cudd_bddAndAbstract( dd, bTemp = bImage, bGroup, bCube );
416 if ( bImage == NULL )
418 Cudd_RecursiveDeref( dd, bTemp );
419 Cudd_RecursiveDeref( dd, bCube );
420 Cudd_RecursiveDeref( dd, bGroup );
426printf(
"Im0 =%6d. Im1 =%6d. ", Cudd_DagSize(bTemp), Cudd_DagSize(bImage) );
428 Cudd_RecursiveDeref( dd, bTemp );
429 Cudd_RecursiveDeref( dd, bCube );
430 Cudd_RecursiveDeref( dd, bGroup );
436printf(
"Supp =%3d. ", Cudd_SupportSize(dd, bImage) );
438Abc_PrintTime( 1,
"T", Abc_Clock() - clk );
446 Cudd_RecursiveDeref( dd, bTemp );
447 Cudd_RecursiveDeref( dd, bCube );
453 bImage = Cudd_bddExistAbstract( dd, bTemp = bImage, bCube ); Cudd_Ref( bImage );
454 Cudd_RecursiveDeref( dd, bTemp );
455 Cudd_RecursiveDeref( dd, bCube );
461 Abc_Print( 1,
" Reordering... Before =%5d. ", Cudd_DagSize(bImage) );
462 Cudd_ReduceHeap( dd, CUDD_REORDER_SYMM_SIFT, 100 );
464 Abc_Print( 1,
"After =%5d. ", Cudd_DagSize(bImage) );
468 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk0 );
472 Cudd_Deref( bImage );
DdNode * Llb_ImgComputeImage(Aig_Man_t *pAig, Vec_Ptr_t *vDdMans, DdManager *dd, DdNode *bInit, Vec_Ptr_t *vQuant0, Vec_Ptr_t *vQuant1, Vec_Int_t *vDriRefs, abctime TimeTarget, int fBackward, int fReorder, int fVerbose)