52static inline int Part_SizeType(
int nSize,
int nStepSize ) {
return nSize / nStepSize + ((nSize % nStepSize) > 0); }
53static inline char * Part_OneNext(
char * pPart ) {
return *((
char **)pPart); }
54static inline void Part_OneSetNext(
char * pPart,
char * pNext ) { *((
char **)pPart) = pNext; }
76 p->nChunkSize = nChunkSize;
77 p->nStepSize = nStepSize;
78 p->vMemory = Vec_PtrAlloc( 1000 );
79 p->vFree = Vec_PtrAlloc( 1000 );
100 Vec_PtrFree(
p->vMemory );
101 Vec_PtrFree(
p->vFree );
121 Type = Part_SizeType( nSize,
p->nStepSize );
122 Vec_PtrFillExtra(
p->vFree, Type + 1, NULL );
123 if ( (pMemory = (
char *)Vec_PtrEntry(
p->vFree, Type )) )
125 Vec_PtrWriteEntry(
p->vFree, Type, Part_OneNext(pMemory) );
128 nSizeReal =
p->nStepSize * Type;
129 if (
p->nFreeSize < nSizeReal )
132 p->nFreeSize =
p->nChunkSize;
133 Vec_PtrPush(
p->vMemory,
p->pFreeBuf );
135 assert(
p->nFreeSize >= nSizeReal );
136 pMemory =
p->pFreeBuf;
137 p->pFreeBuf += nSizeReal;
138 p->nFreeSize -= nSizeReal;
156 Type = Part_SizeType( nSize,
p->nStepSize );
157 Vec_PtrFillExtra(
p->vFree, Type + 1, NULL );
158 Part_OneSetNext( pMemory, (
char *)Vec_PtrEntry(
p->vFree, Type) );
159 Vec_PtrWriteEntry(
p->vFree, Type, pMemory );
177 pPart->
nRefs = nRefs;
214 Part_One_t *
p = Part_ManFetchEntry( pMan, p1->nOuts + p2->nOuts, nRefs );
215 int * pBeg1 = p1->pOuts;
216 int * pBeg2 = p2->pOuts;
217 int * pBeg =
p->pOuts;
218 int * pEnd1 = p1->pOuts + p1->nOuts;
219 int * pEnd2 = p2->pOuts + p2->nOuts;
220 while ( pBeg1 < pEnd1 && pBeg2 < pEnd2 )
222 if ( *pBeg1 == *pBeg2 )
223 *pBeg++ = *pBeg1++, pBeg2++;
224 else if ( *pBeg1 < *pBeg2 )
229 while ( pBeg1 < pEnd1 )
231 while ( pBeg2 < pEnd2 )
233 p->nOuts = pBeg -
p->pOuts;
234 assert(
p->nOuts <=
p->nOutsAlloc );
235 assert(
p->nOuts >= p1->nOuts );
236 assert(
p->nOuts >= p2->nOuts );
255 vSupp = Vec_IntAlloc(
p->nOuts );
256 for ( i = 0; i <
p->nOuts; i++ )
257 Vec_IntPush( vSupp,
p->pOuts[i] );
289 vSupports = Vec_PtrAlloc( Aig_ManCoNum(pMan) );
293 if ( Aig_ObjIsNode(pObj) )
295 pPart0 = (
Part_One_t *)Aig_ObjFanin0(pObj)->pData;
296 pPart1 = (
Part_One_t *)Aig_ObjFanin1(pObj)->pData;
299 if ( --pPart0->
nRefs == 0 )
300 Part_ManRecycleEntry(
p, pPart0 );
302 if ( --pPart1->
nRefs == 0 )
303 Part_ManRecycleEntry(
p, pPart1 );
308 if ( Aig_ObjIsCo(pObj) )
310 pPart0 = (
Part_One_t *)Aig_ObjFanin0(pObj)->pData;
312 Vec_IntPush( vSupp, (
int)(
long)pObj->
pNext );
313 Vec_PtrPush( vSupports, vSupp );
315 if ( --pPart0->
nRefs == 0 )
316 Part_ManRecycleEntry(
p, pPart0 );
319 if ( Aig_ObjIsCi(pObj) )
323 pPart0 = Part_ManFetchEntry(
p, 1, pObj->
nRefs );
325 pObj->
pData = pPart0;
329 if ( Aig_ObjIsConst1(pObj) )
332 pObj->
pData = Part_ManFetchEntry(
p, 0, pObj->
nRefs );
340 Vec_VecSort( (
Vec_Vec_t *)vSupports, 1 );
393 vSuppsInv = Vec_PtrAlloc( Aig_ManCiNum(
p) );
394 for ( i = 0; i < Aig_ManCiNum(
p); i++ )
395 Vec_PtrPush( vSuppsInv, Vec_IntAlloc(8) );
399 iOut = Vec_IntPop( vSupp );
401 Vec_IntPush( (
Vec_Int_t *)Vec_PtrEntry(vSuppsInv, iIn), iOut );
422 int iOut, iIn, k, m, i;
426 vMatrix = Vec_PtrStart( Aig_ManRegNum(
p) );
430 iOut = Vec_IntPop( vSupp );
431 iOut -= Aig_ManCoNum(
p) - Aig_ManRegNum(
p);
434 Vec_IntFree( vSupp );
441 iIn -= Aig_ManCiNum(
p) - Aig_ManRegNum(
p);
444 assert( iIn < Aig_ManRegNum(
p) );
445 Vec_IntWriteEntry( vSupp, m++, iIn );
447 Vec_IntShrink( vSupp, m );
449 assert( iOut < Aig_ManRegNum(
p) );
450 Vec_PtrWriteEntry( vMatrix, iOut, vSupp );
452 Vec_PtrFree( vSupports );
474 int nWords = Abc_BitWordNum(nPis);
480 Abc_InfoSetBit( pBuffer, Entry );
502 Abc_InfoSetBit( pBuffer, Entry );
519 int i, Entry, nCommon = 0;
521 nCommon += Abc_InfoHasBit(pBuffer, Entry);
539 int Attract, Repulse, Value, ValueBest;
540 int i, nCommon, iBest;
552 if ( nCommon == Vec_IntSize(vOne) )
555 if ( nSuppSizeLimit > 0 && Vec_IntSize(vPartSupp) >= 2 * nSuppSizeLimit )
557 Attract = 1000 * nCommon / Vec_IntSize(vOne);
558 if ( Vec_IntSize(vPartSupp) < 100 )
561 Repulse = 1+Abc_Base2Log(Vec_IntSize(vPartSupp)-100);
562 Value = Attract/Repulse;
563 if ( ValueBest < Value )
569 if ( ValueBest < 75 )
588 int i, nOutputs, Counter;
593 nOutputs = Vec_IntSize((
Vec_Int_t *)Vec_PtrEntry(vPartsAll, i));
594 printf(
"%d=(%d,%d) ", i, Vec_IntSize(vOne), nOutputs );
596 if ( i == Vec_PtrSize(vPartsAll) - 1 )
599 assert( Counter == Aig_ManCoNum(
p) );
616 Vec_Int_t * vOne, * vPart, * vPartSupp, * vTemp;
619 if ( nSuppSizeLimit == 0 )
620 nSuppSizeLimit = 200;
624 vPart = vPartSupp = NULL;
627 if ( Vec_IntSize(vOne) < nSuppSizeLimit )
629 if ( vPartSupp == NULL )
632 vPartSupp = Vec_IntDup(vOne);
633 vPart = (
Vec_Int_t *)Vec_PtrEntry(vPartsAll, i);
637 vPartSupp = Vec_IntTwoMerge( vTemp = vPartSupp, vOne );
638 Vec_IntFree( vTemp );
639 vPart = Vec_IntTwoMerge( vTemp = vPart, (
Vec_Int_t *)Vec_PtrEntry(vPartsAll, i) );
640 Vec_IntFree( vTemp );
641 Vec_IntFree( (
Vec_Int_t *)Vec_PtrEntry(vPartsAll, i) );
643 if ( Vec_IntSize(vPartSupp) < nSuppSizeLimit )
647 vPart = (
Vec_Int_t *)Vec_PtrEntry(vPartsAll, i);
649 Vec_PtrWriteEntry( vPartsAll, iPart, vPart );
653 Vec_IntFree( (
Vec_Int_t *)Vec_PtrEntry(vPartSuppsAll, iPart) );
654 Vec_PtrWriteEntry( vPartSuppsAll, iPart, vPartSupp );
662 Vec_PtrWriteEntry( vPartsAll, iPart, vPart );
665 assert( vPartSupp != NULL );
666 Vec_IntFree( (
Vec_Int_t *)Vec_PtrEntry(vPartSuppsAll, iPart) );
667 Vec_PtrWriteEntry( vPartSuppsAll, iPart, vPartSupp );
671 Vec_PtrShrink( vPartsAll, iPart );
672 Vec_PtrShrink( vPartsAll, iPart );
689 Vec_Ptr_t * vSupports, * vPartsAll, * vPartsAll2, * vPartSuppsAll;
690 Vec_Int_t * vOne, * vPart, * vPartSupp, * vTemp;
699ABC_PRT(
"Supps", Abc_Clock() - clk );
702 vPartSuppsBit = Vec_PtrAlloc( 1000 );
706 vPartsAll = Vec_PtrAlloc( 256 );
707 vPartSuppsAll = Vec_PtrAlloc( 256 );
711 iOut = Vec_IntPop(vOne);
717 vPart = Vec_IntAlloc( 32 );
718 Vec_IntPush( vPart, iOut );
720 vPartSupp = Vec_IntDup( vOne );
722 Vec_PtrPush( vPartsAll, vPart );
723 Vec_PtrPush( vPartSuppsAll, vPartSupp );
730 vPart = (
Vec_Int_t *)Vec_PtrEntry( vPartsAll, iPart );
731 Vec_IntPush( vPart, iOut );
733 vPartSupp = (
Vec_Int_t *)Vec_PtrEntry( vPartSuppsAll, iPart );
734 vPartSupp = Vec_IntTwoMerge( vTemp = vPartSupp, vOne );
735 Vec_IntFree( vTemp );
737 Vec_PtrWriteEntry( vPartSuppsAll, iPart, vPartSupp );
739 Aig_ManSuppCharAdd( (
unsigned *)Vec_PtrEntry(vPartSuppsBit, iPart), vOne, Aig_ManCiNum(
p) );
746 Vec_PtrFree( vPartSuppsBit );
751ABC_PRT(
"Parts", Abc_Clock() - clk );
758 Vec_IntPush( vOne, i );
760 Vec_VecSort( (
Vec_Vec_t *)vPartSuppsAll, 1 );
762 vPartsAll2 = Vec_PtrAlloc( 256 );
764 Vec_PtrPush( vPartsAll2, Vec_PtrEntry(vPartsAll, Vec_IntPop(vOne)) );
765 Vec_PtrFree( vPartsAll );
766 vPartsAll = vPartsAll2;
773 printf(
"Created %d partitions.\n", Vec_PtrSize(vPartsAll) );
782 if ( pvPartSupps == NULL )
783 Vec_VecFree( (
Vec_Vec_t *)vPartSuppsAll );
785 *pvPartSupps = vPartSuppsAll;
814 Vec_Ptr_t * vSupports, * vPartsAll, * vPartsAll2, * vPartSuppsAll;
815 Vec_Int_t * vOne, * vPart, * vPartSupp, * vTemp;
822 assert( Vec_PtrSize(vSupports) == Aig_ManRegNum(pAig) );
824 Vec_IntPush( vOne, i );
827ABC_PRT(
"Supps", Abc_Clock() - clk );
831 vPartSuppsBit = Vec_PtrAlloc( 1000 );
835 vPartsAll = Vec_PtrAlloc( 256 );
836 vPartSuppsAll = Vec_PtrAlloc( 256 );
840 iOut = Vec_IntPop(vOne);
846 vPart = Vec_IntAlloc( 32 );
847 Vec_IntPush( vPart, iOut );
849 vPartSupp = Vec_IntDup( vOne );
851 Vec_PtrPush( vPartsAll, vPart );
852 Vec_PtrPush( vPartSuppsAll, vPartSupp );
859 vPart = (
Vec_Int_t *)Vec_PtrEntry( vPartsAll, iPart );
860 Vec_IntPush( vPart, iOut );
862 vPartSupp = (
Vec_Int_t *)Vec_PtrEntry( vPartSuppsAll, iPart );
863 vPartSupp = Vec_IntTwoMerge( vTemp = vPartSupp, vOne );
864 Vec_IntFree( vTemp );
866 Vec_PtrWriteEntry( vPartSuppsAll, iPart, vPartSupp );
868 Aig_ManSuppCharAdd( (
unsigned *)Vec_PtrEntry(vPartSuppsBit, iPart), vOne, Vec_PtrSize(vSupports) );
875 Vec_PtrFree( vPartSuppsBit );
880ABC_PRT(
"Parts", Abc_Clock() - clk );
887 Vec_IntPush( vOne, i );
889 Vec_VecSort( (
Vec_Vec_t *)vPartSuppsAll, 1 );
891 vPartsAll2 = Vec_PtrAlloc( 256 );
893 Vec_PtrPush( vPartsAll2, Vec_PtrEntry(vPartsAll, Vec_IntPop(vOne)) );
894 Vec_PtrFree( vPartsAll );
895 vPartsAll = vPartsAll2;
902 printf(
"Created %d partitions.\n", Vec_PtrSize(vPartsAll) );
912 Vec_VecFree( (
Vec_Vec_t *)vPartSuppsAll );
946 nParts = (Aig_ManCoNum(
p) / nPartSize) + ((Aig_ManCoNum(
p) % nPartSize) > 0);
947 vParts = (
Vec_Ptr_t *)Vec_VecStart( nParts );
949 Vec_IntPush( (
Vec_Int_t *)Vec_PtrEntry(vParts, i / nPartSize), i );
968 assert( !Aig_IsComplement(pObj) );
969 if ( Aig_ObjIsTravIdCurrent(pOld, pObj) )
971 Aig_ObjSetTravIdCurrent(pOld, pObj);
972 if ( Aig_ObjIsCi(pObj) )
974 assert( Vec_IntSize(vSuppMap) == Aig_ManCiNum(pNew) );
975 Vec_IntPush( vSuppMap, (
int)(
long)pObj->
pNext );
978 assert( Aig_ObjIsNode(pObj) );
981 return (
Aig_Obj_t *)(pObj->
pData =
Aig_And( pNew, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj) ));
1002 Aig_ManConst1(pOld)->pData = Aig_ManConst1(pNew);
1003 Aig_ObjSetTravIdCurrent( pOld, Aig_ManConst1(pOld) );
1008 pObj = Aig_ManCi( pOld, Entry );
1009 pObj->
pData = Aig_ManCi( pNew, i );
1010 Aig_ObjSetTravIdCurrent( pOld, pObj );
1017 pObj = Aig_ManCi( pOld, i );
1018 pObj->
pData = Aig_ManCi( pNew, Entry );
1019 Aig_ObjSetTravIdCurrent( pOld, pObj );
1024 vOutsTotal = Vec_PtrAlloc( Vec_IntSize(vPart) );
1029 pObj = Aig_ManCo( pOld, Entry );
1031 Vec_PtrPush( vOutsTotal, Aig_ObjChild0Copy(pObj) );
1038 if ( Aig_ObjIsCo(pObj) )
1041 Vec_PtrPush( vOutsTotal, Aig_ObjChild0Copy(pObj) );
1043 else if ( Aig_ObjIsNode(pObj) && pObj->
nRefs == 0 )
1065 assert( !Aig_IsComplement(pObj) );
1066 if ( Aig_ObjIsTravIdCurrent(pOld, pObj) )
1068 Aig_ObjSetTravIdCurrent(pOld, pObj);
1069 if ( Aig_ObjIsCi(pObj) )
1071 else if ( Aig_ObjIsCo(pObj) )
1078 assert( Aig_ObjIsNode(pObj) );
1081 pObjNew =
Aig_And( pNew, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj) );
1083 pObj->
pData = pObjNew;
1084 pObjNew->
pData = pObj;
1106 pObj = Aig_ManConst1(pOld);
1107 pObjNew = Aig_ManConst1(pNew);
1108 pObj->
pData = pObjNew;
1109 pObjNew->
pData = pObj;
1110 Aig_ObjSetTravIdCurrent(pOld, pObj);
1114 pObj = Aig_ManCo( pOld, Entry );
1133 if ( Aig_ObjIsTravIdCurrent(
p, pObj) )
1135 Aig_ObjSetTravIdCurrent(
p, pObj);
1136 if ( Aig_ObjIsCi(pObj) )
1138 Vec_IntPush( vSupport, Aig_ObjCioId(pObj) );
1162 vPartSupps = Vec_PtrAlloc( Vec_PtrSize(vParts) );
1165 vSupport = Vec_IntAlloc( 100 );
1167 Aig_ObjSetTravIdCurrent(
p, Aig_ManConst1(
p) );
1171 Vec_PtrPush( vPartSupps, vSupport );
1193 Vec_Ptr_t * vMiters, * vNodes1, * vNodes2;
1206 vMiters = Vec_PtrAlloc( Vec_PtrSize(vParts) );
1207 for ( i = 0; i < Vec_PtrSize(vParts); i++ )
1210 vPart = (
Vec_Int_t *)Vec_PtrEntry( vParts, i );
1211 vPartSupp = (
Vec_Int_t *)Vec_PtrEntry( vPartSupps, i );
1215 for ( k = 0; k < Vec_IntSize(vPartSupp); k++ )
1222 Vec_PtrFree( vNodes1 );
1223 Vec_PtrFree( vNodes2 );
1228 Vec_PtrPush( vMiters, pNew );
1255 Aig_Man_t * pAigTotal, * pAigPart, * pAig, * pTemp;
1260 int i, k, m, nIdMax;
1261 assert( Vec_PtrSize(vAigs) > 1 );
1266 nIdMax += Aig_ManObjNumMax(pAig);
1269 pAig = (
Aig_Man_t *)Vec_PtrEntry( vAigs, 0 );
1275 vOutsTotal = Vec_PtrStart( Aig_ManCoNum(pAig) );
1285 vPartSupp = Vec_IntAlloc( 100 );
1291 Vec_IntClear( vPartSupp );
1300 Vec_PtrFree( vOuts );
1303 vOuts =
Aig_ManDupPart( pAigTotal, pAigPart, vPart, vPartSupp, 1 );
1307 assert( Vec_PtrEntry( vOutsTotal, Vec_IntEntry(vPart,k) ) == NULL );
1308 Vec_PtrWriteEntry( vOutsTotal, Vec_IntEntry(vPart,k), pObj );
1310 Vec_PtrFree( vOuts );
1312 ppData =
ABC_ALLOC(
void *, Aig_ManObjNumMax(pAigPart) );
1314 ppData[k] = pObj->
pData;
1317 printf(
"Part %4d (out of %4d) PI = %5d. PO = %5d. And = %6d. Lev = %4d.\r",
1318 i+1, Vec_PtrSize(vParts), Aig_ManCiNum(pAigPart), Aig_ManCoNum(pAigPart),
1325 pObj->
pData = ppData[k];
1328 if ( pAigPart->pReprs )
1335 Vec_IntFree( vPartSupp );
1347 Vec_PtrFree( vOutsTotal );
1357 Vec_PtrFree( vPios );
1359 pTemp = (
Aig_Man_t *)Vec_PtrEntry( vAigs, 0 );
1360 if ( pTemp->pManTime )
1405 ppData =
ABC_ALLOC(
void *, Aig_ManObjNumMax(pAigPart) );
1407 ppData[k] = pObj->
pData;
1410 printf(
"Part %4d (out of %4d) PI = %5d. PO = %5d. And = %6d. Lev = %4d.\r",
1411 i+1, Vec_PtrSize(vParts), Aig_ManCiNum(pAigPart), Aig_ManCoNum(pAigPart),
1418 pObj->
pData = ppData[k];
1421 if ( pAigPart->pReprs )
1453 assert( !Aig_IsComplement(pNode1) );
1454 assert( !Aig_IsComplement(pNode2) );
1457 if ( pNode1 == pNode2 )
1459 if ( pNode1->
Id < pNode2->
Id )
1460 p->pReprs[pNode2->
Id] = pNode1;
1462 p->pReprs[pNode1->
Id] = pNode2;
1482 assert( Aig_ManCiNum(pNew) == Aig_ManCiNum(pPrev) );
1483 assert( Aig_ManCiNum(pNew) == Aig_ManCiNum(pThis) );
1484 assert( Aig_ManCoNum(pNew) == Aig_ManCoNum(pPrev) );
1485 assert( Aig_ManCoNum(pNew) == Aig_ManCoNum(pThis) );
1499 pObj = Aig_ManConst1(pThis);
1500 pObj->
pData = Aig_ManConst1(pNew);
1502 pObj->
pData = Aig_ManCi(pNew, i);
1504 pObj->
pData = Aig_ManCo(pNew, i);
1507 pObj->
pData =
Aig_And( pNew, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj) );
1511 pObjNew = Aig_ObjFanin0( Aig_ManCo(pNew,i) );
1513 Aig_ObjSetRepr_( pNew, pObjNew, Aig_Regular((
Aig_Obj_t *)Aig_ObjFanin0(pObj)->pData) );
1534 vSupp = Vec_PtrAlloc( 100 );
1537 if ( !Aig_ObjIsChoice(
p, pNode) )
1540 for ( pTemp = pNode; pTemp; pTemp = Aig_ObjEquiv(
p, pTemp) )
1542 printf(
"Choice node = %5d. Level = %2d. Choices = %d. { ", pNode->
Id, pNode->
Level, Counter );
1543 for ( pTemp = pNode; pTemp; pTemp = Aig_ObjEquiv(
p, pTemp) )
1546 printf(
"S=%d N=%d L=%d ", Vec_PtrSize(vSupp), Counter, pTemp->
Level );
1550 Vec_PtrFree( vSupp );
1567 Aig_Man_t * pNew, * pThis, * pPrev, * pTemp;
1570 pPrev = (
Aig_Man_t *)Vec_PtrEntry( vAigs, 0 );
1573 assert( pNew->pReprs == NULL );
1574 pNew->nReprsAlloc = Vec_PtrSize(vAigs) * Aig_ManObjNumMax(pNew);
1591 Vec_PtrFree( vPios );
1593 pTemp = (
Aig_Man_t *)Vec_PtrEntry( vAigs, 0 );
1594 if ( pTemp->pManTime )
#define ABC_ALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Part_ManStop(Part_Man_t *p)
struct Part_One_t_ Part_One_t
Aig_Man_t * Aig_ManDupPartAll(Aig_Man_t *pOld, Vec_Int_t *vPart)
Part_Man_t * Part_ManStart(int nChunkSize, int nStepSize)
FUNCTION DEFINITIONS ///.
Vec_Ptr_t * Aig_ManPartitionNaive(Aig_Man_t *p, int nPartSize)
Vec_Ptr_t * Aig_ManSupportsRegisters(Aig_Man_t *p)
void Aig_ManSupportsTest(Aig_Man_t *pMan)
Aig_Man_t * Aig_ManChoiceConstructive(Vec_Ptr_t *vAigs, int fVerbose)
int Aig_ManPartitionSmartFindPart(Vec_Ptr_t *vPartSuppsAll, Vec_Ptr_t *vPartsAll, Vec_Ptr_t *vPartSuppsBit, int nSuppSizeLimit, Vec_Int_t *vOne)
Vec_Ptr_t * Aig_ManSupportNodes(Aig_Man_t *p, Vec_Ptr_t *vParts)
Aig_Man_t * Aig_ManFraigPartitioned(Aig_Man_t *pAig, int nPartSize, int nConfMax, int nLevelMax, int fVerbose)
unsigned * Aig_ManSuppCharStart(Vec_Int_t *vOne, int nPis)
typedefABC_NAMESPACE_IMPL_START struct Part_Man_t_ Part_Man_t
DECLARATIONS ///.
int Aig_ManSuppCharCommon(unsigned *pBuffer, Vec_Int_t *vOne)
char * Part_ManFetch(Part_Man_t *p, int nSize)
Aig_Man_t * Aig_ManChoicePartitioned(Vec_Ptr_t *vAigs, int nPartSize, int nConfMax, int nLevelMax, int fVerbose)
void Part_ManRecycle(Part_Man_t *p, char *pMemory, int nSize)
Vec_Ptr_t * Aig_ManPartitionSmartRegisters(Aig_Man_t *pAig, int nSuppSizeLimit, int fVerbose)
Vec_Ptr_t * Aig_ManSupportsInverse(Aig_Man_t *p)
Part_One_t * Part_ManMergeEntry(Part_Man_t *pMan, Part_One_t *p1, Part_One_t *p2, int nRefs)
Vec_Ptr_t * Aig_ManSupports(Aig_Man_t *pMan)
void Aig_ManPartitionCompact(Vec_Ptr_t *vPartsAll, Vec_Ptr_t *vPartSuppsAll, int nSuppSizeLimit)
void Aig_ManSupportNodes_rec(Aig_Man_t *p, Aig_Obj_t *pObj, Vec_Int_t *vSupport)
Vec_Int_t * Part_ManTransferEntry(Part_One_t *p)
void Aig_ManChoiceEval(Aig_Man_t *p)
void Aig_ManChoiceConstructiveOne(Aig_Man_t *pNew, Aig_Man_t *pPrev, Aig_Man_t *pThis)
void Aig_ManDupPartAll_rec(Aig_Man_t *pNew, Aig_Man_t *pOld, Aig_Obj_t *pObj)
Vec_Ptr_t * Aig_ManMiterPartitioned(Aig_Man_t *p1, Aig_Man_t *p2, int nPartSize, int fSmart)
Vec_Ptr_t * Aig_ManDupPart(Aig_Man_t *pNew, Aig_Man_t *pOld, Vec_Int_t *vPart, Vec_Int_t *vSuppMap, int fInverse)
Vec_Ptr_t * Aig_ManPartitionSmart(Aig_Man_t *p, int nSuppSizeLimit, int fVerbose, Vec_Ptr_t **pvPartSupps)
void Aig_ManPartitionPrint(Aig_Man_t *p, Vec_Ptr_t *vPartsAll, Vec_Ptr_t *vPartSuppsAll)
void Aig_ManSuppCharAdd(unsigned *pBuffer, Vec_Int_t *vOne, int nPis)
Aig_Obj_t * Aig_ManDupPart_rec(Aig_Man_t *pNew, Aig_Man_t *pOld, Aig_Obj_t *pObj, Vec_Int_t *vSuppMap)
Aig_Man_t * Aig_ManDupRepr(Aig_Man_t *p, int fOrdered)
Vec_Ptr_t * Aig_ManOrderPios(Aig_Man_t *p, Aig_Man_t *pOrder)
Aig_Man_t * Aig_ManDupOrdered(Aig_Man_t *p)
Aig_Man_t * Aig_ManRehash(Aig_Man_t *p)
void Aig_ManSetCioIds(Aig_Man_t *p)
int Aig_ManLevelNum(Aig_Man_t *p)
void Aig_ManReprStart(Aig_Man_t *p, int nIdMax)
DECLARATIONS ///.
#define Aig_ManForEachObj(p, pObj, i)
void Aig_ManStop(Aig_Man_t *p)
void Aig_ManIncrementTravId(Aig_Man_t *p)
DECLARATIONS ///.
#define Aig_ManForEachCi(p, pObj, i)
ITERATORS ///.
Aig_Obj_t * Aig_And(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
Aig_Obj_t * Aig_ObjCreateCo(Aig_Man_t *p, Aig_Obj_t *pDriver)
Aig_Man_t * Aig_ManStartFrom(Aig_Man_t *p)
void Aig_ManCleanCioIds(Aig_Man_t *p)
struct Aig_Obj_t_ Aig_Obj_t
void Aig_ManMarkValidChoices(Aig_Man_t *p)
Aig_Man_t * Aig_ManDupDfsGuided(Aig_Man_t *p, Vec_Ptr_t *vPios)
Aig_Man_t * Aig_ManStart(int nNodesMax)
DECLARATIONS ///.
#define Aig_ManForEachNode(p, pObj, i)
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
int Aig_ManCleanup(Aig_Man_t *p)
#define Aig_ManForEachCo(p, pObj, i)
int Aig_NodeMffcSupp(Aig_Man_t *p, Aig_Obj_t *pNode, int LevelMin, Vec_Ptr_t *vSupp)
Aig_Obj_t * Aig_ObjCreateCi(Aig_Man_t *p)
DECLARATIONS ///.
void Aig_ManCleanData(Aig_Man_t *p)
void Aig_ManTransferRepr(Aig_Man_t *pNew, Aig_Man_t *p)
int Aig_ManChoiceLevel(Aig_Man_t *p)
Aig_Obj_t * Aig_MiterTwo(Aig_Man_t *p, Vec_Ptr_t *vNodes1, Vec_Ptr_t *vNodes2)
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Aig_Man_t * Fra_FraigChoice(Aig_Man_t *pManAig, int nConfMax, int nLevelMax)
typedefABC_NAMESPACE_HEADER_START struct Tim_Man_t_ Tim_Man_t
INCLUDES ///.
Tim_Man_t * Tim_ManDup(Tim_Man_t *p, int fUnitDelay)
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
#define Vec_PtrForEachEntryStart(Type, vVec, pEntry, i, Start)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.