30#define IVY_INFINITY 10000
62 pSupp = Ivy_ObjSupp( pAig, pObj );
70static void Ivy_FastMapPrint(
Ivy_Man_t * pAig,
int Delay,
int Area,
abctime Time,
char * pStr );
71static int Ivy_FastMapDelay(
Ivy_Man_t * pAig );
72static int Ivy_FastMapArea(
Ivy_Man_t * pAig );
76static void Ivy_FastMapRequired(
Ivy_Man_t * pAig,
int Delay,
int fSetInter );
77static void Ivy_FastMapRecover(
Ivy_Man_t * pAig,
int nLimit );
110 abctime clk, clkTotal = Abc_Clock();
115 pMan->
nObjs = Ivy_ManObjIdMax(pAig) + 1;
119 pMan->
vLuts = Vec_VecAlloc( 100 );
123 Ivy_ObjSuppStart( pAig, Ivy_ManConst1(pAig) );
125 Ivy_ObjSuppStart( pAig, pObj );
128 Ivy_FastMapNode( pAig, pObj, nLimit );
130 Delay = Ivy_FastMapDelay( pAig );
131 Area = Ivy_FastMapArea(pAig);
133 Ivy_FastMapPrint( pAig, Delay, Area, Abc_Clock() - clk,
"Delay oriented mapping: " );
140 Ivy_FastMapRequired( pAig, Delay, 0 );
142 Ivy_FastMapRecover( pAig, nLimit );
143 Delay = Ivy_FastMapDelay( pAig );
144 Area = Ivy_FastMapArea(pAig);
146 Ivy_FastMapPrint( pAig, Delay, Area, Abc_Clock() - clk,
"Area recovery 2 : " );
149 Ivy_FastMapRequired( pAig, Delay, 0 );
152 Ivy_FastMapNodeArea( pAig, pObj, nLimit );
153 Delay = Ivy_FastMapDelay( pAig );
154 Area = Ivy_FastMapArea(pAig);
156 Ivy_FastMapPrint( pAig, Delay, Area, Abc_Clock() - clk,
"Area recovery 1 : " );
159 Ivy_FastMapRequired( pAig, Delay, 0 );
161 Ivy_FastMapRecover( pAig, nLimit );
162 Delay = Ivy_FastMapDelay( pAig );
163 Area = Ivy_FastMapArea(pAig);
165 Ivy_FastMapPrint( pAig, Delay, Area, Abc_Clock() - clk,
"Area recovery 2 : " );
197 Vec_VecFree(
p->vLuts );
214void Ivy_FastMapPrint(
Ivy_Man_t * pAig,
int Delay,
int Area,
abctime Time,
char * pStr )
216 printf(
"%s : Delay = %3d. Area = %6d. ", pStr, Delay, Area );
238 pObj = Ivy_ObjFanin0(pObj);
239 if ( !Ivy_ObjIsNode(pObj) )
241 pSupp = Ivy_ObjSupp( pAig, pObj );
242 if ( DelayMax < pSupp->Delay )
243 DelayMax = pSupp->
Delay;
263 pSupp = Ivy_ObjSupp( pAig, pObj );
270 for ( i = 0; i < pSupp->
nSize; i++ )
273 Vec_VecPush( vLuts, pSupp->
Delay, pObj );
295 Vec_VecClear( vLuts );
301 Ivy_ObjSupp( pAig, pObj )->fMark = 0;
316static inline int Ivy_ObjIsNodeInt1(
Ivy_Obj_t * pObj )
318 return Ivy_ObjIsNode(pObj) && Ivy_ObjRefs(pObj) == 1;
332static inline int Ivy_ObjIsNodeInt2(
Ivy_Obj_t * pObj )
334 return Ivy_ObjIsNode(pObj) && Ivy_ObjRefs(pObj) <= 2;
348static inline int Vec_IntRemoveDup(
int * pArray,
int nSize )
353 for ( i = k = 1; i < nSize; i++ )
354 if ( pArray[i] != pArray[i-1] )
355 pArray[k++] = pArray[i];
372 static int Store[32], StoreSize;
373 static char Supp0[16], Supp1[16];
378 int RetValue, DelayOld;
380 assert( Ivy_ObjIsNode(pObj) );
382 pFanin0 = Ivy_ObjFanin0(pObj);
383 pFanin1 = Ivy_ObjFanin1(pObj);
385 pSupp0 = Ivy_ObjSupp( pAig, pFanin0 );
386 pSupp1 = Ivy_ObjSupp( pAig, pFanin1 );
387 pSupp = Ivy_ObjSupp( pAig, pObj );
390 DelayOld = Ivy_FastMapNodeDelay(pAig, pObj);
391 assert( DelayOld <= pSupp->DelayR );
394 StoreSize = pSupp->
nSize;
396 if ( Ivy_ObjRefs(pFanin0) > 1 && pSupp0->
Delay < pSupp->
DelayR )
400 pSupp0->
pArray[0] = Ivy_ObjFaninId0(pObj);
403 if ( Ivy_ObjRefs(pFanin1) > 1 && pSupp1->
Delay < pSupp->
DelayR )
407 pSupp1->
pArray[0] = Ivy_ObjFaninId1(pObj);
411 RetValue = Ivy_FastMapMerge( pSupp1, pSupp0, pSupp, nLimit );
413 RetValue = Ivy_FastMapMerge( pSupp0, pSupp1, pSupp, nLimit );
417 pSupp->
pArray[0] = Ivy_ObjFaninId0(pObj);
418 pSupp->
pArray[1] = Ivy_ObjFaninId1(pObj);
421 pSupp->
Delay = Ivy_FastMapNodeDelay(pAig, pObj);
424 pSupp->
nSize = StoreSize;
426 pSupp->
Delay = DelayOld;
443 static int Store[32], StoreSize;
444 static char Supp0[16], Supp1[16];
449 int RetValue, DelayOld, RefsOld;
450 int AreaBef, AreaAft;
452 assert( Ivy_ObjIsNode(pObj) );
454 pFanin0 = Ivy_ObjFanin0(pObj);
455 pFanin1 = Ivy_ObjFanin1(pObj);
457 pSupp0 = Ivy_ObjSupp( pAig, pFanin0 );
458 pSupp1 = Ivy_ObjSupp( pAig, pFanin1 );
459 pSupp = Ivy_ObjSupp( pAig, pObj );
463 if ( pSupp->
nRefs == 0 )
464 AreaBef = Ivy_FastMapNodeAreaDerefed( pAig, pObj );
466 AreaBef = Ivy_FastMapNodeAreaRefed( pAig, pObj );
471 if ( pSupp->
nRefs != 0 )
472 Ivy_FastMapNodeDeref( pAig, pObj );
475 DelayOld = Ivy_FastMapNodeDelay(pAig, pObj);
476 assert( DelayOld <= pSupp->DelayR );
479 StoreSize = pSupp->
nSize;
481 if ( Ivy_ObjRefs(pFanin0) > 2 && pSupp0->
Delay < pSupp->
DelayR )
486 pSupp0->
pArray[0] = Ivy_ObjFaninId0(pObj);
489 if ( Ivy_ObjRefs(pFanin1) > 2 && pSupp1->
Delay < pSupp->
DelayR )
494 pSupp1->
pArray[0] = Ivy_ObjFaninId1(pObj);
498 RetValue = Ivy_FastMapMerge( pSupp1, pSupp0, pSupp, nLimit );
500 RetValue = Ivy_FastMapMerge( pSupp0, pSupp1, pSupp, nLimit );
504 pSupp->
pArray[0] = Ivy_ObjFaninId0(pObj);
505 pSupp->
pArray[1] = Ivy_ObjFaninId1(pObj);
509 pSupp->
Delay = Ivy_FastMapNodeDelay(pAig, pObj);
512 AreaAft = Ivy_FastMapNodeAreaDerefed( pAig, pObj );
513 pSupp->
nRefs = RefsOld;
515 if ( AreaAft > AreaBef || pSupp->
Delay > pSupp->
DelayR )
518 pSupp->
nSize = StoreSize;
520 pSupp->
Delay = DelayOld;
526 if ( pSupp->
nRefs != 0 )
527 Ivy_FastMapNodeRef( pAig, pObj );
546 assert( Ivy_ObjIsNode(pObj) );
548 pSupp0 = Ivy_ObjSupp( pAig, Ivy_ObjFanin0(pObj) );
549 pSupp1 = Ivy_ObjSupp( pAig, Ivy_ObjFanin1(pObj) );
550 pSupp = Ivy_ObjSupp( pAig, pObj );
554 pSupp->
Delay = (pSupp0->
Delay == 0) ? pSupp0->
Delay + 1: pSupp0->Delay;
558 pSupp1 = Ivy_ObjSupp( pAig, Ivy_ManConst1(pAig) );
559 pSupp1->
pArray[0] = Ivy_ObjFaninId1(pObj);
564 pSupp0 = Ivy_ObjSupp( pAig, Ivy_ManConst1(pAig) );
565 pSupp0->
pArray[0] = Ivy_ObjFaninId0(pObj);
569 RetValue = Ivy_FastMapMerge( pSupp1, pSupp0, pSupp, nLimit );
571 RetValue = Ivy_FastMapMerge( pSupp0, pSupp1, pSupp, nLimit );
575 if ( fFaninParam == 2 )
578 pSupp->
pArray[0] = Ivy_ObjFaninId0(pObj);
579 pSupp->
pArray[1] = Ivy_ObjFaninId1(pObj);
581 else if ( fFaninParam == 3 )
583 Ivy_Obj_t * pFanin0, * pFanin1, * pFaninA, * pFaninB;
584 pFanin0 = Ivy_ObjFanin0(pObj);
585 pFanin1 = Ivy_ObjFanin1(pObj);
588 if ( Ivy_ObjIsNodeInt1(pFanin0) )
590 pFaninA = Ivy_ObjFanin0(pFanin0);
591 pFaninB = Ivy_ObjFanin1(pFanin0);
592 if ( Ivy_ObjIsNodeInt1(pFaninA) && Ivy_ObjIsNodeInt1(pFaninB) )
593 pSupp->
pArray[(int)(pSupp->
nSize++)] = Ivy_ObjId(pFanin0);
596 pSupp->
pArray[(int)(pSupp->
nSize++)] = Ivy_ObjId(pFaninA);
597 pSupp->
pArray[(int)(pSupp->
nSize++)] = Ivy_ObjId(pFaninB);
601 pSupp->
pArray[(int)(pSupp->
nSize++)] = Ivy_ObjId(pFanin0);
603 if ( Ivy_ObjIsNodeInt1(pFanin1) )
605 pFaninA = Ivy_ObjFanin0(pFanin1);
606 pFaninB = Ivy_ObjFanin1(pFanin1);
607 if ( Ivy_ObjIsNodeInt1(pFaninA) && Ivy_ObjIsNodeInt1(pFaninB) )
608 pSupp->
pArray[(int)(pSupp->
nSize++)] = Ivy_ObjId(pFanin1);
611 pSupp->
pArray[(int)(pSupp->
nSize++)] = Ivy_ObjId(pFaninA);
612 pSupp->
pArray[(int)(pSupp->
nSize++)] = Ivy_ObjId(pFaninB);
616 pSupp->
pArray[(int)(pSupp->
nSize++)] = Ivy_ObjId(pFanin1);
622 else if ( fFaninParam == 4 )
624 Ivy_Obj_t * pFanin0, * pFanin1, * pFaninA, * pFaninB;
625 pFanin0 = Ivy_ObjFanin0(pObj);
626 pFanin1 = Ivy_ObjFanin1(pObj);
629 if ( Ivy_ObjIsNodeInt1(pFanin0) ^ Ivy_ObjIsNodeInt1(pFanin1) )
631 pSupp0 = Ivy_ObjSupp( pAig, Ivy_ObjFanin0(pObj) );
632 pSupp1 = Ivy_ObjSupp( pAig, Ivy_ObjFanin1(pObj) );
633 if ( Ivy_ObjIsNodeInt1(pFanin0) && pSupp0->
nSize < nLimit )
636 pSupp1 = Ivy_ObjSupp( pAig, Ivy_ManConst1(pAig) );
637 pSupp1->
pArray[0] = Ivy_ObjId(pFanin1);
639 RetValue = Ivy_FastMapMerge( pSupp0, pSupp1, pSupp, nLimit );
644 if ( Ivy_ObjIsNodeInt1(pFanin1) && pSupp1->
nSize < nLimit )
647 pSupp0 = Ivy_ObjSupp( pAig, Ivy_ManConst1(pAig) );
648 pSupp0->
pArray[0] = Ivy_ObjId(pFanin0);
650 RetValue = Ivy_FastMapMerge( pSupp1, pSupp0, pSupp, nLimit );
657 if ( Ivy_ObjIsNodeInt1(pFanin0) )
659 pFaninA = Ivy_ObjFanin0(pFanin0);
660 pFaninB = Ivy_ObjFanin1(pFanin0);
661 if ( Ivy_ObjIsNodeInt1(pFaninA) && Ivy_ObjIsNodeInt1(pFaninB) )
662 pSupp->
pArray[(int)(pSupp->
nSize++)] = Ivy_ObjId(pFanin0);
665 pSupp->
pArray[(int)(pSupp->
nSize++)] = Ivy_ObjId(pFaninA);
666 pSupp->
pArray[(int)(pSupp->
nSize++)] = Ivy_ObjId(pFaninB);
670 pSupp->
pArray[(int)(pSupp->
nSize++)] = Ivy_ObjId(pFanin0);
672 if ( Ivy_ObjIsNodeInt1(pFanin1) )
674 pFaninA = Ivy_ObjFanin0(pFanin1);
675 pFaninB = Ivy_ObjFanin1(pFanin1);
676 if ( Ivy_ObjIsNodeInt1(pFaninA) && Ivy_ObjIsNodeInt1(pFaninB) )
677 pSupp->
pArray[(int)(pSupp->
nSize++)] = Ivy_ObjId(pFanin1);
680 pSupp->
pArray[(int)(pSupp->
nSize++)] = Ivy_ObjId(pFaninA);
681 pSupp->
pArray[(int)(pSupp->
nSize++)] = Ivy_ObjId(pFaninB);
685 pSupp->
pArray[(int)(pSupp->
nSize++)] = Ivy_ObjId(pFanin1);
712 if ( pSupp0->
nSize == nLimit && pSupp1->
nSize == nLimit )
714 for ( i = 0; i < pSupp0->
nSize; i++ )
717 for ( i = 0; i < pSupp0->
nSize; i++ )
723 if ( pSupp0->
nSize == nLimit )
725 for ( i = 0; i < pSupp1->
nSize; i++ )
727 for ( k = pSupp0->
nSize - 1; k >= 0; k-- )
733 for ( i = 0; i < pSupp0->
nSize; i++ )
741 for ( c = 0; c < nLimit; c++ )
743 if ( k == pSupp1->
nSize )
745 if ( i == pSupp0->
nSize )
753 if ( i == pSupp0->
nSize )
755 if ( k == pSupp1->
nSize )
776 if ( i < pSupp0->nSize || k < pSupp1->nSize )
796 pSupp = Ivy_ObjSupp( pAig, pObj );
798 vLeaves->nSize = pSupp->
nSize;
799 vLeaves->pArray = pSupp->
pArray;
816 pSupp = Ivy_ObjSupp( pAig, pObj );
817 if ( pObj != pRoot && (pSupp->
nRefs > 0 || Ivy_ObjIsCi(pObj)) )
836void Ivy_FastMapRequired(
Ivy_Man_t * pAig,
int Delay,
int fSetInter )
846 pSupp = Ivy_ObjSupp( pAig, pObj );
852 pSupp = Ivy_ObjSupp( pAig, pObj );
859 pSupp = Ivy_ObjSupp( pAig, Ivy_ObjFanin0(pObj) );
869 pSupp = Ivy_ObjSupp( pAig, pObj );
871 for ( c = 0; c < pSupp->
nSize; c++ )
873 pSuppF = Ivy_ObjSupp( pAig, Ivy_ManObj(pAig, pSupp->
pArray[c]) );
894 pSupp = Ivy_ObjSupp( pAig, pObj );
900 pSupp = Ivy_ObjSupp( pAig, pObj );
917void Ivy_FastMapRecover(
Ivy_Man_t * pAig,
int nLimit )
922 vFront = Vec_PtrAlloc( nLimit );
923 vFrontOld = Vec_PtrAlloc( nLimit );
927 Ivy_FastMapNodeRecover( pAig, pObj, nLimit, vFront, vFrontOld );
928 Vec_PtrFree( vFrontOld );
929 Vec_PtrFree( vFront );
947 pSupp = Ivy_ObjSupp( pAig, pObj );
948 for ( c = 0; c < pSupp->
nSize; c++ )
950 pSuppF = Ivy_ObjSupp( pAig, Ivy_ManObj(pAig, pSupp->
pArray[c]) );
976 pSupp = Ivy_ObjSupp( pAig, pObj );
978 for ( i = 0; i < pSupp->
nSize; i++ )
980 pNodeChild = Ivy_ManObj(pAig, pSupp->
pArray[i]);
981 pSuppF = Ivy_ObjSupp( pAig, pNodeChild );
983 if ( pSuppF->
nRefs++ > 0 )
985 if ( pSuppF->
nSize == 1 )
987 aArea += Ivy_FastMapNodeRef( pAig, pNodeChild );
1011 pSupp = Ivy_ObjSupp( pAig, pObj );
1013 for ( i = 0; i < pSupp->
nSize; i++ )
1015 pNodeChild = Ivy_ManObj(pAig, pSupp->
pArray[i]);
1016 pSuppF = Ivy_ObjSupp( pAig, pNodeChild );
1018 if ( --pSuppF->
nRefs > 0 )
1020 if ( pSuppF->
nSize == 1 )
1022 aArea += Ivy_FastMapNodeDeref( pAig, pNodeChild );
1041 int aResult, aResult2;
1042 if ( Ivy_ObjIsCi(pObj) )
1044 assert( Ivy_ObjIsNode(pObj) );
1045 pSupp = Ivy_ObjSupp( pAig, pObj );
1047 aResult = Ivy_FastMapNodeDeref( pAig, pObj );
1048 aResult2 = Ivy_FastMapNodeRef( pAig, pObj );
1049 assert( aResult == aResult2 );
1067 int aResult, aResult2;
1068 if ( Ivy_ObjIsCi(pObj) )
1070 assert( Ivy_ObjIsNode(pObj) );
1071 pSupp = Ivy_ObjSupp( pAig, pObj );
1073 aResult2 = Ivy_FastMapNodeRef( pAig, pObj );
1074 aResult = Ivy_FastMapNodeDeref( pAig, pObj );
1075 assert( aResult == aResult2 );
1100 pSuppF = Ivy_ObjSupp( pAig, pFanin );
1101 if ( pSuppF->
nRefs == 0 )
1120 if ( Ivy_ObjIsTravIdCurrent(pAig, pObj) )
1122 assert( Ivy_ObjIsNode(pObj) );
1125 Ivy_ObjSetTravIdCurrent(pAig, pObj);
1142 assert( Ivy_ObjIsNode(pObj) );
1143 pFanin0 = Ivy_ObjFanin0(pObj);
1144 pFanin1 = Ivy_ObjFanin1(pObj);
1145 return !Ivy_ObjIsTravIdCurrent(pAig, pFanin0) && !Ivy_ObjIsTravIdCurrent(pAig, pFanin1);
1164 assert( Ivy_ObjIsNode(pObj) );
1166 pSuppF = Ivy_ObjSupp( pAig, pObj );
1167 if ( pSuppF->
nRefs == 0 )
1170 pFanin = Ivy_ObjFanin0(pObj);
1171 pSuppF = Ivy_ObjSupp( pAig, pFanin );
1172 if ( !Ivy_ObjIsTravIdCurrent(pAig, pFanin) && pSuppF->
nRefs == 0 )
1175 pFanin = Ivy_ObjFanin1(pObj);
1176 pSuppF = Ivy_ObjSupp( pAig, pFanin );
1177 if ( !Ivy_ObjIsTravIdCurrent(pAig, pFanin) && pSuppF->
nRefs == 0 )
1196 assert( Ivy_ObjIsNode(pObj) );
1197 Vec_PtrRemove( vFront, pObj );
1198 pFanin = Ivy_ObjFanin0(pObj);
1199 if ( !Ivy_ObjIsTravIdCurrent(pAig, pFanin) )
1201 Ivy_ObjSetTravIdCurrent(pAig, pFanin);
1202 Vec_PtrPush( vFront, pFanin );
1204 pFanin = Ivy_ObjFanin1(pObj);
1205 if ( !Ivy_ObjIsTravIdCurrent(pAig, pFanin) )
1207 Ivy_ObjSetTravIdCurrent(pAig, pFanin);
1208 Vec_PtrPush( vFront, pFanin );
1229 if ( Ivy_ObjIsCi(pFanin) )
1259 if ( Ivy_ObjIsCi(pFanin) )
1287 if ( Ivy_ObjIsCi(pFanin) )
1317 assert( Vec_PtrSize(vFront) <= nLimit );
1353 pSupp = Ivy_ObjSupp( pAig, pObj );
1355 Vec_PtrClear( vFront );
1356 Vec_PtrClear( vFrontOld );
1358 for ( i = 0; i < pSupp->
nSize; i++ )
1360 pFanin = Ivy_ManObj(pAig, pSupp->
pArray[i]);
1361 Vec_PtrPush( vFront, pFanin );
1362 Vec_PtrPush( vFrontOld, pFanin );
1363 Ivy_ObjSetTravIdCurrent( pAig, pFanin );
1385 pSupp = Ivy_ObjSupp( pAig, pObj );
1387 Ivy_FastMapNodeDeref( pAig, pObj );
1389 pSupp->
nSize = Vec_PtrSize(vFront);
1393 Ivy_FastMapNodeRef( pAig, pObj );
1410 int CostBef, CostAft;
1411 int AreaBef, AreaAft;
1412 pSupp = Ivy_ObjSupp( pAig, pObj );
1415 if ( pSupp->
nRefs == 0 )
1416 AreaBef = Ivy_FastMapNodeAreaDerefed( pAig, pObj );
1418 AreaBef = Ivy_FastMapNodeAreaRefed( pAig, pObj );
1423 if ( pSupp->
nRefs == 0 )
1425 pSupp->
nRefs = 1000000;
1426 Ivy_FastMapNodeRef( pAig, pObj );
1434 assert( CostBef >= CostAft );
1438 AreaAft = Ivy_FastMapNodeAreaRefed( pAig, pObj );
1439 if ( AreaAft > AreaBef )
1442 AreaAft = Ivy_FastMapNodeAreaRefed( pAig, pObj );
1443 assert( AreaAft == AreaBef );
1445 if ( pSupp->
nRefs == 1000000 )
1448 Ivy_FastMapNodeDeref( pAig, pObj );
1466 int CostBef, CostAft;
1467 int AreaBef, AreaAft;
1469 pSupp = Ivy_ObjSupp( pAig, pObj );
1470 DelayOld = pSupp->
Delay = Ivy_FastMapNodeDelay( pAig, pObj );
1472 if ( pSupp->
nRefs == 0 )
1475 AreaBef = Ivy_FastMapNodeAreaRefed( pAig, pObj );
1481 Ivy_FastMapNodeDeref( pAig, pObj );
1485 Ivy_FastMapNodeRef( pAig, pObj );
1486 assert( CostBef >= CostAft );
1489 pSupp->
Delay = Ivy_FastMapNodeDelay( pAig, pObj );
1491 AreaAft = Ivy_FastMapNodeAreaRefed( pAig, pObj );
1492 if ( AreaAft > AreaBef || pSupp->
Delay > pSupp->
DelayR )
1495 AreaAft = Ivy_FastMapNodeAreaRefed( pAig, pObj );
1496 assert( AreaAft == AreaBef );
1497 pSupp->
Delay = DelayOld;
1515 int CostBef, CostAft;
1516 int AreaBef, AreaAft;
1518 pSupp = Ivy_ObjSupp( pAig, pObj );
1519 DelayOld = pSupp->
Delay = Ivy_FastMapNodeDelay( pAig, pObj );
1525 if ( pSupp->
nRefs == 0 )
1526 AreaBef = Ivy_FastMapNodeAreaDerefed( pAig, pObj );
1528 AreaBef = Ivy_FastMapNodeAreaRefed( pAig, pObj );
1532 if ( pSupp->
nRefs == 0 )
1534 pSupp->
nRefs = 1000000;
1535 Ivy_FastMapNodeRef( pAig, pObj );
1543 assert( CostBef >= CostAft );
1546 pSupp->
Delay = Ivy_FastMapNodeDelay( pAig, pObj );
1548 AreaAft = Ivy_FastMapNodeAreaRefed( pAig, pObj );
1549 if ( AreaAft > AreaBef || pSupp->
Delay > pSupp->
DelayR )
1552 AreaAft = Ivy_FastMapNodeAreaRefed( pAig, pObj );
1553 assert( AreaAft == AreaBef );
1554 pSupp->
Delay = DelayOld;
1556 if ( pSupp->
nRefs == 1000000 )
1559 Ivy_FastMapNodeDeref( pAig, pObj );
#define ABC_ALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
abctime s_MappingTime
DECLARATIONS ///.
void Ivy_FastMapNodePrepare(Ivy_Man_t *pAig, Ivy_Obj_t *pObj, int nLimit, Vec_Ptr_t *vFront, Vec_Ptr_t *vFrontOld)
int Ivy_FastMapCutCost(Ivy_Man_t *pAig, Vec_Ptr_t *vFront)
void Ivy_FastMapNodeRecover4(Ivy_Man_t *pAig, Ivy_Obj_t *pObj, int nLimit, Vec_Ptr_t *vFront, Vec_Ptr_t *vFrontOld)
int Ivy_FastMapNodeFaninCompact1(Ivy_Man_t *pAig, Ivy_Obj_t *pObj, int nLimit, Vec_Ptr_t *vFront)
void Ivy_FastMapNodeUpdate(Ivy_Man_t *pAig, Ivy_Obj_t *pObj, Vec_Ptr_t *vFront)
void Ivy_FastMapMark_rec(Ivy_Man_t *pAig, Ivy_Obj_t *pObj)
void Ivy_FastMapStop(Ivy_Man_t *pAig)
int Ivy_FastMapNodeFaninCompact0(Ivy_Man_t *pAig, Ivy_Obj_t *pObj, int nLimit, Vec_Ptr_t *vFront)
int Ivy_FastMapArea_rec(Ivy_Man_t *pAig, Ivy_Obj_t *pObj, Vec_Vec_t *vLuts)
int Ivy_FastMapNodeWillGrow(Ivy_Man_t *pAig, Ivy_Obj_t *pObj)
int Ivy_FastMapNodeFaninCompact2(Ivy_Man_t *pAig, Ivy_Obj_t *pObj, int nLimit, Vec_Ptr_t *vFront)
#define IVY_INFINITY
DECLARATIONS ///.
int Ivy_FastMapNodeFaninCost(Ivy_Man_t *pAig, Ivy_Obj_t *pObj)
void Ivy_FastMapNodeRecover2(Ivy_Man_t *pAig, Ivy_Obj_t *pObj, int nLimit, Vec_Ptr_t *vFront, Vec_Ptr_t *vFrontOld)
void Ivy_FastMapNodeArea2(Ivy_Man_t *pAig, Ivy_Obj_t *pObj, int nLimit)
struct Ivy_SuppMan_t_ Ivy_SuppMan_t
void Ivy_FastMapReadSupp(Ivy_Man_t *pAig, Ivy_Obj_t *pObj, Vec_Int_t *vLeaves)
int Ivy_FastMapNodeFaninCompact_int(Ivy_Man_t *pAig, Ivy_Obj_t *pObj, int nLimit, Vec_Ptr_t *vFront)
void Ivy_FastMapPerform(Ivy_Man_t *pAig, int nLimit, int fRecovery, int fVerbose)
FUNCTION DEFINITIONS ///.
struct Ivy_Supp_t_ Ivy_Supp_t
void Ivy_FastMapNodeFaninCompact(Ivy_Man_t *pAig, Ivy_Obj_t *pObj, int nLimit, Vec_Ptr_t *vFront)
void Ivy_FastMapNodeFaninUpdate(Ivy_Man_t *pAig, Ivy_Obj_t *pObj, Vec_Ptr_t *vFront)
void Ivy_FastMapRequired_rec(Ivy_Man_t *pAig, Ivy_Obj_t *pObj, Ivy_Obj_t *pRoot, int DelayR)
typedefABC_NAMESPACE_HEADER_START struct Ivy_Man_t_ Ivy_Man_t
INCLUDES ///.
void Ivy_ManIncrementTravId(Ivy_Man_t *p)
DECLARATIONS ///.
#define Ivy_ManForEachNode(p, pObj, i)
#define IVY_MIN(a, b)
MACRO DEFINITIONS ///.
#define Ivy_ManForEachPo(p, pObj, i)
struct Ivy_Obj_t_ Ivy_Obj_t
void Ivy_ManCleanTravId(Ivy_Man_t *p)
#define Ivy_ManForEachPi(p, pObj, i)
ITERATORS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
#define Vec_VecForEachLevelReverse(vGlob, vVec, i)
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.