47 if ( !Gia_ObjIsAnd(pObj) )
49 if ( Gia_ObjIsTravIdCurrent(
p, pObj) )
51 Gia_ObjSetTravIdCurrent(
p, pObj);
54 if ( !Gia_ObjFaninC0(pObj) && !Gia_ObjFaninC1(pObj)
55 && Gia_ObjRefNum(
p, Gia_ObjFanin0(pObj)) >= 4
56 && Gia_ObjRefNum(
p, Gia_ObjFanin1(pObj)) >= 4 )
57 Vec_IntPushTwo( vXor, Gia_ObjFaninId0p(
p, pObj), Gia_ObjFaninId1p(
p, pObj) );
70 Gia_Obj_t * pObj, * pFan0, * pFan1;
int i;
76 Gia_Regular(pFan0)->fMark1 = 1;
77 Gia_Regular(pFan1)->fMark1 = 1;
83 Vec_IntClear( vTemp );
85 if ( Vec_IntSize(vTemp) > 0 )
86 Vec_IntAppend( Vec_WecPushLevel(vXors), vTemp );
94 Vec_Int_t * vLevel;
int i, iBest = -1, nBestSize = 0;
96 if ( !Vec_IntEntry(vUsed, i) && nBestSize < Vec_IntSize(vLevel) )
97 nBestSize = Vec_IntSize(vLevel), iBest = i;
102 int i, k, ObjI, ObjK, Counter = 0;
111 int i, k, ObjI, ObjK, Counter = 0;
120 Vec_Int_t * vLevel;
int i, iBest = -1, nThisSize, nBestSize = 0;
123 nBestSize = nThisSize, iBest = i;
129 Vec_Int_t * vUsed = Vec_IntStart( Vec_WecSize(vXors) );
130 Vec_Int_t * vFound = Vec_IntAlloc( 100 );
int Item, k, Obj;
132 Vec_Int_t * vTemp = Vec_WecEntry(vXors, Item);
133 Vec_Int_t * vNew = Vec_WecPushLevel( vSets );
134 Vec_IntPush( vNew, Item );
135 Vec_IntWriteEntry( vUsed, Item, 1 );
136 Vec_IntClear( vFound );
137 Vec_IntAppend( vFound, vTemp );
139 Vec_IntPush( vNew, Item );
140 Vec_IntWriteEntry( vUsed, Item, 1 );
141 vTemp = Vec_WecEntry(vXors, Item);
143 Vec_IntPushUnique( vFound, Obj );
146 Vec_IntFree( vUsed );
147 Vec_IntFree( vFound );
152 Vec_Int_t * vObjs = Vec_IntAlloc( 100 );
int i, j, Obj, Obj1, Obj2;
154 Vec_IntAppend( vObjs, Vec_WecEntry(vXors, Obj) );
156 Vec_IntAddToEntry( vMap, Obj, 1 );
158 Vec_Int_t * vTemp = Vec_WecEntry(vXors, Obj);
int k = 0;
160 if ( Vec_IntEntry(vMap, Obj1) > 1 || Vec_IntEntry(vMap, Obj2) > 1 )
161 Vec_IntWriteEntry(vTemp, k++, Obj1), Vec_IntWriteEntry(vTemp, k++, Obj2);
162 Vec_IntShrink( vTemp, k );
165 Vec_IntWriteEntry( vMap, Obj, 0 );
166 Vec_IntClear( vObjs );
168 Vec_IntAppend( vObjs, Vec_WecEntry(vXors, Obj) );
169 if ( Vec_IntSize(vObjs) == 0 ) {
176 Vec_IntPush( vA, Vec_IntPop(vObjs) );
177 Vec_IntPush( vB, Vec_IntPop(vObjs) );
178 while ( Vec_IntSize(vObjs) > 0 ) {
181 if ( Vec_IntFind(vA, Obj1) >= 0 )
182 Vec_IntPushUnique(vB, Obj2);
183 else if ( Vec_IntFind(vA, Obj2) >= 0 )
184 Vec_IntPushUnique(vB, Obj1);
185 else if ( Vec_IntFind(vB, Obj1) >= 0 )
186 Vec_IntPushUnique(vA, Obj2);
187 else if ( Vec_IntFind(vB, Obj2) >= 0 )
188 Vec_IntPushUnique(vA, Obj1);
190 Vec_IntWriteEntry(vObjs, k++, Obj1);
191 Vec_IntWriteEntry(vObjs, k++, Obj2);
194 Vec_IntShrink( vObjs, k );
196 Vec_IntSort( vA, 0 );
197 Vec_IntSort( vB, 0 );
198 Vec_IntClear( vObjs );
200 Vec_IntAppend( vObjs, Vec_WecEntry(vXors, Obj) );
202 if ( !((Vec_IntFind(vA, Obj1) >= 0 && Vec_IntFind(vB, Obj2) >= 0) ||
203 (Vec_IntFind(vA, Obj2) >= 0 && Vec_IntFind(vB, Obj1) >= 0)) ) {
205 printf(
"Internal verification failed.\n" );
206 Vec_IntFree( vObjs );
212 printf(
"Generated system with %d+%d+%d=%d variables and %d equations.\n",
213 Vec_IntSize(vA),Vec_IntSize(vB),Vec_IntSize(vSet),
214 Vec_IntSize(vA)+Vec_IntSize(vB)+Vec_IntSize(vSet), Vec_IntSize(vObjs)/2 );
215 Vec_IntFree( vObjs );
223 Vec_Int_t * vMap = Vec_IntStart( Gia_ManObjNum(
p) );
231 Vec_IntAppend( Vec_WecPushLevel(vMuls), vA );
232 Vec_IntAppend( Vec_WecPushLevel(vMuls), vB );
233 Vec_WecPushLevel(vMuls);
235 Vec_WecFree( vXors );
236 Vec_WecFree( vSets );
259 if ( Obj == Entry ) {
260 Vec_IntAddToEntry( vPairs, k+1, 1 );
263 if ( k == Vec_IntSize(vPairs) )
264 Vec_IntPushTwo( vPairs, Obj, 1 );
268 Vec_Int_t * vCounts = Vec_IntAlloc( 10 );
271 Vec_Int_t * vCut = Vec_WecEntry(vCuts4, Item);
281 Vec_Int_t * vCut = Vec_WecEntry(vCuts4, Item);
282 if ( Vec_IntSize(vCut) == 0 )
284 assert( Vec_IntSize(vCut) == 3 );
286 if ( Vec_IntEntry(vCut, 1) == Entry )
287 RetValue = Vec_IntEntry(vCut, 2);
288 if ( Vec_IntEntry(vCut, 2) == Entry )
289 RetValue = Vec_IntEntry(vCut, 1);
290 if ( RetValue == -1 )
292 Vec_IntClear( vCut );
300 int Entry = -1, Sum, k;
301 Vec_IntClear( vArg1 );
304 Vec_IntPush( vArg1, Entry );
309 Vec_IntPush( vArg1, Entry );
310 Vec_IntFree( vCounts );
316 if ( Entry == Entry0 )
324 Vec_Int_t * vCut = Vec_WecEntry(vCuts4, Item);
325 if ( Vec_IntSize(vCut) == 0 )
327 assert( Vec_IntSize(vCut) == 4 );
328 int Entry0, Entry1, iPlace = Vec_IntFind( vCut, Entry );
332 Entry0 = Vec_IntEntry(vCut, 2), Entry1 = Vec_IntEntry(vCut, 3);
333 else if ( iPlace == 2 )
334 Entry0 = Vec_IntEntry(vCut, 1), Entry1 = Vec_IntEntry(vCut, 3);
335 else if ( iPlace == 3 )
336 Entry0 = Vec_IntEntry(vCut, 1), Entry1 = Vec_IntEntry(vCut, 2);
340 *pEntry0 = Count0 <= Count1 ? Entry0 : Entry1;
341 *pEntry1 = Count0 <= Count1 ? Entry1 : Entry0;
344 Vec_Int_t * vCut = Vec_WecEntry(vCuts4, Item);
345 if ( Vec_IntSize(vCut) == 0 )
347 if ( Vec_IntFind( vCut, Entry ) >= 0 )
348 Vec_IntClear( vCut );
359 SumMin = Abc_MinInt( SumMin, Sum );
360 SumMax = Abc_MaxInt( SumMax, Sum );
362 Vec_IntClear( vArg2 );
364 if ( Entry == Entry0 || Entry == Entry1 ) {
365 Vec_IntPush( vArg2, Entry == Entry0 ? Entry1 : Entry0 );
366 Vec_IntPush( vArg2, Entry );
369 Entry = Vec_IntEntry(vArg2, 1);
371 Vec_IntPushTwo( vArg2, Entry0, Entry1 ), Entry = Entry1;
372 Vec_IntFree( vCounts );
376 int Entry0, Entry1, Sum, k;
378 if ( Obj0 == Entry0 && Obj1 == Entry1 ) {
379 Vec_IntAddToEntry( vPairs, k+2, 1 );
382 if ( k == Vec_IntSize(vPairs) )
383 Vec_IntPushThree( vPairs, Obj0, Obj1, 1 );
388 Vec_Int_t * vPairs = Vec_IntAlloc( 1000 );
391 int i, j, k, n, Entry0, Entry1, Sum, Obj0, Obj1;
399 Vec_IntClear( vSet );
403 if ( Obj0 == Entry0 && Obj1 == Entry1 ) {
404 Vec_IntPush( vSet, i );
405 Vec_IntDrop( vCut, k );
406 Vec_IntDrop( vCut, j );
407 j = k = Vec_IntSize(vCut);
409 vArg1 = Vec_WecPushLevel(vRes);
410 vArg2 = Vec_WecPushLevel(vRes);
411 Vec_WecPushLevel(vRes);
414 Vec_IntClear( vSet );
419 if ( Vec_IntFind(vArg1, Obj0) == -1 )
420 Vec_IntWriteEntry( vCut, k++, Obj0 );
421 Vec_IntShrink( vCut, k );
422 Vec_IntPush( vSet, i );
427 Vec_IntFree( vPairs );
444 int i, k, ObjI, ObjK, Counter = 0;
456 Vec_IntWriteEntry(vMap, Obj, iGroup);
458 Vec_IntPush( vTemp, iGroup );
462 Vec_Int_t * vIndex = Vec_IntAlloc( 100 ), * vTemp;
463 Vec_Int_t * vMap = Vec_IntStartFull( nObjs );
int i, Counter, nGroups = 0;
464 Vec_Int_t * vUngrouped = Vec_IntStartNatural( Vec_WecSize(
p) );
465 while ( Vec_IntSize(vUngrouped) ) {
466 int k, Obj, Item = Vec_IntPop(vUngrouped);
467 vTemp = Vec_WecEntry(
p, Item);
473 vTemp = Vec_WecEntry(
p, Item);
476 if ( Vec_IntEntry(vMap, Obj) >= 0 )
481 Vec_IntDrop( vUngrouped, i-- );
487 Vec_IntFree( vUngrouped );
491 Vec_IntPushTwo( vTemp, i, Vec_IntPop(vTemp) );
492 Vec_WecSortByLastInt(
p, 0 );
494 Vec_IntPush( vIndex, 0 );
496 if ( Vec_IntPop(vTemp) != Counter )
497 Vec_IntPush( vIndex, i ), Counter++;
498 Vec_IntPush( vIndex, Vec_WecSize(
p) );
499 assert( Vec_WecSize(
p) == 0 || Vec_IntSize(vIndex) == nGroups + 1 );
507 Vec_Bit_t * vSigs[2] = { Vec_BitStart(Gia_ManObjNum(
p)), Vec_BitStart(Gia_ManObjNum(
p)) };
508 Vec_Int_t * vTemp;
int g, c, k, Obj, Start;
512 if ( !Vec_BitEntry(vSigs[k==0], Obj) ) {
513 Vec_BitWriteEntry( vSigs[k==0], Obj, 1 );
514 Vec_IntPush( vAll, Obj );
516 Vec_Int_t * vIns = Vec_WecPushLevel( vXors );
517 Vec_Int_t * vOuts = Vec_WecPushLevel( vXors );
519 if ( Vec_BitEntry(vSigs[0], Obj) && !Vec_BitEntry(vSigs[1], Obj) )
520 Vec_IntPush( vIns, Obj );
521 if ( !Vec_BitEntry(vSigs[0], Obj) && Vec_BitEntry(vSigs[1], Obj) )
522 Vec_IntPush( vOuts, Obj );
523 Vec_BitWriteEntry( vSigs[0], Obj, 0 );
524 Vec_BitWriteEntry( vSigs[1], Obj, 0 );
526 Vec_IntClear( vAll );
532 Vec_Int_t * vOrder = Vec_IntAlloc( iStop - iStart );
533 Vec_Int_t * vUsed = Vec_IntStart( iStop ), * vTemp;
534 int i, nMatches = 0, iNext = -1;
536 if ( Vec_IntSize(vTemp) == 2 )
537 nMatches++, iNext = i;
538 if ( nMatches == 1 ) {
539 while ( Vec_IntSize(vOrder) < iStop - iStart ) {
540 Vec_IntPush( vOrder, iNext );
541 Vec_IntWriteEntry( vUsed, iNext, 1 );
544 if ( Vec_IntEntry(vUsed, i) )
546 Vec_Int_t * vLast = Vec_WecEntry(vAll, Vec_IntEntryLast(vOrder));
547 if (
Gia_ManMulFindOverlap(vTemp, vLast) == Vec_IntSize(vLast) && Vec_IntSize(vTemp) == Vec_IntSize(vLast) + 2 )
548 nMatches++, iNext = i;
554 Vec_IntFree( vUsed );
555 if ( Vec_IntSize(vOrder) == 0 )
556 Vec_IntFreeP( &vOrder );
562 Vec_Wec_t * vAll = Vec_WecAlloc( Vec_WecSize(vXors)/2 );
563 Gia_Obj_t * pObj;
Vec_Int_t * vIns, * vOuts, * vTemp, * vIndex, * vOrder;
int i, k, g, Start, Entry, Entry0, Entry1;
566 vTemp = Vec_WecPushLevel( vAll );
568 if ( Gia_ObjIsAnd(pObj)
569 && !Gia_ObjFaninC0(pObj) && Gia_ObjRefNum(
p, Gia_ObjFanin0(pObj)) >= 4
570 && !Gia_ObjFaninC1(pObj) && Gia_ObjRefNum(
p, Gia_ObjFanin1(pObj)) >= 4 )
571 Vec_IntPushTwo( vTemp, Gia_ObjFaninId0p(
p, pObj), Gia_ObjFaninId1p(
p, pObj) );
572 if ( Vec_IntSize(vTemp) == 0 )
573 Vec_WecShrink(vAll, Vec_WecSize(vAll)-1);
578 if ( vOrder == NULL )
580 Vec_Int_t * vIn0 = Vec_WecPushLevel( vRes );
581 Vec_Int_t * vIn1 = Vec_WecPushLevel( vRes );
582 Vec_Int_t * vOut = Vec_WecPushLevel( vRes );
583 vTemp = Vec_WecEntry( vAll, Vec_IntEntry(vOrder, 0) );
584 assert( Vec_IntSize(vTemp) == 2 );
585 Vec_IntPush( vIn0, Vec_IntEntry(vTemp, 0) );
586 Vec_IntPush( vIn1, Vec_IntEntry(vTemp, 1) );
588 vTemp = Vec_WecEntry( vAll, Entry );
590 if ( Vec_IntFind(vIn0, Entry0) >= 0 && Vec_IntFind(vIn1, Entry1) == -1 )
591 Vec_IntPush( vIn1, Entry1 );
592 else if ( Vec_IntFind(vIn0, Entry0) == -1 && Vec_IntFind(vIn1, Entry1) >= 0 )
593 Vec_IntPush( vIn0, Entry0 );
595 assert( (Vec_IntFind(vIn0, Entry0) >= 0 && Vec_IntFind(vIn1, Entry1) >= 0) ||
596 (Vec_IntFind(vIn0, Entry1) >= 0 && Vec_IntFind(vIn1, Entry0) >= 0) );
599 Vec_IntReverseOrder( vIn0 );
600 Vec_IntReverseOrder( vIn1 );
603 Vec_IntFree( vIndex );
615 Vec_IntPush( vAll, Obj );
616 Vec_IntUniqify( vAll );
617 int GroupSize = Vec_IntEntry(vIndex, g+1) - Start;
618 Vec_Int_t * vCnt = Vec_IntStart( Vec_IntSize(vAll) );
621 Vec_IntAddToEntry( vCnt, Vec_IntFind(vAll, Obj), 1 );
622 if ( Vec_IntCountEntry(vCnt, 1) != 2 || Vec_IntCountEntry(vCnt, 2) != GroupSize-1 || Vec_IntCountEntry(vCnt, GroupSize) != 2 ) {
623 printf(
"Detection of group %d failed.\n", g );
626 Vec_Int_t * vIn1 = Vec_WecPushLevel( vRes );
627 Vec_Int_t * vIn2 = Vec_WecPushLevel( vRes );
628 Vec_Int_t * vOut = Vec_WecPushLevel( vRes );
630 if ( Vec_IntEntry(vCnt, k) <= 2 )
631 Vec_IntPush( vIn1, Obj );
633 Vec_IntPush( vIn2, Obj );
634 Vec_IntSort( vIn1, 0 );
635 Vec_IntSort( vIn2, 0 );
638 Vec_IntShift( vTemp, 1 );
641 if ( Vec_IntFind(vIn1, Obj) == -1 ) {
642 Vec_IntPushUnique(vIn2, Obj);
644 Vec_IntShift( vTemp, -1 );
646 Vec_IntSort( vIn2, 0 );
649 Vec_IntFree( vIndex );
670 Gia_ObjSetTravIdCurrentId(
p, Obj );
672 Gia_ObjSetTravIdCurrentId(
p, Obj );
674 if ( Gia_ObjIsTravIdCurrentId(
p, i) )
676 if ( Gia_ObjIsTravIdCurrentId(
p, Gia_ObjFaninId0(pObj, i)) && Gia_ObjIsTravIdCurrentId(
p, Gia_ObjFaninId1(pObj, i)) )
677 Gia_ObjSetTravIdCurrentId(
p, i ), Vec_IntPush( vTfo, i );
683 Vec_Wrd_t * vRes = Vec_WrdAlloc( Vec_IntSize(vTfo) );
684 Vec_Wrd_t * vSims = Vec_WrdStart( Gia_ManObjNum(
p) );
687 Vec_WrdWriteEntry( vSims, Obj, Vec_WrdEntry(vSim0, i) );
689 Vec_WrdWriteEntry( vSims, Obj, Vec_WrdEntry(vSim1, i) );
691 word Sim0 = Vec_WrdEntry(vSims, Gia_ObjFaninId0p(
p, pObj) );
692 word Sim1 = Vec_WrdEntry(vSims, Gia_ObjFaninId1p(
p, pObj) );
693 Vec_WrdWriteEntry( vSims, Gia_ObjId(
p, pObj), (Gia_ObjFaninC0(pObj) ? ~Sim0 : Sim0) & (Gia_ObjFaninC1(pObj) ? ~Sim1 : Sim1) );
696 Vec_WrdPush( vRes, Vec_WrdEntry(vSims, Obj) );
697 Vec_WrdFree( vSims );
702 int w, Res = 0;
word Word = 0;
704 if ( (Word >> i) & 1 )
706 if ( fSigned && ((Word >> i) & 1) )
707 Res |= ~0 << Vec_WrdSize(vSim);
712 int w;
word * pWords = Vec_WrdArray(vSim);
713 for ( w = 0; w < Vec_WrdSize(vSim); w++ )
714 if ( (iNum >> w) & 1 )
715 pWords[w] |= (
word)1 << i;
719 assert( Vec_WrdSize(vSim0) + Vec_WrdSize(vSim1) <= 30 );
720 Vec_Wrd_t * vRes = Vec_WrdStart( Vec_WrdSize(vSim0) + Vec_WrdSize(vSim1) );
721 for (
int i = 0; i < 64; i++ )
732 for (
int m = 0; m < Vec_WecSize(vTerms)/3; m++ ) {
733 Vec_Int_t * vIn0 = Vec_WecEntry(vTerms, 3*m+0);
734 Vec_Int_t * vIn1 = Vec_WecEntry(vTerms, 3*m+1);
735 Vec_Int_t * vOut = Vec_WecEntry(vTerms, 3*m+2);
736 Vec_Wrd_t * vSim0 = Vec_WrdStartRandom( Vec_IntSize(vIn0) );
737 Vec_Wrd_t * vSim1 = Vec_WrdStartRandom( Vec_IntSize(vIn1) );
744 word Word;
int w, iPlace;
746 if ( (iPlace = Vec_WrdFind(vSims, Word)) >= 0 )
747 Vec_IntPush( vOutU, Abc_Var2Lit(Vec_IntEntry(vTfo, iPlace), 0) );
748 else if ( (iPlace = Vec_WrdFind(vSims, ~Word)) >= 0 )
749 Vec_IntPush( vOutU, Abc_Var2Lit(Vec_IntEntry(vTfo, iPlace), 1) );
751 Vec_IntPush( vOutU, -1 );
754 if ( (iPlace = Vec_WrdFind(vSims, Word)) >= 0 )
755 Vec_IntPush( vOutS, Abc_Var2Lit(Vec_IntEntry(vTfo, iPlace), 0) );
756 else if ( (iPlace = Vec_WrdFind(vSims, ~Word)) >= 0 )
757 Vec_IntPush( vOutS, Abc_Var2Lit(Vec_IntEntry(vTfo, iPlace), 1) );
759 Vec_IntPush( vOutS, -1 );
761 assert( Vec_IntSize(vOut) == 0 );
762 if ( Vec_IntCountEntry(vOutU, -1) < Vec_IntSize(vOutU) ||
763 Vec_IntCountEntry(vOutS, -1) < Vec_IntSize(vOutS) )
765 if ( Vec_IntCountEntry(vOutU, -1) < Vec_IntCountEntry(vOutS, -1) )
766 Vec_IntAppend( vOut, vOutU ), Vec_IntPush(vOut, 0);
768 Vec_IntAppend( vOut, vOutS ), Vec_IntPush(vOut, 1);
775 Vec_WrdFree( vSim0 );
776 Vec_WrdFree( vSim1 );
777 Vec_WrdFree( vSimU );
778 Vec_WrdFree( vSimS );
779 Vec_WrdFree( vSims );
781 Vec_IntFree( vOutU );
782 Vec_IntFree( vOutS );
784 Vec_WecRemoveEmpty( vTerms );
804 for ( i = 0; i < 3; i++ )
808 Vec_MemHashFree( vTtMem ), Vec_MemFree( vTtMem );
809 Vec_PtrFree( vTtMems );
816 if ( Vec_WecSize(vTerms) )
818 Vec_WecFree( vXors );
824 if ( Vec_WecSize(vCuts4) && Vec_WecSize(vCuts5) )
826 if ( Vec_WecSize(vTerms) )
832 int i, Temp, Limit = Vec_IntSize(vSet) - fSkipLast;
836 printf(
"n/a%s", i < Limit-1 ?
" ":
"" );
838 printf(
"%s%d%s", (fLit & Abc_LitIsCompl(Temp)) ?
"~":
"", fLit ? Abc_Lit2Var(Temp) : Temp, i < Limit-1 ?
" ":
"" );
844 Vec_Int_t * vIn0 = Vec_WecEntry(vTerms, 3*m+0);
845 Vec_Int_t * vIn1 = Vec_WecEntry(vTerms, 3*m+1);
846 Vec_Int_t * vOut = Vec_WecEntry(vTerms, 3*m+2);
847 printf(
"%sooth %ssigned %d x %d: ", fBooth ?
"B" :
"Non-b", Vec_IntEntryLast(vOut) ?
"" :
"un", Vec_IntSize(vIn0), Vec_IntSize(vIn1) );
863 printf(
"Detected %d booth and %d non-booth multipliers.\n", Vec_WecSize(vTermsB)/3, Vec_WecSize(vTermsA)/3 );
864 for ( m = 0; m < Vec_WecSize(vTermsA)/3; m++ )
866 for ( m = 0; m < Vec_WecSize(vTermsB)/3; m++ )
868 Vec_WecFree( vTermsB );
869 Vec_WecFree( vTermsA );
870 Vec_WecFree( vCuts3 );
871 Vec_WecFree( vCuts4 );
872 Vec_WecFree( vCuts5 );
#define ABC_INFINITY
MACRO DEFINITIONS ///.
unsigned Abc_Random(int fReset)
#define ABC_CONST(number)
PARAMETERS ///.
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Vec_Mem_t * Dau_CollectNpnFunctions(word *p, int nVars, int fVerbose)
Vec_Ptr_t * Gia_ManMatchCutsArray(Vec_Ptr_t *vTtMems, Gia_Man_t *pGia, int nCutSize, int nCutNum, int fVerbose)
Vec_Wec_t * Gia_ManMulFindBInputs(Gia_Man_t *p, Vec_Wec_t *vCuts4, Vec_Wec_t *vCuts5, int fVerbose)
Vec_Int_t * Gia_ManMulFindGroups(Vec_Wec_t *p, int nObjs, int fUseMap)
Vec_Wec_t * Gia_ManMulFindA(Gia_Man_t *p, Vec_Wec_t *vCuts3, int fVerbose)
void Gia_ManMulFindOutputs(Gia_Man_t *p, Vec_Wec_t *vTerms, int fVerbose)
void Gia_ManMulFindArg2(Vec_Wec_t *vCuts5, Vec_Int_t *vSet, Vec_Int_t *vArg2, int Entry0, int Entry1)
int Gia_ManMulFindGetArg(Vec_Wrd_t *vSim, int i, int fSigned)
Vec_Wec_t * Gia_ManMulFindXors(Gia_Man_t *p, Vec_Wec_t *vCuts3, int fVerbose)
void Gia_ManMulFindPrintOne(Vec_Wec_t *vTerms, int m, int fBooth)
int Gia_ManMulFindGetOverlap(Vec_Int_t *p1, Vec_Int_t *p2)
ABC_NAMESPACE_IMPL_START void Gia_ManMulFindXors2_rec(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vXor)
DECLARATIONS ///.
void Gia_ManMulFind(Gia_Man_t *p, int nCutNum, int fVerbose)
void Gia_ManMulFindAssignGroup(Vec_Int_t *vTemp, int iGroup, Vec_Int_t *vMap)
int Gia_ManMulFindMaxOverlap(Vec_Wec_t *vXors, Vec_Int_t *vUsed, Vec_Int_t *vFound)
int Gia_ManMulFindOverlap(Vec_Int_t *p1, Vec_Int_t *p2)
Vec_Wec_t * Gia_ManMulFindXors2(Gia_Man_t *p)
Vec_Wec_t * Gia_ManMulFindBInputs2(Gia_Man_t *p, Vec_Wec_t *vCuts4, Vec_Wec_t *vCuts5, int fVerbose)
int Gia_ManMulFindNextEntryCount(Vec_Int_t *vCounts, int Entry0)
Vec_Wec_t * Gia_ManMulFindAInputs2(Gia_Man_t *p, int fVerbose)
int Gia_ManMulFindNextEntry(Vec_Wec_t *vCuts4, Vec_Int_t *vSet, int Entry)
void Gia_ManMulFindPrintSet(Vec_Int_t *vSet, int fLit, int fSkipLast)
Vec_Wec_t * Gia_ManMulFindAInputs(Gia_Man_t *p, Vec_Wec_t *vXors, int fVerbose)
Vec_Int_t * Gia_ManMulFindCounts(Vec_Wec_t *vCuts4, Vec_Int_t *vSet)
Vec_Wrd_t * Gia_ManMulFindSim(Vec_Wrd_t *vSim0, Vec_Wrd_t *vSim1, int fSigned)
int Gia_ManMulFindGetOverlap2(Vec_Int_t *p1, Vec_Int_t *p2)
Vec_Ptr_t * Gia_ManMulFindCuts(Gia_Man_t *p, int nCutNum, int fVerbose)
Vec_Int_t * Gia_ManMulFindTfo(Gia_Man_t *p, Vec_Int_t *vIn0, Vec_Int_t *vIn1)
Vec_Wec_t * Gia_ManMulFindSets(Gia_Man_t *p, Vec_Wec_t *vXors)
Vec_Wec_t * Gia_ManMulFindB(Gia_Man_t *p, Vec_Wec_t *vCuts4, Vec_Wec_t *vCuts5, int fVerbose)
Vec_Wrd_t * Gia_ManMulFindSimCone(Gia_Man_t *p, Vec_Int_t *vIn0, Vec_Int_t *vIn1, Vec_Wrd_t *vSim0, Vec_Wrd_t *vSim1, Vec_Int_t *vTfo)
void Gia_ManMulFindSetArg(Vec_Wrd_t *vSim, int i, int iNum)
int Gia_ManMulFindOne(Gia_Man_t *p, Vec_Wec_t *vXors, Vec_Int_t *vSet, Vec_Int_t *vMap, Vec_Int_t *vA, Vec_Int_t *vB, int fVerbose)
int Gia_ManMulFindMaxSize(Vec_Wec_t *vXors, Vec_Int_t *vUsed)
Vec_Int_t * Gia_ManFindMulDetectOrder(Vec_Wec_t *vAll, int iStart, int iStop)
void Gia_ManMulFindAddEntry1(Vec_Int_t *vPairs, int Obj)
void Gia_ManMulFindAddEntry(Vec_Int_t *vPairs, int Obj0, int Obj1)
void Gia_ManMulFindArg1(Vec_Wec_t *vCuts4, Vec_Int_t *vSet, Vec_Int_t *vArg1)
int Gia_ManMulFindNextEntry2(Vec_Wec_t *vCuts4, Vec_Int_t *vSet, int Entry, Vec_Int_t *vCounts, int *pEntry0, int *pEntry1)
#define Gia_ManForEachAnd(p, pObj, i)
struct Gia_Obj_t_ Gia_Obj_t
struct Gia_Man_t_ Gia_Man_t
#define Gia_ManForEachObjVec(vVec, p, pObj, i)
int Gia_ObjRecognizeExor(Gia_Obj_t *pObj, Gia_Obj_t **ppFan0, Gia_Obj_t **ppFan1)
void Gia_ManCreateRefs(Gia_Man_t *p)
void Gia_ManIncrementTravId(Gia_Man_t *p)
void Gia_ManCleanMark01(Gia_Man_t *p)
unsigned __int64 word
DECLARATIONS ///.
typedefABC_NAMESPACE_IMPL_START struct Vec_Mem_t_ Vec_Mem_t
DECLARATIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Bit_t_ Vec_Bit_t
INCLUDES ///.
#define Vec_IntForEachEntryDouble(vVec, Entry1, Entry2, i)
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
#define Vec_IntForEachEntryStop(vVec, Entry, i, Stop)
#define Vec_IntForEachEntryStart(vVec, Entry, i, Start)
#define Vec_IntForEachEntryTriple(vVec, Entry1, Entry2, Entry3, i)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
#define Vec_WecForEachLevelDouble(vGlob, vVec1, vVec2, i)
#define Vec_WecForEachLevel(vGlob, vVec, i)
MACRO DEFINITIONS ///.
#define Vec_WecForEachLevelStartStop(vGlob, vVec, i, LevelStart, LevelStop)
typedefABC_NAMESPACE_HEADER_START struct Vec_Wec_t_ Vec_Wec_t
INCLUDES ///.
#define Vec_WrdForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Wrd_t_ Vec_Wrd_t
INCLUDES ///.