37#define BAL_NO_FUNC 134217727
66static inline int Bal_ObjCost(
Bal_Man_t *
p,
int i ) {
return Vec_IntEntry(
p->vCosts, i); }
67static inline int Bal_LitCost(
Bal_Man_t *
p,
int i ) {
return Bal_ObjCost(
p, Abc_Lit2Var(i)); }
68static inline int Bal_ObjDelay(
Bal_Man_t *
p,
int i ) {
return Bal_ObjCost(
p, i) >> 4; }
69static inline int Bal_LitDelay(
Bal_Man_t *
p,
int i ) {
return Bal_ObjDelay(
p, Abc_Lit2Var(i)); }
90 p->clkStart = Abc_Clock();
93 p->nLutSize = nLutSize;
95 p->fVerbose = fVerbose;
96 p->vCosts = Vec_IntAlloc( 3 * Gia_ManObjNum(pGia) / 2 );
97 p->vCutSets = Vec_PtrAlloc( 3 * Gia_ManObjNum(pGia) / 2 );
98 Vec_IntFill(
p->vCosts, Gia_ManObjNum(pNew), 0 );
99 Vec_PtrFill(
p->vCutSets, Gia_ManObjNum(pNew), NULL );
105 Vec_PtrFreeFree(
p->vCutSets );
106 Vec_IntFree(
p->vCosts );
121static inline int Bal_CutCountBits(
word i )
123 i = i - ((i >> 1) & 0x5555555555555555);
124 i = (i & 0x3333333333333333) + ((i >> 2) & 0x3333333333333333);
125 i = ((i + (i >> 4)) & 0x0F0F0F0F0F0F0F0F);
126 return (i*(0x0101010101010101))>>56;
128static inline word Bal_CutGetSign(
int * pLeaves,
int nLeaves )
130 word Sign = 0;
int i;
131 for ( i = 0; i < nLeaves; i++ )
132 Sign |= ((
word)1) << (pLeaves[i] & 0x3F);
135static inline int Bal_CutCreateUnit(
Bal_Cut_t *
p,
int i,
int Delay )
141 p->Sign = ((
word)1) << (i & 0x3F);
144static inline int Bal_ManPrepareSet(
Bal_Man_t *
p,
int iObj,
int Index,
int fUnit,
Bal_Cut_t ** ppCutSet )
147 if ( Vec_PtrEntry(
p->vCutSets, iObj) == NULL || fUnit )
148 return Bal_CutCreateUnit( (*ppCutSet = CutTemp + Index), iObj, Bal_ObjDelay(
p, iObj)+1 );
149 *ppCutSet = (
Bal_Cut_t *)Vec_PtrEntry(
p->vCutSets, iObj);
150 for ( i = 0; i <
p->nCutNum; i++ )
174 for ( i = 0; i < nSizeC; i++ )
176 for ( k = 0; k < nSizeB; k++ )
177 if ( pC[i] == pB[k] )
184static inline int Bal_SetCheckArray(
Bal_Cut_t ** ppCuts,
int nCuts )
187 int i, k, m, n, Value;
189 for ( i = 0; i < nCuts; i++ )
195 for ( m = 0; m < (int)pCut0->
nLeaves; m++ )
196 for ( n = m + 1; n < (int)pCut0->
nLeaves; n++ )
199 for ( k = 0; k < nCuts; k++ )
202 if ( pCut0 == pCut1 )
205 Value = Bal_CutCheck( pCut0, pCut1 );
231 if ( nSize0 == nLutSize && nSize1 == nLutSize )
233 for ( i = 0; i < nSize0; i++ )
235 if ( pC0[i] != pC1[i] )
return 0;
248 if ( c == nLutSize )
return 0;
249 if ( pC0[i] < pC1[k] )
252 if ( i >= nSize0 )
goto FlushCut1;
254 else if ( pC0[i] > pC1[k] )
257 if ( k >= nSize1 )
goto FlushCut0;
261 pC[c++] = pC0[i++]; k++;
262 if ( i >= nSize0 )
goto FlushCut1;
263 if ( k >= nSize1 )
goto FlushCut0;
268 if ( c + nSize0 > nLutSize + i )
return 0;
278 if ( c + nSize1 > nLutSize + k )
return 0;
292 int xMin, c = 0, * pC = pCut->
pLeaves;
298 xMin = Abc_MinInt( Abc_MinInt(x0, x1), x2 );
300 if ( c == nLutSize )
return 0;
302 if (x0 == xMin) i0++;
303 if (x1 == xMin) i1++;
304 if (x2 == xMin) i2++;
314 int i, nSizeB = pBase->
nLeaves;
316 if ( nSizeB == nSizeC )
318 for ( i = 0; i < nSizeB; i++ )
323 assert( nSizeB > nSizeC );
326 for ( i = k = 0; i < nSizeB; i++ )
338static inline int Bal_SetLastCutIsContained(
Bal_Cut_t ** pCuts,
int nCuts )
341 for ( i = 0; i < nCuts; i++ )
342 if ( pCuts[i]->nLeaves <= pCuts[nCuts]->nLeaves && (pCuts[i]->Sign & pCuts[nCuts]->Sign) == pCuts[i]->Sign && Bal_SetCutIsContainedOrder(pCuts[nCuts], pCuts[i]) )
346static inline int Bal_SetLastCutContains(
Bal_Cut_t ** pCuts,
int nCuts )
348 int i, k, fChanges = 0;
349 for ( i = 0; i < nCuts; i++ )
350 if ( pCuts[nCuts]->nLeaves < pCuts[i]->nLeaves && (pCuts[nCuts]->Sign & pCuts[i]->Sign) == pCuts[nCuts]->Sign && Bal_SetCutIsContainedOrder(pCuts[i], pCuts[nCuts]) )
354 for ( i = k = 0; i <= nCuts; i++ )
372static inline void Bal_SetSortByDelay(
Bal_Cut_t ** pCuts,
int nCuts )
375 for ( i = nCuts; i > 0; i-- )
377 if ( Bal_CutCompareArea(pCuts[i - 1], pCuts[i]) < 0 )
382static inline int Bal_SetAddCut(
Bal_Cut_t ** pCuts,
int nCuts,
int nCutNum )
386 nCuts = Bal_SetLastCutContains(pCuts, nCuts);
387 Bal_SetSortByDelay( pCuts, nCuts );
388 return Abc_MinInt( nCuts + 1, nCutNum - 1 );
402int Bal_ManDeriveCuts(
Bal_Man_t *
p,
int iFan0,
int iFan1,
int iFan2,
int fCompl0,
int fCompl1,
int fCompl2,
int fUnit0,
int fUnit1,
int fUnit2,
int fIsXor,
int Target,
int fSave )
405 Bal_Cut_t * pCutSet0, * pCutSet1, * pCutSet2;
406 int nCuts0 = Bal_ManPrepareSet(
p, iFan0, 0, fUnit0, &pCutSet0 );
407 int nCuts1 = Bal_ManPrepareSet(
p, iFan1, 1, fUnit1, &pCutSet1 );
408 Bal_Cut_t * pCut0, * pCut0Lim = pCutSet0 + nCuts0;
409 Bal_Cut_t * pCut1, * pCut1Lim = pCutSet1 + nCuts1;
410 int i, Cost, nCutsR = 0;
412 for ( i = 0; i <
p->nCutNum; i++ )
413 pCutsR[i] = pCutSet + i;
417 int nCuts2 = Bal_ManPrepareSet(
p, iFan2, 2, fUnit2, &pCutSet2 );
418 Bal_Cut_t * pCut2, * pCut2Lim = pCutSet2 + nCuts2;
419 for ( pCut0 = pCutSet0; pCut0 < pCut0Lim; pCut0++ )
420 for ( pCut1 = pCutSet1; pCut1 < pCut1Lim; pCut1++ )
421 for ( pCut2 = pCutSet2; pCut2 < pCut2Lim; pCut2++ )
423 if ( Bal_CutCountBits(pCut0->
Sign | pCut1->
Sign | pCut2->
Sign) >
p->nLutSize )
425 if ( !Bal_CutMergeOrderMux(pCut0, pCut1, pCut2, pCutsR[nCutsR],
p->nLutSize) )
427 assert( pCutsR[nCutsR]->Delay == Target );
428 if ( Bal_SetLastCutIsContained(pCutsR, nCutsR) )
432 nCutsR = Bal_SetAddCut( pCutsR, nCutsR,
p->nCutNum );
437 for ( pCut0 = pCutSet0; pCut0 < pCut0Lim; pCut0++ )
438 for ( pCut1 = pCutSet1; pCut1 < pCut1Lim; pCut1++ )
440 if ( Bal_CutCountBits(pCut0->
Sign | pCut1->
Sign) >
p->nLutSize )
442 if ( !Bal_CutMergeOrder(pCut0, pCut1, pCutsR[nCutsR],
p->nLutSize) )
444 assert( pCutsR[nCutsR]->Delay == Target );
445 if ( Bal_SetLastCutIsContained(pCutsR, nCutsR) )
449 nCutsR = Bal_SetAddCut( pCutsR, nCutsR,
p->nCutNum );
457 assert( nCutsR > 0 && nCutsR < p->nCutNum );
458 assert( Bal_SetCheckArray(pCutsR, nCutsR) );
460 if ( fSave && Cost >= 0 )
463 Vec_PtrPush(
p->vCutSets, pCutSet0 );
464 assert( Vec_PtrSize(
p->vCutSets) == Gia_ManObjNum(
p->pNew) );
465 for ( i = 0; i < nCutsR; i++ )
466 pCutSet0[i] = *pCutsR[i];
467 for ( ; i <
p->nCutNum; i++ )
469 Vec_IntPush(
p->vCosts, Cost );
470 assert( Vec_IntSize(
p->vCosts) == Gia_ManObjNum(
p->pNew) );
488 int iFan0, iFan1, iFan2, Cost;
489 int fCompl0, fCompl1, fCompl2;
490 int fUnit0, fUnit1, fUnit2;
491 int Delay0, Delay1, Delay2, DelayMax;
492 int iObjNew = Abc_Lit2Var(iLitNew);
493 Gia_Obj_t * pObjNew = Gia_ManObj(
p->pNew, iObjNew );
494 int fMux = Gia_ObjIsMux(
p->pNew, pObjNew);
495 if ( iObjNew < Vec_PtrSize(
p->vCutSets) )
497 iFan0 = Gia_ObjFaninId0( pObjNew, iObjNew );
498 iFan1 = Gia_ObjFaninId1( pObjNew, iObjNew );
499 iFan2 = fMux ? Gia_ObjFaninId2(
p->pNew, iObjNew) : 0;
500 fCompl0 = Gia_ObjFaninC0( pObjNew );
501 fCompl1 = Gia_ObjFaninC1( pObjNew );
502 fCompl2 = fMux ? Gia_ObjFaninC2(
p->pNew, pObjNew) : 0;
503 Delay0 = Bal_ObjDelay(
p, iFan0 );
504 Delay1 = Bal_ObjDelay(
p, iFan1 );
505 Delay2 = Bal_ObjDelay(
p, iFan2 );
506 DelayMax = Abc_MaxInt( Delay0, Abc_MaxInt(Delay1, Delay2) );
507 fUnit0 = (int)(Delay0 != DelayMax);
508 fUnit1 = (int)(Delay1 != DelayMax);
509 fUnit2 = (int)(Delay2 != DelayMax);
513 Cost =
Bal_ManDeriveCuts(
p, iFan0, iFan1, iFan2, fCompl0, fCompl1, fCompl2, fUnit0, fUnit1, fUnit2, Gia_ObjIsXor(pObjNew), DelayMax, 1 );
519 fUnit0 = fUnit1 = fUnit2 = 1;
521 Cost =
Bal_ManDeriveCuts(
p, iFan0, iFan1, iFan2, fCompl0, fCompl1, fCompl2, fUnit0, fUnit1, fUnit2, Gia_ObjIsXor(pObjNew), DelayMax, 1 );
528 int iFan0 = Abc_Lit2Var( iLitNew0 );
529 int iFan1 = Abc_Lit2Var( iLitNew1 );
530 int iFan2 = Abc_Lit2Var( iLitNew2 );
531 int fCompl0 = Abc_LitIsCompl( iLitNew0 );
532 int fCompl1 = Abc_LitIsCompl( iLitNew1 );
533 int fCompl2 = Abc_LitIsCompl( iLitNew2 );
534 int Delay0 = Bal_ObjDelay(
p, iFan0 );
535 int Delay1 = Bal_ObjDelay(
p, iFan1 );
536 int Delay2 = Bal_ObjDelay(
p, iFan2 );
537 int DelayMax = Abc_MaxInt( Delay0, Abc_MaxInt(Delay1, Delay2) );
538 int fUnit0 = (int)(Delay0 != DelayMax);
539 int fUnit1 = (int)(Delay1 != DelayMax);
540 int fUnit2 = (int)(Delay2 != DelayMax);
543 return Bal_ManDeriveCuts(
p, iFan0, iFan1, iFan2, fCompl0, fCompl1, fCompl2, fUnit0, fUnit1, fUnit2, fIsXor, DelayMax, 0 );
559 int * pArray = Vec_IntArray(vSuper);
560 int nSize = Vec_IntSize(vSuper);
562 for ( i = 0; i < nSize-1; i++ )
565 for ( j = i+1; j < nSize; j++ )
566 if ( Vec_IntEntry(vCosts, Abc_Lit2Var(pArray[j])) > Vec_IntEntry(vCosts, Abc_Lit2Var(pArray[best_i])) )
568 ABC_SWAP(
int, pArray[i], pArray[best_i] );
571static inline void Vec_IntPushOrderCost2(
Vec_Int_t * vSuper,
Vec_Int_t * vCosts,
int iLit )
573 int i, nSize, * pArray;
574 Vec_IntPush( vSuper, iLit );
575 pArray = Vec_IntArray(vSuper);
576 nSize = Vec_IntSize(vSuper);
577 for ( i = nSize-1; i > 0; i-- )
579 if ( Vec_IntEntry(vCosts, Abc_Lit2Var(pArray[i])) <= Vec_IntEntry(vCosts, Abc_Lit2Var(pArray[i - 1])) )
581 ABC_SWAP(
int, pArray[i], pArray[i - 1] );
586 int i, DelayCur, Delay = Bal_LitDelay(
p, Vec_IntEntryLast(vSuper) );
587 assert( Vec_IntSize(vSuper) > 1 );
588 for ( i = Vec_IntSize(vSuper)-1; i > 0; i-- )
590 DelayCur = Bal_LitDelay(
p, Vec_IntEntry(vSuper, i-1) );
591 assert( DelayCur >= Delay );
592 if ( DelayCur > Delay )
612 int * pSuper = Vec_IntArray(vSuper);
613 int iBeg = Vec_IntFindFirstSameDelayAsLast(
p, vSuper );
614 int iEnd = Vec_IntSize(vSuper)-1;
615 int i, k, iBest = -1, kBest = -1, BestCost =
ABC_INFINITY, Cost;
618 for ( k = iBeg-1; k >= 0; k-- )
619 for ( i = iEnd; i >= iBeg; i-- )
621 Cost =
Bal_ManEvalTwo(
p, pSuper[i], pSuper[k], 0, Gia_ObjIsXor(pObj) );
624 if ( Cost == Bal_LitCost(
p, pSuper[k]) )
629 if ( BestCost > Cost )
630 BestCost = Cost, iBest = i, kBest = k;
632 if ( BestCost !=
ABC_INFINITY && (BestCost >> 4) == Bal_LitDelay(
p, pSuper[kBest]) )
635 return (kBest << 16)|iBest;
639 for ( i = iBeg; i <= iEnd; i++ )
640 for ( k = i+1; k <= iEnd; k++ )
642 Cost =
Bal_ManEvalTwo(
p, pSuper[i], pSuper[k], 0, Gia_ObjIsXor(pObj) );
645 if ( Cost == Abc_MaxInt(Bal_LitCost(
p, pSuper[i]), Bal_LitCost(
p, pSuper[k])) )
650 if ( BestCost > Cost )
651 BestCost = Cost, iBest = i, kBest = k;
656 return (kBest << 16)|iBest;
660 return (iEnd << 16)|(iEnd-1);
676 int i, k = 0, Prev = -1, This, fCompl = 0;
683 else if ( Prev != This )
684 Vec_IntWriteEntry( vSuper, k++, This ), Prev = This;
688 Vec_IntShrink( vSuper, k );
689 if ( Vec_IntSize( vSuper ) == 0 )
690 Vec_IntPush( vSuper, fCompl );
692 Vec_IntWriteEntry( vSuper, 0, Abc_LitNot(Vec_IntEntry(vSuper, 0)) );
696 int i, k = 0, Prev = -1, This;
700 { Vec_IntFill(vSuper, 1, 0);
return; }
703 if ( Prev == -1 || Abc_Lit2Var(Prev) != Abc_Lit2Var(This) )
704 Vec_IntWriteEntry( vSuper, k++, This ), Prev = This;
705 else if ( Prev != This )
706 { Vec_IntFill(vSuper, 1, 0);
return; }
708 Vec_IntShrink( vSuper, k );
709 if ( Vec_IntSize( vSuper ) == 0 )
710 Vec_IntPush( vSuper, 1 );
726 assert( !Gia_IsComplement(pObj) );
727 if ( !Gia_ObjIsXor(pObj) ||
729 Gia_ObjRefNum(
p, pObj) > 3 ||
733 Vec_IntPush(
p->vSuper, Gia_ObjToLit(
p, pObj) );
736 assert( !Gia_ObjFaninC0(pObj) && !Gia_ObjFaninC1(pObj) );
742 if ( Gia_IsComplement(pObj) ||
743 !Gia_ObjIsAndReal(
p, pObj) ||
745 Gia_ObjRefNum(
p, pObj) > 3 ||
749 Vec_IntPush(
p->vSuper, Gia_ObjToLit(
p, pObj) );
758 if (
p->vSuper == NULL )
759 p->vSuper = Vec_IntAlloc( 1000 );
761 Vec_IntClear(
p->vSuper );
762 if ( Gia_ObjIsXor(pObj) )
764 assert( !Gia_ObjFaninC0(pObj) && !Gia_ObjFaninC1(pObj) );
768 Vec_IntSort(
p->vSuper, 0 );
773 else if ( Gia_ObjIsAndReal(
p, pObj) )
778 Vec_IntSort(
p->vSuper, 0 );
786 assert( Vec_IntSize(
p->vSuper) > 0 );
802 int iLit0 = Vec_IntPop(vSuper);
803 int iLit1 = Vec_IntPop(vSuper);
805 if ( !Gia_ObjIsXor(pObj) )
811 Vec_IntPush( vSuper, iLit );
815 for ( i = Vec_IntSize(vSuper)-1; i > 0; i-- )
817 int iLit1 = Vec_IntEntry(vSuper, i);
818 int iLit2 = Vec_IntEntry(vSuper, i-1);
819 if ( Gia_ObjLevelId(pNew, Abc_Lit2Var(iLit1)) <= Gia_ObjLevelId(pNew, Abc_Lit2Var(iLit2)) )
821 Vec_IntWriteEntry( vSuper, i, iLit2 );
822 Vec_IntWriteEntry( vSuper, i-1, iLit1 );
827 Vec_IntClear( vSuper );
829 Vec_IntPush( vSuper, pLits[0] );
830 else if ( nLits == 2 )
832 Vec_IntPush( vSuper, pLits[0] );
833 Vec_IntPush( vSuper, pLits[1] );
836 else if ( nLits > 2 )
839 for ( i = 0; i < nLits; i++ )
840 Vec_IntPush( vSuper, pLits[i] );
842 Vec_IntSelectSortCostLit( vSuper,
p->vCosts );
844 while ( Vec_IntSize(vSuper) > 1 )
846 int iLit, Res = Bal_ManFindBestPair(
p, vSuper, pObj );
847 int iBest = Vec_IntEntry( vSuper, Res >> 16 );
848 int kBest = Vec_IntEntry( vSuper, Res & 0xFFFF );
849 Vec_IntRemove( vSuper, iBest );
850 Vec_IntRemove( vSuper, kBest );
851 if ( Gia_ObjIsXor(pObj) )
856 Vec_IntPushOrderCost2( vSuper,
p->vCosts, iLit );
860 assert( Vec_IntSize(vSuper) == 1 );
861 return Vec_IntEntry(vSuper, 0);
877 int i, iLit, iBeg, iEnd;
880 assert( Gia_ObjIsAnd(pObj) );
882 if ( Gia_ObjIsMux(
p, pObj) )
887 pObj->
Value =
Gia_ManHashMuxReal( pNew, Gia_ObjFanin2Copy(
p, pObj), Gia_ObjFanin1Copy(pObj), Gia_ObjFanin0Copy(pObj) );
895 if (
p->vStore == NULL )
896 p->vStore = Vec_IntAlloc( 1000 );
897 iBeg = Vec_IntSize(
p->vStore );
898 Vec_IntAppend(
p->vStore,
p->vSuper );
899 iEnd = Vec_IntSize(
p->vStore );
903 Gia_Obj_t * pTemp = Gia_ManObj(
p, Abc_Lit2Var(iLit) );
905 Vec_IntWriteEntry(
p->vStore, i, Abc_LitNotCond(pTemp->
Value, Abc_LitIsCompl(iLit)) );
907 assert( Vec_IntSize(
p->vStore) == iEnd );
910 Vec_IntShrink(
p->vStore, iBeg );
922 pNew->
pName = Abc_UtilStrsav(
p->pName );
923 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
927 Gia_ManConst0(
p)->Value = 0;
929 pObj->
Value = Gia_ManAppendCi( pNew );
937 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
943 nLevelMax = Abc_MaxInt( nLevelMax, Bal_ObjDelay(pMan, Gia_ObjFaninId0p(pNew, pObj)) );
946 printf(
"Best delay = %d\n", nLevelMax );
#define ABC_SWAP(Type, a, b)
#define ABC_INFINITY
MACRO DEFINITIONS ///.
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
void Gia_ManSuperCollectAnd_rec(Gia_Man_t *p, Gia_Obj_t *pObj, int fStrict)
void Gia_ManSimplifyAnd(Vec_Int_t *vSuper)
void Gia_ManCreateGate(Gia_Man_t *pNew, Gia_Obj_t *pObj, Vec_Int_t *vSuper)
Gia_Man_t * Gia_ManBalanceInt(Gia_Man_t *p, int fStrict)
void Gia_ManBalance_rec(Gia_Man_t *pNew, Gia_Man_t *p, Gia_Obj_t *pObj, int fStrict)
void Gia_ManSuperCollectXor_rec(Gia_Man_t *p, Gia_Obj_t *pObj, int fStrict)
void Gia_ManSuperCollect(Gia_Man_t *p, Gia_Obj_t *pObj, int fStrict)
void Gia_ManSimplifyXor(Vec_Int_t *vSuper)
FUNCTION DEFINITIONS ///.
int Gia_ManBalanceGate(Gia_Man_t *pNew, Gia_Obj_t *pObj, Vec_Int_t *vSuper, int *pLits, int nLits)
struct Bal_Man_t_ Bal_Man_t
Gia_Man_t * Gia_ManBalanceLut(Gia_Man_t *p, int nLutSize, int nCutNum, int fVerbose)
#define BAL_LEAF_MAX
DECLARATIONS ///.
int Bal_ManEvalTwo(Bal_Man_t *p, int iLitNew0, int iLitNew1, int iLitNew2, int fIsXor)
struct Bal_Cut_t_ Bal_Cut_t
void Bal_ManFree(Bal_Man_t *p)
int Bal_ManDeriveCuts(Bal_Man_t *p, int iFan0, int iFan1, int iFan2, int fCompl0, int fCompl1, int fCompl2, int fUnit0, int fUnit1, int fUnit2, int fIsXor, int Target, int fSave)
int Bal_ManSetGateLevel(Bal_Man_t *p, Gia_Obj_t *pObjOld, int iLitNew)
Bal_Man_t * Bal_ManAlloc(Gia_Man_t *pGia, Gia_Man_t *pNew, int nLutSize, int nCutNum, int fVerbose)
FUNCTION DEFINITIONS ///.
void Gia_ManStop(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupMuxes(Gia_Man_t *p, int Limit)
void Gia_ManHashStart(Gia_Man_t *p)
int Gia_ManHashMuxReal(Gia_Man_t *p, int iLitC, int iLit1, int iLit0)
void Gia_ManSetRegNum(Gia_Man_t *p, int nRegs)
Gia_Man_t * Gia_ManStart(int nObjsMax)
FUNCTION DEFINITIONS ///.
struct Gia_Obj_t_ Gia_Obj_t
Gia_Man_t * Gia_ManDupNoMuxes(Gia_Man_t *p, int fSkipBufs)
int Gia_ManHashXor(Gia_Man_t *p, int iLit0, int iLit1)
void Gia_ManFillValue(Gia_Man_t *p)
struct Gia_Man_t_ Gia_Man_t
Gia_Man_t * Gia_ManCleanup(Gia_Man_t *p)
void Gia_ManCreateRefs(Gia_Man_t *p)
int Gia_ManHashAnd(Gia_Man_t *p, int iLit0, int iLit1)
int Gia_ManHashXorReal(Gia_Man_t *p, int iLit0, int iLit1)
#define Gia_ManForEachCo(p, pObj, i)
#define Gia_ManForEachCi(p, pObj, i)
void Gia_ManHashStop(Gia_Man_t *p)
void Gia_ManPrintStats(Gia_Man_t *p, Gps_Par_t *pPars)
unsigned __int64 word
DECLARATIONS ///.
int pLeaves[BAL_LEAF_MAX]
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
#define Vec_IntForEachEntryStartStop(vVec, Entry, i, Start, Stop)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.