62 pObj = Gia_ManObj(
p, Abc_Lit2Var(iLit) );
63 if ( ~pObj->
Value == 0 )
66 iLitNew = Abc_LitNotCond( pObj->
Value, Abc_LitIsCompl(iLit) );
67 Vec_IntWriteEntry( vLits, i, iLitNew );
85 int i, k, iNode, iRepr, iPrev;
86 if (
p->pReprs == NULL )
91 for ( i = 0; i < Gia_ManObjNum(pNew); i++ )
95 Gia_ObjSetRepr( pNew, Abc_Lit2Var(Gia_ManObj(
p, i)->Value), 0 );
97 vClass = Vec_IntAlloc( 100 );
100 Vec_IntClear( vClass );
102 Vec_IntPushUnique( vClass, Abc_Lit2Var(Gia_ManObj(
p, k)->Value) );
103 assert( Vec_IntSize( vClass ) > 1 );
104 Vec_IntSort( vClass, 0 );
105 iRepr = iPrev = Vec_IntEntry( vClass, 0 );
108 Gia_ObjSetRepr( pNew, iNode, iRepr );
113 Vec_IntFree( vClass );
132 assert( Vec_IntSize(
p->vCis) == Vec_IntSize(pNew->
vCis) );
135 assert( Gia_ObjCioId(pObj) == i );
136 pObjNew = Gia_ObjFromLit( pNew, pObj->
Value );
137 assert( !Gia_IsComplement(pObjNew) );
138 Vec_IntWriteEntry( pNew->
vCis, i, Gia_ObjId(pNew, pObjNew) );
139 Gia_ObjSetCioId( pObjNew, i );
158 assert( Vec_IntSize(
p->vCos) == Vec_IntSize(pNew->
vCos) );
161 assert( Gia_ObjCioId(pObj) == i );
162 pObjNew = Gia_ObjFromLit( pNew, pObj->
Value );
163 assert( !Gia_IsComplement(pObjNew) );
164 Vec_IntWriteEntry( pNew->
vCos, i, Gia_ObjId(pNew, pObjNew) );
165 Gia_ObjSetCioId( pObjNew, i );
184 if ( Gia_ObjIsCi(pObj) )
185 return pObj->
Value = Gia_ManAppendCi(pNew);
189 if ( Gia_ObjIsCo(pObj) )
190 return pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
192 return pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
213 pNew->
pName = Abc_UtilStrsav(
p->pName );
214 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
215 Gia_ManConst0(
p)->Value = 0;
220 pObj->
Value = Gia_ManAppendCi(pNew);
221 assert( Gia_ManCiNum(pNew) == Gia_ManCiNum(
p) );
244 assert( Vec_IntSize(vMapFf2Ppi) == Vec_IntSize(vMapPpi2Ff) + Vec_IntCountEntry(vMapFf2Ppi, -1) );
247 pNew->
pName = Abc_UtilStrsav(
p->pName );
248 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
249 Gia_ManConst0(
p)->Value = 0;
252 pObj->
Value = Gia_ManAppendCi(pNew);
255 pObj = Gia_ManCi(
p, Gia_ManPiNum(
p) + Flop );
256 pObj->
Value = Gia_ManAppendCi(pNew);
260 pObj = Gia_ManCi(
p, Gia_ManPiNum(
p) + Flop );
267 pObj->
Value = Gia_ManAppendCi(pNew);
278 pObj = Gia_ManCi(
p, Gia_ManPiNum(
p) + Flop );
279 pObj = Gia_ObjRoToRi(
p, pObj );
284 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
289 pObj = Gia_ManCi(
p, Gia_ManPiNum(
p) + Flop );
290 pObj = Gia_ObjRoToRi(
p, pObj );
291 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
294 assert( Gia_ManPiNum(pNew) == Gia_ManPiNum(
p) + Vec_IntSize(vMapPpi2Ff) );
295 assert( Gia_ManCiNum(pNew) == Gia_ManCiNum(
p) );
296 assert( Gia_ManPoNum(pNew) == Gia_ManPoNum(
p) );
297 assert( Gia_ManCoNum(pNew) == Gia_ManCoNum(
p) - Vec_IntSize(vMapPpi2Ff) );
320 pNew->
pName = Abc_UtilStrsav(
p->pName );
321 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
322 Gia_ManConst0(
p)->Value = 0;
323 for ( i = iOutStart; i < iOutStop; i++ )
325 pObj = Gia_ManCo(
p, i );
347 assert( Gia_ManRegNum(
p) == 0 );
348 assert( Gia_ManPoNum(
p) == Vec_IntSize(vOutPres) );
351 pNew->
pName = Abc_UtilStrsav(
p->pName );
352 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
353 Gia_ManConst0(
p)->Value = 0;
355 pObj->
Value = Gia_ManAppendCi(pNew);
357 if ( Vec_IntEntry(vOutPres, i) )
360 if ( Vec_IntEntry(vOutPres, i) )
361 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
381 assert( Gia_ManRegNum(
p) == 0 );
382 assert( Gia_ManPoNum(
p) >= Vec_IntSize(vOutsLeft) );
385 pNew->
pName = Abc_UtilStrsav(
p->pName );
386 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
387 Gia_ManConst0(
p)->Value = 0;
389 pObj->
Value = Gia_ManAppendCi(pNew);
393 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(Gia_ManPo(
p, iOut)) );
413 assert( Gia_ObjIsAnd(pObj) );
414 pNext = Gia_ObjNextObj(
p, Gia_ObjId(
p, pObj) );
419 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
422 pNew->
pNexts[Abc_Lit2Var(pObj->
Value)] = Abc_Lit2Var( Abc_Lit2Var(pNext->
Value) );
446 pNew->
pName = Abc_UtilStrsav(
p->pName );
447 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
449 Gia_ManConst0(
p)->Value = 0;
451 pObj->
Value = Gia_ManAppendCi(pNew);
455 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
477 assert( Gia_ObjIsAnd(pObj) );
480 return pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
489 pNew->
pName = Abc_UtilStrsav(
p->pName );
490 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
491 Gia_ManConst0(
p)->Value = 0;
493 pObj->
Value = Gia_ManAppendCi(pNew);
513 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
538 pNew->
pName = Abc_UtilStrsav(
p->pName );
539 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
540 Gia_ManConst0(
p)->Value = 0;
542 pObj->
Value = Gia_ManAppendCi(pNew);
544 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
546 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
570 pNew->
pName = Abc_UtilStrsav(
p->pName );
571 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
572 Gia_ManConst0(
p)->Value = 0;
574 pObj->
Value = Gia_ManAppendCi(pNew);
576 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
579 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
580 pObj->
Value = Gia_ManAppendCo( pNew, Abc_LitNot(Gia_ObjFanin0Copy(pObj)) );
602 assert( Gia_ManRegNum(
p) == 0 );
604 pNew->
pName = Abc_UtilStrsav(
p->pName );
605 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
606 Gia_ManConst0(
p)->Value = 0;
608 pObj->
Value = (i < Gia_ManCiNum(
p) - nLastPis) ? ~0 : Gia_ManAppendCi(pNew);
610 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
612 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
634 pNew->
pName = Abc_UtilStrsav(
p->pName );
635 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
636 Gia_ManConst0(
p)->Value = 0;
639 if ( Gia_ObjIsAnd(pObj) )
640 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
641 else if ( Gia_ObjIsCi(pObj) )
643 pObj->
Value = Gia_ManAppendCi( pNew );
644 if ( Gia_ObjCioId(pObj) >= Gia_ManPiNum(
p) )
645 pObj->
Value = Abc_LitNotCond( pObj->
Value, Abc_InfoHasBit((
unsigned *)pInitState, Gia_ObjCioId(pObj) - Gia_ManPiNum(
p)) );
647 else if ( Gia_ObjIsCo(pObj) )
649 pObj->
Value = Gia_ObjFanin0Copy(pObj);
650 if ( Gia_ObjCioId(pObj) >= Gia_ManPoNum(
p) )
651 pObj->
Value = Abc_LitNotCond( pObj->
Value, Abc_InfoHasBit((
unsigned *)pInitState, Gia_ObjCioId(pObj) - Gia_ManPoNum(
p)) );
652 pObj->
Value = Gia_ManAppendCo( pNew, pObj->
Value );
676 assert( pCex == NULL || nFrames <= pCex->iFrame );
678 for ( i = 0; i < nFrames; i++ )
681 pObj->
fMark0 = pCex ? Abc_InfoHasBit(pCex->pData, pCex->nRegs+i*pCex->nPis+k) : (1 &
Gia_ManRandom(0));
683 pObj->
fMark0 = (Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj)) &
684 (Gia_ObjFanin1(pObj)->fMark0 ^ Gia_ObjFaninC1(pObj));
686 pObj->
fMark0 = Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj);
699 vInits = Vec_BitAlloc( Gia_ManRegNum(
p) );
701 Vec_BitPush( vInits, pObj->
fMark0 );
703 Vec_BitFree( vInits );
726 pNew->
pName = Abc_UtilStrsav(
p->pName );
727 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
728 if ( Gia_ManHasChoices(
p) )
730 Gia_ManConst0(
p)->Value = 0;
733 if ( Gia_ObjIsBuf(pObj) )
734 pObj->
Value = Gia_ManAppendBuf( pNew, Gia_ObjFanin0Copy(pObj) );
735 else if ( Gia_ObjIsAnd(pObj) )
737 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
738 if ( Gia_ObjSibl(
p, Gia_ObjId(
p, pObj)) )
739 pNew->
pSibls[Abc_Lit2Var(pObj->
Value)] = Abc_Lit2Var(Gia_ObjSiblObj(
p, Gia_ObjId(
p, pObj))->Value);
741 else if ( Gia_ObjIsCi(pObj) )
742 pObj->
Value = Gia_ManAppendCi( pNew );
743 else if ( Gia_ObjIsCo(pObj) )
744 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
756 assert( Gia_ManCiNum(p1) == Gia_ManCiNum(p2) );
757 assert( Gia_ManCoNum(p1) == Gia_ManCoNum(p2) );
758 pNew =
Gia_ManStart( Gia_ManObjNum(p1) + Gia_ManObjNum(p2) );
760 Gia_ManConst0(p1)->Value = 0;
761 Gia_ManConst0(p2)->Value = 0;
763 pObj->
Value = Gia_ManCi(p2, i)->Value = Gia_ManAppendCi( pNew );
769 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
771 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
787 if (
p->vRegClasses )
792 pNew->
vConfigs = Vec_IntDup(
p->vConfigs );
794 pNew->
pCellStr = Abc_UtilStrsav(
p->pCellStr );
797 pNew->
vNamesIn = Vec_PtrDupStr(
p->vNamesIn );
799 pNew->
vNamesOut = Vec_PtrDupStr(
p->vNamesOut );
808 pNew->
pName = Abc_UtilStrsav(
p->pName );
809 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
810 Gia_ManConst0(
p)->Value = 0;
813 if ( Gia_ObjIsAnd(pObj) )
814 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
815 else if ( Gia_ObjIsCi(pObj) && Gia_ObjCioId(pObj) < Gia_ManCiNum(
p)-nRemPis )
816 pObj->
Value = Gia_ManAppendCi( pNew );
817 else if ( Gia_ObjIsCo(pObj) )
818 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
829 pNew->
pName = Abc_UtilStrsav(
p->pName );
830 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
831 Gia_ManConst0(
p)->Value = 0;
834 if ( Gia_ObjIsBuf(pObj) )
835 pObj->
Value = Gia_ObjFanin0Copy(pObj);
836 else if ( Gia_ObjIsAnd(pObj) )
837 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
838 else if ( Gia_ObjIsCi(pObj) )
839 pObj->
Value = Gia_ManAppendCi( pNew );
840 else if ( Gia_ObjIsCo(pObj) )
841 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
852 pNew->
pName = Abc_UtilStrsav(
p->pName );
853 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
854 Gia_ManConst0(
p)->Value = 0;
858 if ( Vec_IntEntry(vMap, i) >= 0 )
859 pObj->
Value = Gia_ManObj(
p, Vec_IntEntry(vMap, i) )->Value;
860 else if ( Gia_ObjIsAnd(pObj) )
862 else if ( Gia_ObjIsCi(pObj) )
863 pObj->
Value = Gia_ManAppendCi( pNew );
864 else if ( Gia_ObjIsCo(pObj) )
865 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
877 pNew =
Gia_ManStart( Gia_ManObjNum(
p) + Gia_ManCiNum(
p) + Gia_ManCoNum(
p) );
879 Gia_ManConst0(
p)->Value = 0;
881 pObj->
Value = Gia_ManAppendCi( pNew );
883 pObj->
Value = Gia_ManAppendBuf( pNew, pObj->
Value );
887 pObj->
Value = Gia_ManAppendBuf( pNew, Gia_ObjFanin0Copy(pObj) );
889 pObj->
Value = Gia_ManAppendCo( pNew, pObj->
Value );
909 pNew->
pName = Abc_UtilStrsav(
p->pName );
910 for ( i = 0; i < Gia_ManCiNum(
p); i++ )
911 Gia_ManAppendCi( pNew );
912 for ( i = 0; i < Gia_ManCoNum(
p); i++ )
913 Gia_ManAppendCo( pNew, 0 );
935 assert( Vec_IntSize(vPiPerm) == Gia_ManPiNum(
p) );
937 pNew->
pName = Abc_UtilStrsav(
p->pName );
938 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
939 Gia_ManConst0(
p)->Value = 0;
943 Gia_ManPi(
p, Vec_IntEntry(vPiPerm,i))->Value = Gia_ManAppendCi( pNew );
947 if ( Gia_ObjIsBuf(pObj) )
948 pObj->
Value = Gia_ManAppendBuf( pNew, Gia_ObjFanin0Copy(pObj) );
949 else if ( Gia_ObjIsAnd(pObj) )
950 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
951 else if ( Gia_ObjIsCi(pObj) )
953 if ( Gia_ObjIsRo(
p, pObj) )
954 pObj->
Value = Gia_ManAppendCi( pNew );
956 else if ( Gia_ObjIsCo(pObj) )
957 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
968 assert( Vec_IntSize(vFfPerm) == Gia_ManRegNum(
p) );
971 pNew->
pName = Abc_UtilStrsav(
p->pName );
972 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
973 Gia_ManConst0(
p)->Value = 0;
975 pObj->
Value = Gia_ManAppendCi(pNew);
978 Gia_ManRo(
p, Vec_IntEntry(vFfPerm, i))->Value = Gia_ManAppendCi( pNew );
980 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
982 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
985 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy( Gia_ManRi(
p, Vec_IntEntry(vFfPerm, i)) ) );
995 assert( Vec_IntSize(vFfMask) >= Gia_ManRegNum(
p) );
997 pNew->
pName = Abc_UtilStrsav(
p->pName );
998 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
999 Gia_ManConst0(
p)->Value = 0;
1001 pObj->
Value = Gia_ManAppendCi(pNew);
1005 Gia_ManAppendCi(pNew);
1007 Gia_ManRo(
p, k++)->Value = Gia_ManAppendCi(pNew);
1008 assert( k == Gia_ManRegNum(
p) );
1010 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
1012 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1016 Gia_ManAppendCo( pNew, 0 );
1019 pObj = Gia_ManRi(
p, k++ );
1020 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1022 assert( k == Gia_ManRegNum(
p) );
1028 Vec_Int_t * vPerm = Vec_IntCondense( vFfMask, -1 );
1031 Vec_IntFree( vPerm );
1054 pNew->
pName = Abc_UtilStrsav(
p->pName );
1055 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
1057 Gia_ManConst0(
p)->Value = 0;
1059 pObj->
Value = Gia_ManAppendCi( pNew );
1062 int iLit0 = Gia_ObjFanin0Copy(pObj);
1063 int iLit1 = Gia_ObjFanin1Copy(pObj);
1066 if ( Abc_Lit2Var(iLit0) <= Gia_ManCiNum(
p) )
1067 iLit0 = Abc_Var2Lit( iPlace0+1, Abc_LitIsCompl(iLit0) );
1068 if ( Abc_Lit2Var(iLit1) <= Gia_ManCiNum(
p) )
1069 iLit1 = Abc_Var2Lit( iPlace1+1, Abc_LitIsCompl(iLit1) );
1073 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1094 Vec_Int_t * vPerm = Vec_IntStartNatural( n );
1095 int i, * pPerm = Vec_IntArray( vPerm );
1096 for ( i = 0; i < n; i++ )
1099 ABC_SWAP(
int, pPerm[i], pPerm[j] );
1112 pNew->
pName = Abc_UtilStrsav(
p->pName );
1113 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
1114 Gia_ManConst0(
p)->Value = 0;
1116 Gia_ManPi(
p, Vec_IntEntry(vPiPerm,i))->Value = Gia_ManAppendCi(pNew) ^ (
Abc_Random(0) & 1);
1118 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
1120 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(Gia_ManPo(
p, Vec_IntEntry(vPoPerm,i))) ^ (
Abc_Random(0) & 1) );
1121 Vec_IntFree( vPiPerm );
1122 Vec_IntFree( vPoPerm );
1141 if ( pNew->
nRegs > 0 )
1143 if ( Vec_IntSize(&pNew->
vHTable) == 0 )
1145 Gia_ManConst0(pTwo)->Value = 0;
1148 if ( Gia_ObjIsAnd(pObj) )
1149 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
1150 else if ( Gia_ObjIsCi(pObj) )
1151 pObj->
Value = Gia_ManAppendCi( pNew );
1152 else if ( Gia_ObjIsCo(pObj) )
1153 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1160 assert( Gia_ManCiNum(pNew) == Gia_ManCiNum(pTwo) );
1161 if ( Vec_IntSize(&pNew->
vHTable) == 0 )
1163 Gia_ManConst0(pTwo)->Value = 0;
1166 if ( Gia_ObjIsAnd(pObj) )
1168 else if ( Gia_ObjIsCi(pObj) )
1169 pObj->
Value = Gia_Obj2Lit( pNew, Gia_ManCi( pNew, Gia_ObjCioId(pObj) ) );
1170 else if ( Gia_ObjIsCo(pObj) )
1171 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1179 pNew =
Gia_ManStart( Gia_ManObjNum(pOne) + Gia_ManObjNum(pTwo) );
1183 Gia_ManConst0(pOne)->Value = 0;
1186 if ( Gia_ObjIsAnd(pObj) )
1188 else if ( Gia_ObjIsCi(pObj) )
1189 pObj->
Value = Gia_ManAppendCi( pNew );
1191 Gia_ManConst0(pTwo)->Value = 0;
1194 if ( Gia_ObjIsAnd(pObj) )
1196 else if ( Gia_ObjIsPi(pTwo, pObj) )
1197 pObj->
Value = Gia_ManPi(pOne, Gia_ObjCioId(pObj))->Value;
1198 else if ( Gia_ObjIsCi(pObj) )
1199 pObj->
Value = Gia_ManAppendCi( pNew );
1204 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1206 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1209 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1211 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1218 assert( Vec_IntSize(vLits) == Gia_ManCiNum(
p) );
1219 Gia_ManConst0(
p)->Value = 0;
1221 pObj->
Value = Vec_IntEntry(vLits, i);
1223 if ( fBufs && Gia_ObjIsBuf(pObj) )
1224 pObj->
Value = Gia_ManAppendBuf( pNew, Gia_ObjFanin0Copy(pObj) );
1227 Vec_IntClear( vLits );
1229 Vec_IntPush( vLits, Gia_ObjFanin0Copy(pObj) );
1230 assert( Vec_IntSize(vLits) == Gia_ManCoNum(
p) );
1251 int i, Node1, Node2, Node;
1252 assert( Gia_ManRegNum(
p) > 0 );
1253 assert( Gia_ManRegNum(pInv) == 0 );
1254 assert( Gia_ManCoNum(pInv) == 1 );
1255 assert( Gia_ManRegNum(
p) == Gia_ManCiNum(pInv) );
1257 pNew =
Gia_ManStart( Gia_ManObjNum(
p) + 2*Gia_ManObjNum(pInv) );
1258 pNew->
pName = Abc_UtilStrsav(
p->pName );
1259 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
1261 Gia_ManConst0(
p)->Value = 0;
1264 if ( Gia_ObjIsAnd(pObj) )
1266 else if ( Gia_ObjIsCi(pObj) )
1267 pObj->
Value = Gia_ManAppendCi( pNew );
1268 else if ( Gia_ObjIsCo(pObj) )
1269 pObj->
Value = Gia_ObjFanin0Copy(pObj);
1273 Gia_ManCi(pInv, i)->Value = pObj->
Value;
1276 pObj = Gia_ManCo( pInv, 0 );
1277 Node1 = Gia_ObjFanin0Copy(pObj);
1280 Gia_ManCi(pInv, i)->Value = pObj->
Value;
1283 pObj = Gia_ManCo( pInv, 0 );
1284 Node2 = Gia_ObjFanin0Copy(pObj);
1287 Gia_ManAppendCo( pNew, Node );
1311 pNew->
pName = Abc_UtilStrsav(
p->pName );
1312 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
1314 Gia_ManConst0(
p)->Value = 0;
1316 pObj->
Value = Gia_ManAppendCi( pNew );
1320 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1321 for ( k = 0; k < nCones; k++ )
1324 assert( Gia_ManPoNum(pOne) == 1 );
1325 assert( Gia_ManRegNum(pOne) == 0 );
1327 assert( Gia_ManPiNum(pOne) == Gia_ManRegNum(
p) );
1329 assert( Gia_ManPiNum(pOne) == Gia_ManCiNum(
p) );
1330 Gia_ManConst0(pOne)->Value = 0;
1332 pObj->
Value = Gia_ManCiLit( pNew, fOnlyRegs ? Gia_ManPiNum(
p) + i : i );
1336 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1339 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1365 pNew->
pName = Abc_UtilStrsav(
p->pName );
1366 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
1369 Gia_ManConst0(
p)->Value = 0;
1370 iCtrl = Gia_ManAppendCi( pNew );
1372 pObj->
Value = Gia_ManAppendCi( pNew );
1376 pObj->
Value = Gia_ObjFanin0Copy(pObj);
1378 pObj->
Value =
Gia_ManHashMux( pNew, iCtrl, Gia_ObjFanin0Copy(pObj), Gia_ObjRiToRo(
p, pObj)->Value );
1380 Gia_ManAppendCo( pNew, pObj->
Value );
1403 int i, Counter1 = 0, Counter2 = 0;
1404 assert(
p->vFlopClasses != NULL );
1406 pNew->
pName = Abc_UtilStrsav(
p->pName );
1407 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
1409 Gia_ManConst0(
p)->Value = 0;
1411 pObj->
Value = Gia_ManAppendCi( pNew );
1413 if ( Vec_IntEntry(
p->vFlopClasses, i) != iClass )
1414 pObj->
Value = Gia_ManAppendCi( pNew );
1416 if ( Vec_IntEntry(
p->vFlopClasses, i) == iClass )
1417 pObj->
Value = Gia_ManAppendCi( pNew ), Counter1++;
1419 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
1421 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1423 if ( Vec_IntEntry(
p->vFlopClasses, i) != iClass )
1424 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1426 if ( Vec_IntEntry(
p->vFlopClasses, i) == iClass )
1427 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) ), Counter2++;
1428 assert( Counter1 == Counter2 );
1448 int i, nRos = 0, nRis = 0;
1449 int CountMarked = 0;
1451 CountMarked += pObj->
fMark0;
1457 pNew->
pName = Abc_UtilStrsav(
p->pName );
1458 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
1459 Gia_ManConst0(
p)->Value = 0;
1464 assert( !Gia_ObjIsBuf(pObj) );
1468 if ( Gia_ObjIsBuf(pObj) )
1469 pObj->
Value = Gia_ManAppendBuf( pNew, Gia_ObjFanin0Copy(pObj) );
1470 else if ( Gia_ObjIsAnd(pObj) )
1472 if ( Gia_ObjIsXor(pObj) )
1473 pObj->
Value = Gia_ManAppendXorReal( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
1474 else if ( Gia_ObjIsMux(
p, pObj) )
1475 pObj->
Value = Gia_ManAppendMuxReal( pNew, Gia_ObjFanin2Copy(
p, pObj), Gia_ObjFanin1Copy(pObj), Gia_ObjFanin0Copy(pObj) );
1477 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
1479 else if ( Gia_ObjIsCi(pObj) )
1481 pObj->
Value = Gia_ManAppendCi( pNew );
1482 nRos += Gia_ObjIsRo(
p, pObj);
1484 else if ( Gia_ObjIsCo(pObj) )
1487 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1488 nRis += Gia_ObjIsRi(
p, pObj);
1494 if (
p->pReprs &&
p->pNexts )
1498 for ( i = 0; i < Gia_ManObjNum(pNew); i++ )
1499 Gia_ObjSetRepr( pNew, i,
GIA_VOID );
1502 if ( !~pObj->
Value )
1504 pRepr = Gia_ObjReprObj(
p, i );
1505 if ( pRepr == NULL )
1507 if ( !~pRepr->
Value )
1509 assert( !Gia_ObjIsBuf(pObj) );
1510 if ( Abc_Lit2Var(pObj->
Value) != Abc_Lit2Var(pRepr->
Value) )
1511 Gia_ObjSetRepr( pNew, Abc_Lit2Var(pObj->
Value), Abc_Lit2Var(pRepr->
Value) );
1515 if ( Gia_ManHasChoices(
p) )
1521 if ( !~pObj->
Value )
1523 pSibl = Gia_ObjSiblObj(
p, i );
1524 if ( pSibl == NULL )
1526 if ( !~pSibl->
Value )
1528 assert( !Gia_ObjIsBuf(pObj) );
1551 Vec_Int_t * vPis, * vPos, * vRis, * vRos;
1555 pNew->
pName = Abc_UtilStrsav(
p->pName );
1556 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
1557 Gia_ManConst0(
p)->Value = 0;
1558 vPis = Vec_IntAlloc( Gia_ManPiNum(
p) * nTimes );
1559 vPos = Vec_IntAlloc( Gia_ManPoNum(
p) * nTimes );
1560 vRis = Vec_IntAlloc( Gia_ManRegNum(
p) * nTimes );
1561 vRos = Vec_IntAlloc( Gia_ManRegNum(
p) * nTimes );
1562 for ( t = 0; t < nTimes; t++ )
1566 if ( Gia_ObjIsAnd(pObj) )
1567 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
1568 else if ( Gia_ObjIsCi(pObj) )
1570 pObj->
Value = Gia_ManAppendCi( pNew );
1571 if ( Gia_ObjIsPi(
p, pObj) )
1572 Vec_IntPush( vPis, Abc_Lit2Var(pObj->
Value) );
1574 Vec_IntPush( vRos, Abc_Lit2Var(pObj->
Value) );
1576 else if ( Gia_ObjIsCo(pObj) )
1578 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1579 if ( Gia_ObjIsPo(
p, pObj) )
1580 Vec_IntPush( vPos, Abc_Lit2Var(pObj->
Value) );
1582 Vec_IntPush( vRis, Abc_Lit2Var(pObj->
Value) );
1586 Vec_IntClear( pNew->
vCis );
1589 Gia_ObjSetCioId( Gia_ManObj(pNew, Entry), Vec_IntSize(pNew->
vCis) );
1590 Vec_IntPush( pNew->
vCis, Entry );
1594 Gia_ObjSetCioId( Gia_ManObj(pNew, Entry), Vec_IntSize(pNew->
vCis) );
1595 Vec_IntPush( pNew->
vCis, Entry );
1597 Vec_IntClear( pNew->
vCos );
1600 Gia_ObjSetCioId( Gia_ManObj(pNew, Entry), Vec_IntSize(pNew->
vCos) );
1601 Vec_IntPush( pNew->
vCos, Entry );
1605 Gia_ObjSetCioId( Gia_ManObj(pNew, Entry), Vec_IntSize(pNew->
vCos) );
1606 Vec_IntPush( pNew->
vCos, Entry );
1608 Vec_IntFree( vPis );
1609 Vec_IntFree( vPos );
1610 Vec_IntFree( vRis );
1611 Vec_IntFree( vRos );
1629 Vec_Int_t * vTemp = Vec_IntAlloc( 100 );
1632 int i, iLit0, iLit1;
1633 pNew =
Gia_ManStart( Gia_ManObjNum(
p) + 3 * Vec_IntSize(vPairs) );
1634 pNew->
pName = Abc_UtilStrsav(
"miter" );
1637 Gia_ManConst0(
p)->Value = 0;
1639 pObj->
Value = Gia_ManAppendCi( pNew );
1644 int Lit0 = Abc_LitNotCond( Gia_ManObj(
p, Abc_Lit2Var(iLit0))->Value, Abc_LitIsCompl(iLit0) );
1645 int Lit1 = Abc_LitNotCond( Gia_ManObj(
p, Abc_Lit2Var(iLit1))->Value, Abc_LitIsCompl(iLit1) );
1649 Gia_ManAppendCo( pNew, iLit0 );
1650 Vec_IntFree( vTemp );
1672 if (
p->pReprsOld && ~
p->pReprsOld[Gia_ObjId(
p, pObj)] )
1674 Gia_Obj_t * pRepr = Gia_ManObj(
p,
p->pReprsOld[Gia_ObjId(
p, pObj)] );
1676 return pObj->
Value = Abc_LitNotCond( pRepr->
Value, Gia_ObjPhaseReal(pRepr) ^ Gia_ObjPhaseReal(pObj) );
1678 if ( Gia_ObjIsCi(pObj) )
1679 return pObj->
Value = Gia_ManAppendCi(pNew);
1681 if ( Gia_ObjIsCo(pObj) )
1682 return pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1684 if ( Vec_IntSize(&pNew->
vHTable) )
1685 return pObj->
Value =
Gia_ManHashAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
1686 return pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
1707 pNew->
pName = Abc_UtilStrsav(
p->pName );
1708 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
1709 Gia_ManConst0(
p)->Value = 0;
1713 if ( ~pObj->
Value == 0 )
1714 pObj->
Value = Gia_ManAppendCi(pNew);
1715 assert( Gia_ManCiNum(pNew) == Gia_ManCiNum(
p) );
1719 pObjNew = Gia_ObjFromLit( pNew, pObj->
Value );
1720 assert( !Gia_IsComplement(pObjNew) );
1721 Vec_IntWriteEntry( pNew->
vCis, Gia_ObjCioId(pObj), Gia_ObjId(pNew, pObjNew) );
1722 Gia_ObjSetCioId( pObjNew, Gia_ObjCioId(pObj) );
1743 assert( Gia_ObjIsAnd(pObj) );
1746 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
1754 pNew->
pName = Abc_UtilStrsav(
p->pName );
1755 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
1757 Gia_ManConst0(
p)->Value = 0;
1759 pObj->
Value = Gia_ManAppendCi(pNew);
1763 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1775 assert( iPo >= 0 && iPo < Gia_ManPoNum(
p) );
1777 pNew->
pName = Abc_UtilStrsav(
p->pName );
1778 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
1780 Gia_ManConst0(
p)->Value = 0;
1782 pObj->
Value = Gia_ManAppendCi(pNew);
1784 if ( !Gia_ObjIsPo(
p, pObj) || i == iPo )
1787 if ( !Gia_ObjIsPo(
p, pObj) || i == iPo )
1788 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1810 assert( Gia_ObjIsAnd(pObj) );
1821 pNew->
pName = Abc_UtilStrsav(
p->pName );
1822 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
1824 Gia_ManConst0(
p)->Value = 0;
1826 pObj->
Value = Gia_ManAppendCi(pNew);
1831 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1856 assert( Gia_ObjIsAnd(pObj) );
1866 assert( iVar >= 0 && iVar < Gia_ManPiNum(
p) );
1867 assert( Value == 0 || Value == 1 );
1869 pNew->
pName = Abc_UtilStrsav(
p->pName );
1870 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
1872 Gia_ManConst0(
p)->Value = 0;
1874 pObj->
Value = Gia_ManAppendCi(pNew);
1875 Gia_ManPi(
p, iVar )->Value = Value;
1880 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
1893 assert( Gia_ManRegNum(pCof0) == 0 );
1894 assert( Gia_ManRegNum(pCof1) == 0 );
1895 assert( Gia_ManCoNum(pCof0) == 1 );
1896 assert( Gia_ManCoNum(pCof1) == 1 );
1897 assert( Gia_ManCiNum(pCof1) == Gia_ManCiNum(pCof0) );
1898 assert( iVar >= 0 && iVar < Gia_ManCiNum(pCof1) );
1899 pNew =
Gia_ManStart( Gia_ManObjNum(pCof1) + Gia_ManObjNum(pCof0) );
1900 pNew->
pName = Abc_UtilStrsav( pCof1->
pName );
1901 pNew->
pSpec = Abc_UtilStrsav( pCof1->
pSpec );
1903 for ( n = 0; n < 2; n++ )
1906 Gia_ManConst0(pGia[n])->Value = 0;
1908 pObj->
Value = n ? Gia_ManCi(pGia[0], i)->Value : Gia_ManAppendCi(pNew);
1914 int Ctrl = Gia_ManCi(pGia[0], iVar)->Value;
1915 int Lit1 = Gia_ObjFanin0Copy(Gia_ManCo(pGia[1], i));
1916 int Lit0 = Gia_ObjFanin0Copy(pObj);
1917 Gia_ManAppendCo( pNew,
Gia_ManHashMux( pNew, Ctrl, Lit1, Lit0 ) );
1939 int i, iObjValue = -1;
1940 assert( Gia_ManRegNum(
p) == 0 );
1941 assert( iObj > 0 && iObj < Gia_ManObjNum(
p) );
1942 assert( Gia_ObjIsCand(Gia_ManObj(
p, iObj)) );
1943 assert( Value == 0 || Value == 1 );
1945 pNew->
pName = Abc_UtilStrsav(
p->pName );
1946 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
1947 Gia_ManConst0(
p)->Value = 0;
1951 if ( Gia_ObjIsCi(pObj) )
1952 pObj->
Value = Gia_ManAppendCi( pNew );
1953 else if ( Gia_ObjIsAnd(pObj) )
1955 else if ( Gia_ObjIsCo(pObj) )
1956 pObj->
Value = Gia_ManAppendCo( pNew,
Gia_ManHashAnd(pNew, Gia_ObjFanin0Copy(pObj), iObjValue) );
1958 iObjValue = Abc_LitNotCond(pObj->
Value, !Value), pObj->
Value = Value;
1980 assert( Gia_ManCiNum(
p) % nBlock == 0 );
1981 assert( Gia_ManCoNum(
p) % nBlock == 0 );
1983 pNew->
pName = Abc_UtilStrsav(
p->pName );
1984 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
1986 Gia_ManConst0(
p)->Value = 0;
1988 pObj->
Value = (i % nBlock == 0) ? Gia_ManAppendCi(pNew) : 0;
1993 if ( i % nBlock == 0 )
1994 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
2017 assert( iVar >= 0 && iVar < Gia_ManPiNum(
p) );
2018 assert( Gia_ManPoNum(
p) == 1 );
2019 assert( Gia_ManRegNum(
p) == 0 );
2023 pNew->
pName = Abc_UtilStrsav(
p->pName );
2024 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
2027 Gia_ManConst0(
p)->Value = 0;
2029 pObj->
Value = Gia_ManAppendCi(pNew);
2030 Gia_ManPi(
p, iVar )->Value = Abc_Var2Lit( 0, 0 );
2034 pObj->
Value = Gia_ObjFanin0Copy(pObj);
2036 Gia_ManPi(
p, iVar )->Value = Abc_Var2Lit( 0, 1 );
2064 assert( iVar >= 0 && iVar < Gia_ManPiNum(
p) );
2065 assert( Gia_ManRegNum(
p) == 0 );
2069 pNew->
pName = Abc_UtilStrsav(
p->pName );
2070 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
2073 Gia_ManConst0(
p)->Value = 0;
2075 pObj->
Value = Gia_ManAppendCi(pNew);
2076 Gia_ManPi(
p, iVar )->Value = Abc_Var2Lit( 0, 0 );
2080 pObj->
Value = Gia_ObjFanin0Copy(pObj);
2082 Gia_ManPi(
p, iVar )->Value = Abc_Var2Lit( 0, 1 );
2091 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
2115 assert( iVar >= 0 && iVar < Gia_ManPiNum(
p) );
2117 pNew->
pName = Abc_UtilStrsav(
p->pName );
2118 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
2121 Gia_ManConst0(
p)->Value = 0;
2123 pObj->
Value = Gia_ManAppendCi(pNew);
2125 Gia_ManPi(
p, iVar )->Value = 0;
2129 pObj->
Value = Gia_ObjFanin0Copy(pObj);
2131 Gia_ManPi(
p, iVar )->Value = 1;
2165 pNew->
pName = Abc_UtilStrsav(
p->pName );
2166 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
2167 Gia_ManConst0(
p)->Value = 0;
2169 pObj->
Value = Gia_ManAppendCi(pNew);
2193 assert( Gia_ObjIsCo(pRoot) );
2196 pNew->
pName = Abc_UtilStrsav(
p->pName );
2197 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
2198 Gia_ManConst0(
p)->Value = 0;
2200 pObj->
Value = Gia_ManAppendCi(pNew);
2202 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pRoot) );
2220 int iLit0, iLit1, iObj = Gia_ObjId(
p, pObj );
2221 int iLit = Gia_ObjCopyArray(
p, iObj );
2224 assert( Gia_ObjIsAnd(pObj) );
2227 iLit0 = Gia_ObjCopyArray(
p, Gia_ObjFaninId0(pObj, iObj) );
2228 iLit1 = Gia_ObjCopyArray(
p, Gia_ObjFaninId1(pObj, iObj) );
2229 iLit0 = Abc_LitNotCond( iLit0, Gia_ObjFaninC0(pObj) );
2230 iLit1 = Abc_LitNotCond( iLit1, Gia_ObjFaninC1(pObj) );
2231 iLit = Gia_ManAppendAnd( pNew, iLit0, iLit1 );
2232 Gia_ObjSetCopyArray(
p, iObj, iLit );
2233 Vec_IntPush( vObjs, iObj );
2238 Gia_Obj_t * pObj, * pRoot = Gia_ManObj(
p, Abc_Lit2Var(iLit) );
2239 Vec_Int_t * vObjs = Vec_IntAlloc( 1000 );
2241 if ( Vec_IntSize(&
p->vCopies) < Gia_ManObjNum(
p) )
2242 Vec_IntFillExtra( &
p->vCopies, Gia_ManObjNum(
p), -1 );
2244 pNew->
pName = Abc_UtilStrsav(
p->pName );
2245 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
2247 Gia_ObjSetCopyArray(
p, Gia_ObjId(
p, pObj), Gia_ManAppendCi(pNew) );
2249 iLit0 = Gia_ObjCopyArray(
p, Abc_Lit2Var(iLit) );
2250 iLit0 = Abc_LitNotCond( iLit0, Abc_LitIsCompl(iLit) );
2251 Gia_ManAppendCo( pNew, iLit0 );
2253 Gia_ObjSetCopyArray(
p, Gia_ObjId(
p, pObj), -1 );
2255 Gia_ObjSetCopyArray(
p, Gia_ObjId(
p, pObj), -1 );
2256 Vec_IntFree( vObjs );
2264 assert( Gia_ObjIsAnd(pObj) );
2273 assert( Gia_ManCiNum(pNew) == Vec_IntSize(vCiIds) );
2275 Gia_ManConst0(pNew)->Value = 0;
2277 pObj->
Value = Gia_Obj2Lit(
p, Gia_ManCi(
p, Vec_IntEntry(vCiIds, i)) );
2278 pRoot = Gia_ManCo(pNew, 0);
2280 return Gia_ObjFanin0Copy(pRoot);
2285 assert( Gia_ManCiNum(pNew) == Vec_IntSize(vObjs) );
2287 Gia_ManConst0(pNew)->Value = 0;
2289 pObj->
Value = Abc_Var2Lit( Vec_IntEntry(vObjs, i), 0 );
2290 pRoot = Gia_ManCo(pNew, 0);
2292 return Gia_ObjFanin0Copy(pRoot);
2311 if ( Gia_ObjIsCi(pObj) )
2313 pObj->
Value = Gia_ManAppendCi(pNew);
2316 assert( Gia_ObjIsAnd(pObj) );
2319 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
2324 assert( Gia_ObjIsAnd(pRoot) );
2327 pNew->
pName = Abc_UtilStrsav(
p->pName );
2328 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
2329 Gia_ManConst0(
p)->Value = 0;
2331 Gia_ManAppendCo( pNew, pRoot->
Value );
2350 int i, iLit, iLitRes;
2353 pNew->
pName = Abc_UtilStrsav(
p->pName );
2354 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
2355 Gia_ManConst0(
p)->Value = 0;
2357 pObj->
Value = Gia_ManAppendCi(pNew);
2361 Gia_ManAppendCo( pNew, Abc_LitNotCond( iLitRes, Abc_LitIsCompl(iLit)) );
2384 assert( (Gia_ManPoNum(
p) & 1) == 0 );
2388 assert( Gia_ManPiNum(pNonDual) > 0 );
2389 assert( 2 * Gia_ManPoNum(pNonDual) == Gia_ManPoNum(
p) );
2391 vNonZero = Vec_IntAlloc( 100 );
2393 if ( !Gia_ObjIsConst0(Gia_ObjFanin0(pObj)) )
2394 Vec_IntPush( vNonZero, i );
2413 assert( Gia_ObjIsCo(pObj) );
2415 return Gia_ObjIsConst0(Gia_ObjFanin0(pObj));
2416 assert( Value == 0 || Value == 1 );
2417 return Gia_ObjIsConst0(Gia_ObjFanin0(pObj)) && Value == Gia_ObjFaninC0(pObj);
2438 if ( fDualOut && fTrimCos )
2442 pNew->
pName = Abc_UtilStrsav(
p->pName );
2443 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
2447 if ( !fTrimCis || Gia_ObjRefNum(
p, pObj) )
2449 if ( i == Gia_ManPiNum(
p) )
2450 Gia_ManAppendCi(pNew);
2453 Gia_ManConst0(
p)->Value = 0;
2455 if ( !fTrimCis || Gia_ObjRefNum(
p, pObj) || Gia_ObjIsRo(
p, pObj) )
2456 pObj->
Value = Gia_ManAppendCi(pNew);
2458 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
2459 if ( fDualOut && fTrimCos )
2463 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(Gia_ManPo(
p, 2*Entry+0)) );
2464 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(Gia_ManPo(
p, 2*Entry+1)) );
2466 if ( Gia_ManPoNum(pNew) == 0 )
2470 Gia_ManAppendCo( pNew, 0 );
2471 Gia_ManAppendCo( pNew, 0 );
2474 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
2489 if ( i == Gia_ManPoNum(
p) )
2490 Gia_ManAppendCo( pNew, 0 );
2493 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
2496 Vec_IntFreeP( &vNonZero );
2519 pNew->
pName = Abc_UtilStrsav(
p->pName );
2520 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
2525 Gia_ObjRefFanin0Dec(
p, pObj );
2528 if ( Gia_ObjRefNum(
p, pObj) )
2530 if ( i == Gia_ManPiNum(
p) )
2531 Gia_ManAppendCi(pNew);
2534 Gia_ManConst0(
p)->Value = 0;
2536 if ( Gia_ObjRefNum(
p, pObj) || Gia_ObjIsRo(
p, pObj) )
2537 pObj->
Value = Gia_ManAppendCi(pNew);
2539 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
2542 if ( !Gia_ObjIsConst0(Gia_ObjFanin0(pObj)) && !Gia_ObjIsPi(
p, Gia_ObjFanin0(pObj)) )
2544 if ( i == Gia_ManPoNum(
p) )
2545 Gia_ManAppendCo( pNew, 0 );
2547 if ( (!Gia_ObjIsConst0(Gia_ObjFanin0(pObj)) && !Gia_ObjIsPi(
p, Gia_ObjFanin0(pObj))) || Gia_ObjIsRi(
p, pObj) )
2548 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
2555 Vec_Int_t * vMap = Vec_IntStartFull( Gia_ManObjNum(
p) );
2560 pNew->
pName = Abc_UtilStrsav(
p->pName );
2561 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
2563 Gia_ManConst0(
p)->Value = 0;
2565 pObj->
Value = Gia_ManAppendCi(pNew);
2567 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
2570 Vec_IntWriteEntry( vMap, Gia_ObjFaninId0p(
p, pObj), i );
2572 if ( Vec_IntEntry(vMap, Gia_ObjFaninId0p(
p, pObj)) == i )
2573 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
2574 Vec_IntFree( vMap );
2595 assert( Gia_ManPoNum(
p) == Gia_ManPiNum(p2) );
2596 assert( Gia_ManRegNum(
p) == 0 );
2597 assert( Gia_ManRegNum(p2) == 0 );
2599 pNew->
pName = Abc_UtilStrsav(
p->pName );
2600 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
2603 Gia_ManConst0(
p)->Value = 0;
2605 pObj->
Value = Gia_ManAppendCi(pNew);
2609 Gia_ManConst0(p2)->Value = 0;
2611 Gia_ManPi(p2, i)->Value = Gia_ObjFanin0Copy(pObj);
2615 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
2640 assert( Gia_ManRegNum(p2) == 0 );
2644 assert( Gia_ManPiNum(p2) == Gia_ManRegNum(p1) );
2647 pNew =
Gia_ManStart( Gia_ManObjNum(p1)+Gia_ManObjNum(p2) );
2648 pNew->
pName = Abc_UtilStrsav( p1->pName );
2649 pNew->
pSpec = Abc_UtilStrsav( p1->pSpec );
2652 Gia_ManConst0(p1)->Value = 0;
2654 pObj->
Value = Gia_ManAppendCi(pNew);
2658 Gia_ManConst0(p2)->Value = 0;
2660 pObj->
Value = Gia_ManRo(p1, i)->Value;
2665 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
2668 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
2692 if ( ~
p->pReprsOld[i] )
2693 printf(
"%d->%d ", i,
p->pReprs[i].iRepr );
2715 pNew->
pName = Abc_UtilStrsav(
p->pName );
2716 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
2717 Gia_ManConst0(
p)->Value = 0;
2720 pObj->
Value = Gia_ManAppendCi(pNew);
2722 pObj->
Value = Abc_LitNotCond( Gia_ManObj(
p, Abc_Lit2Var(pCi2Lit[i]))->Value, Abc_LitIsCompl(pCi2Lit[i]) );
2731 Gia_ManAppendCo( pNew, Abc_LitNotCond( iLitRes, Abc_LitIsCompl(iLit)) );
2739 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
2764 pNew->
pName = Abc_UtilStrsav(
p->pName );
2765 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
2766 Gia_ManConst0(
p)->Value = 0;
2767 for ( i = 0; i < Gia_ManPiNum(
p) - nPpis - nExtra; i++ )
2768 Gia_ManCi(
p, i)->Value = Gia_ManAppendCi( pNew );
2769 for ( i = Gia_ManPiNum(
p) - nExtra; i < Gia_ManPiNum(
p); i++ )
2770 Gia_ManCi(
p, i)->Value = Gia_ManAppendCi( pNew );
2771 for ( i = Gia_ManPiNum(
p) - nPpis - nExtra; i < Gia_ManPiNum(
p) - nExtra; i++ )
2772 Gia_ManCi(
p, i)->Value = Gia_ManAppendCi( pNew );
2773 for ( i = Gia_ManPiNum(
p); i < Gia_ManCiNum(
p); i++ )
2774 Gia_ManCi(
p, i)->Value = Gia_ManAppendCi( pNew );
2775 assert( Gia_ManCiNum(pNew) == Gia_ManCiNum(
p) );
2777 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
2779 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
2800 assert(
p->pReprsOld != NULL );
2803 pNew->
pName = Abc_UtilStrsav(
p->pName );
2804 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
2805 Gia_ManConst0(
p)->Value = 0;
2807 pObj->
Value = Gia_ManAppendCi(pNew);
2834 int i, iLit, iObjId, nCiLits, * pCi2Lit;
2837 vFront = Vec_IntAlloc( 1000 );
2838 vLeaves = Vec_IntAlloc( 1000 );
2841 if ( Gia_ObjIsConst0( Gia_ObjFanin0(pObj) ) )
2843 if ( Gia_ObjFaninC0(pObj) )
2844 Vec_IntPush( vLeaves, Gia_ObjFaninLit0p(
p, pObj) );
2846 Vec_IntPush( vFront, Gia_ObjFaninId0p(
p, pObj) );
2848 if ( Vec_IntSize(vFront) == 0 )
2851 printf(
"The AIG cannot be decomposed using AND-decomposition.\n" );
2852 Vec_IntFree( vFront );
2853 Vec_IntFree( vLeaves );
2859 if ( Gia_ObjIsCi(pObj) )
2861 Vec_IntPush( vLeaves, Abc_Var2Lit( Gia_ObjId(
p, pObj), 0 ) );
2864 assert( Gia_ObjIsAnd(pObj) );
2865 if ( Gia_ObjFaninC0(pObj) )
2866 Vec_IntPush( vLeaves, Gia_ObjFaninLit0p(
p, pObj) );
2868 Vec_IntPush( vFront, Gia_ObjFaninId0p(
p, pObj) );
2869 if ( Gia_ObjFaninC1(pObj) )
2870 Vec_IntPush( vLeaves, Gia_ObjFaninLit1p(
p, pObj) );
2872 Vec_IntPush( vFront, Gia_ObjFaninId1p(
p, pObj) );
2874 Vec_IntFree( vFront );
2881 iObjId = Abc_Lit2Var(iLit);
2882 pObj = Gia_ManObj(
p, iObjId);
2883 if ( Gia_ObjIsCi(pObj) )
2885 pCi2Lit[Gia_ObjCioId(pObj)] = !Abc_LitIsCompl(iLit);
2888 if ( pVar2Val[iObjId] != 0 && pVar2Val[iObjId] != 1 )
2889 pVar2Val[iObjId] = Abc_LitIsCompl(iLit);
2890 else if ( pVar2Val[iObjId] != Abc_LitIsCompl(iLit) )
2893 if ( i < Vec_IntSize(vLeaves) )
2895 printf(
"Problem is trivially UNSAT.\n" );
2898 Vec_IntFree( vLeaves );
2902 Vec_IntClear( vLeaves );
2904 if ( !Gia_ObjIsCi(pObj) && (pVar2Val[i] == 0 || pVar2Val[i] == 1) )
2905 Vec_IntPush( vLeaves, Abc_Var2Lit(i, pVar2Val[i]) );
2907 printf(
"Detected %6d AND leaves and %6d CI leaves.\n", Vec_IntSize(vLeaves), nCiLits );
2915 Vec_IntFree( vLeaves );
2933 int fContinue, iIter = 0;
2935 for ( fContinue = 1; fContinue; )
2938 if ( Gia_ManCoNum(pNew) == Gia_ManCoNum(pTemp) && Gia_ManAndNum(pNew) == Gia_ManAndNum(pTemp) )
2943 printf(
"Iter %2d : ", ++iIter );
2966 assert( Gia_ObjIsAnd(pObj) );
2969 return pObj->
Value =
Gia_ManHashAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
2990 if ( Gia_ManPiNum(p0) != Gia_ManPiNum(p1) )
2992 printf(
"Gia_ManMiter(): Designs have different number of PIs.\n" );
2995 if ( Gia_ManPoNum(p0) != Gia_ManPoNum(p1) )
2997 printf(
"Gia_ManMiter(): Designs have different number of POs.\n" );
3000 if ( Gia_ManRegNum(p0) == 0 || Gia_ManRegNum(p1) == 0 )
3002 printf(
"Gia_ManMiter(): At least one of the designs has no registers.\n" );
3008 if ( Gia_ManCiNum(p0) != Gia_ManCiNum(p1) )
3010 printf(
"Gia_ManMiter(): Designs have different number of CIs.\n" );
3013 if ( Gia_ManCoNum(p0) != Gia_ManCoNum(p1) )
3015 printf(
"Gia_ManMiter(): Designs have different number of COs.\n" );
3020 pNew =
Gia_ManStart( Gia_ManObjNum(p0) + Gia_ManObjNum(p1) );
3021 pNew->
pName = Abc_UtilStrsav(
"miter" );
3025 Gia_ManConst0(p0)->Value = 0;
3026 Gia_ManConst0(p1)->Value = 0;
3033 pObj->
Value = Gia_ManAppendCi( pNew );
3035 if ( i < Gia_ManPiNum(p1) - nInsDup )
3036 pObj->
Value = Gia_ObjToLit( pNew, Gia_ManPi(pNew, i) );
3038 pObj->
Value = Gia_ManAppendCi( pNew );
3041 pObj->
Value = Gia_ManAppendCi( pNew );
3043 pObj->
Value = Gia_ManAppendCi( pNew );
3051 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
3052 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(Gia_ManPo(p1,i)) );
3056 iLit =
Gia_ManHashAnd( pNew, Gia_ObjFanin0Copy(pObj), Abc_LitNot(Gia_ObjFanin0Copy(Gia_ManPo(p1,i))) );
3057 Gia_ManAppendCo( pNew, iLit );
3061 iLit =
Gia_ManHashXor( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin0Copy(Gia_ManPo(p1,i)) );
3062 Gia_ManAppendCo( pNew, iLit );
3069 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
3074 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
3082 pObj->
Value = Gia_ManAppendCi( pNew );
3084 if ( i < Gia_ManCiNum(p1) - nInsDup )
3085 pObj->
Value = Gia_ObjToLit( pNew, Gia_ManCi(pNew, i) );
3087 pObj->
Value = Gia_ManAppendCi( pNew );
3095 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
3096 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(Gia_ManCo(p1,i)) );
3100 iLit =
Gia_ManHashAnd( pNew, Gia_ObjFanin0Copy(pObj), Abc_LitNot(Gia_ObjFanin0Copy(Gia_ManPo(p1,i))) );
3101 Gia_ManAppendCo( pNew, iLit );
3105 iLit =
Gia_ManHashXor( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin0Copy(Gia_ManCo(p1,i)) );
3106 Gia_ManAppendCo( pNew, iLit );
3135 int nInputs1 = Gia_ManCiNum(pTop) - Gia_ManCoNum(pBot);
3136 int nInputs2 = Gia_ManCiNum(pBot) - Gia_ManCoNum(pTop);
3137 if ( nInputs1 == nInputs2 )
3138 printf(
"Assuming that the circuits have %d shared inputs, ordered first.\n", nInputs1 );
3141 printf(
"The number of inputs and outputs does not match.\n" );
3144 pNew =
Gia_ManStart( Gia_ManObjNum(pBot) + Gia_ManObjNum(pTop) );
3145 pNew->
pName = Abc_UtilStrsav(
"miter" );
3148 Gia_ManConst0(pBot)->Value = 0;
3149 Gia_ManConst0(pTop)->Value = 0;
3152 pObj->
Value = Gia_ManAppendCi( pNew );
3157 if ( Gia_ObjIsBuf(pObj) )
3158 pObj->
Value = Gia_ManAppendBuf( pNew, Gia_ObjFanin0Copy(pObj) );
3159 else if ( Gia_ObjIsAnd(pObj) )
3160 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
3163 pObj->
Value = Gia_ObjFanin0Copy(pObj);
3166 pObj->
Value = Gia_ManCi(pBot, i)->Value;
3168 pObj->
Value = Gia_ManCo(pBot, i-nInputs1)->Value;
3173 if ( Gia_ObjIsBuf(pObj) )
3174 pObj->
Value = Gia_ManAppendBuf( pNew, Gia_ObjFanin0Copy(pObj) );
3175 else if ( Gia_ObjIsAnd(pObj) )
3176 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
3182 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
3183 Gia_ManAppendCo( pNew, Gia_ManCi(pBot, i+nInputs1)->Value );
3187 iLit =
Gia_ManHashXor( pNew, Gia_ObjFanin0Copy(pObj), Gia_ManCi(pBot, i+nInputs1)->Value );
3188 Gia_ManAppendCo( pNew, iLit );
3197 pNew->
vBarBufs = Vec_IntAlloc( 1000 );
3221 assert( Gia_ManRegNum(
p) == 0 );
3223 pNew->
pName = Abc_UtilStrsav(
p->pName );
3224 Gia_ManConst0(
p)->Value = 0;
3227 pObj->
Value = Gia_ManAppendCi( pNew );
3234 iResult =
Gia_ManHashOr( pNew, iResult, Gia_ObjFanin0Copy(pObj) );
3240 iResult =
Gia_ManHashAnd( pNew, iResult, Gia_ObjFanin0Copy(pObj) );
3242 iResult = Abc_LitNotCond( iResult, (
int)(fCompl > 0) );
3245 for ( i = 0; i < nOuts; i++ )
3246 Gia_ManAppendCo( pNew, iResult );
3269 assert( Gia_ManRegNum(
p) == 0 );
3270 assert( Gia_ManRegNum(pCare) == 0 );
3271 assert( Gia_ManPiNum(
p) == Gia_ManPiNum(pCare) );
3273 pNew->
pName = Abc_UtilStrsav(
p->pName );
3274 Gia_ManConst0(
p)->Value = 0;
3275 Gia_ManConst0(pCare)->Value = 0;
3278 pObj->
Value = Gia_ManPi(pCare, i)->Value = Gia_ManAppendCi( pNew );
3283 if ( Gia_ManPoNum(pCare) == 1 ) {
3285 Gia_ManAppendCo( pNew,
Gia_ManHashAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(Gia_ManPo(pCare, 0)) ) );
3287 else if ( Gia_ManPoNum(
p) == Gia_ManPoNum(pCare) ) {
3289 Gia_ManAppendCo( pNew,
Gia_ManHashAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(Gia_ManPo(pCare, i)) ) );
3311 char * pName1, * pName2, pBuffer[1000];
int i;
3312 Vec_Ptr_t * pNew = Vec_PtrAlloc( Vec_PtrSize(
p) - nOuts/2 );
3313 assert( nOuts % 2 == 0 );
3314 assert( nOuts <= Vec_PtrSize(
p) );
3319 sprintf( pBuffer,
"%s_xor_%s", pName1, pName2 );
3320 Vec_PtrPush( pNew, Abc_UtilStrsav(pBuffer) );
3323 Vec_PtrPush( pNew, Abc_UtilStrsav(pName1) );
3344 pNew->
pName = Abc_UtilStrsav(
p->pName );
3345 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
3346 Gia_ManConst0(
p)->Value = 0;
3349 pObj->
Value = Gia_ManAppendCi( pNew );
3357 iLit =
Gia_ManHashAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin0Copy(pObj2) );
3358 Gia_ManAppendCo( pNew, iLit );
3381 assert( (Gia_ManPoNum(
p) & 1) == 0 );
3383 pNew->
pName = Abc_UtilStrsav(
p->pName );
3384 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
3385 Gia_ManConst0(
p)->Value = 0;
3388 pObj->
Value = Gia_ManAppendCi( pNew );
3393 pObj2 = Gia_ManPo(
p, ++i );
3394 iLit =
Gia_ManHashXor( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin0Copy(pObj2) );
3395 Gia_ManAppendCo( pNew, iLit );
3398 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
3404 pNew->
vNamesIn = Vec_PtrDupStr(
p->vNamesIn);
3413 int i, iLit, nPart = Gia_ManPoNum(
p)/2;
3414 assert( (Gia_ManPoNum(
p) & 1) == 0 );
3416 pNew->
pName = Abc_UtilStrsav(
p->pName );
3417 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
3418 Gia_ManConst0(
p)->Value = 0;
3421 pObj->
Value = Gia_ManAppendCi( pNew );
3428 pObj2 = Gia_ManPo(
p, nPart + i );
3429 iLit =
Gia_ManHashXor( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin0Copy(pObj2) );
3430 Gia_ManAppendCo( pNew, iLit );
3433 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
3446 pNew->
pName = Abc_UtilStrsav(
p->pName );
3447 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
3448 Gia_ManConst0(
p)->Value = 0;
3451 pObj->
Value = Gia_ManAppendCi( pNew );
3456 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
3457 Gia_ManAppendCo( pNew, 0 );
3460 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
3469 int i, nPart = Gia_ManPoNum(
p)/2;
3470 assert( (Gia_ManPoNum(
p) & 1) == 0 );
3472 pNew->
pName = Abc_UtilStrsav(
p->pName );
3473 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
3474 Gia_ManConst0(
p)->Value = 0;
3477 pObj->
Value = Gia_ManAppendCi( pNew );
3484 pObj2 = Gia_ManPo(
p, nPart + i );
3485 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
3486 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj2) );
3489 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
3499 if ( Gia_ObjIsTravIdCurrent(
p, pObj) )
3501 Gia_ObjSetTravIdCurrent(
p, pObj);
3502 if ( !Gia_ObjIsAnd(pObj) )
3506 Vec_IntPush( vNodes, Gia_ObjId(
p, pObj) );
3511 Vec_Int_t * vNodes = Vec_IntAlloc( Gia_ManAndNum(
p) );
3514 if ( (i & 1) == iSide )
3525 assert( Gia_ManRegNum(
p) == 0 );
3526 assert( (Gia_ManPoNum(
p) & 1) == 0 );
3527 if ( Vec_IntSize(vNodes0) > Vec_IntSize(vNodes1) )
3532 assert( Vec_IntSize(vNodes0) <= Vec_IntSize(vNodes1) );
3534 pNew->
pName = Abc_UtilStrsav(
p->pName );
3535 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
3536 Gia_ManConst0(
p)->Value = 0;
3539 pObj->
Value = Gia_ManAppendCi( pNew );
3544 Vec_IntFree( vNodes0 );
3545 Vec_IntFree( vNodes1 );
3548 pObj2 = Gia_ManPo(
p, i^fSwap );
3549 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj2) );
3573 int CountPis = Gia_ManPiNum(
p), * pPiLits;
3574 int i, iResetFlop = -1, Count1 = 0;
3579 for ( i = 0; i < Gia_ManRegNum(
p); i++ )
3580 if ( pInit[i] ==
'x' || pInit[i] ==
'X' )
3581 pPiLits[i] = CountPis++;
3584 pNew->
pName = Abc_UtilStrsav(
p->pName );
3585 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
3587 Gia_ManConst0(
p)->Value = 0;
3590 pObj->
Value = Gia_ManAppendCi( pNew );
3592 for ( i = Gia_ManPiNum(
p); i < CountPis; i++ )
3593 Gia_ManAppendCi( pNew );
3595 for ( i = 0; i < nNewPis; i++ )
3596 Gia_ManAppendCi( pNew );
3599 pObj->
Value = Gia_ManAppendCi( pNew );
3601 if ( CountPis > Gia_ManPiNum(
p) )
3602 iResetFlop = Gia_ManAppendCi( pNew );
3607 if ( pInit[i] ==
'1' )
3608 pObj->
Value = Abc_LitNot(pObj->
Value), Count1++;
3609 else if ( pInit[i] ==
'x' || pInit[i] ==
'X' )
3612 pObj->
Value = Gia_ManAppendMux( pNew, iResetFlop, pObj->
Value, Gia_Obj2Lit(pNew, Gia_ManPi(pNew, pPiLits[i])) );
3614 else if ( pInit[i] !=
'0' )
3621 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
3624 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
3627 if ( pInit[i] ==
'1' )
3628 pObj->
Value = Gia_ManAppendCo( pNew, Abc_LitNot(Gia_ObjFanin0Copy(pObj)) );
3630 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
3632 if ( CountPis > Gia_ManPiNum(
p) )
3633 Gia_ManAppendCo( pNew, 1 );
3636 printf(
"Converted %d 1-valued FFs and %d DC-valued FFs.\n", Count1, CountPis-Gia_ManPiNum(
p) );
3653 Vec_Int_t * vCiValues, * vCoValues0, * vCoValues1;
3659 for ( i = 0; i < Gia_ManPiNum(pStart); i++ )
3660 assert( pInit[i] ==
'x' || pInit[i] ==
'X' );
3664 pInitNew =
ABC_ALLOC(
char, Gia_ManPiNum(pUndc)+1 );
3665 for ( i = 0; i < Gia_ManPiNum(pStart); i++ )
3666 pInitNew[i] = pInit[i];
3667 for ( i = k = Gia_ManPiNum(pStart); i < Gia_ManCiNum(pStart); i++ )
3668 if ( pInit[i] ==
'x' || pInit[i] ==
'X' )
3669 pInitNew[k++] = pInit[i];
3671 assert( k == Gia_ManPiNum(pUndc) );
3674 pNew->
pName = Abc_UtilStrsav( pUndc->
pName );
3675 pNew->
pSpec = Abc_UtilStrsav( pUndc->
pSpec );
3676 Gia_ManConst0(pUndc)->Value = 0;
3680 pObj->
Value = Gia_ManAppendCi( pNew );
3682 vCiValues = Vec_IntAlloc( Gia_ManPiNum(pUndc) );
3684 if ( pInitNew[i] ==
'x' )
3685 Vec_IntPush( vCiValues, Gia_Obj2Lit( pNew, Gia_ManPi(pNew, i) ) );
3686 else if ( pInitNew[i] ==
'X' )
3687 Vec_IntPush( vCiValues, Gia_ManAppendCi( pNew ) );
3691 pObj->
Value = Gia_ManAppendCi( pNew );
3695 vCoValues0 = Vec_IntAlloc( Gia_ManPoNum(pUndc) );
3697 Vec_IntPush( vCoValues0, Gia_ObjFanin0Copy(pObj) );
3700 pObj->
Value = Vec_IntEntry( vCiValues, i );
3702 pObj->
Value = Gia_ManAppendCi( pNew );
3706 vCoValues1 = Vec_IntAlloc( Gia_ManPoNum(pUndc) );
3708 Vec_IntPush( vCoValues1, Gia_ObjFanin0Copy(pObj) );
3711 pObj->
Value = Gia_ManAppendCo( pNew,
Gia_ManHashXor( pNew, Vec_IntEntry(vCoValues0, i), Vec_IntEntry(vCoValues1, i) ) );
3714 pObj->
Value = Gia_ManAppendCo( pNew, Vec_IntEntry(vCoValues0, Gia_ManPoNum(pUndc)+i) );
3716 pObj->
Value = Gia_ManAppendCo( pNew, Vec_IntEntry(vCoValues1, Gia_ManPoNum(pUndc)+i) );
3717 Vec_IntFree( vCoValues0 );
3718 Vec_IntFree( vCoValues1 );
3719 Vec_IntFree( vCiValues );
3746 if ( Gia_ObjIsCo(pObj) )
3747 return pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
3749 return pObj->
Value =
Gia_ManHashAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
3766 int i, k, iNode, nNodes;
3768 assert( Vec_PtrSize(vGias) > 0 );
3769 pGia0 = (
Gia_Man_t *)Vec_PtrEntry( vGias, 0 );
3772 assert( Gia_ManCiNum(pGia) == Gia_ManCiNum(pGia0) );
3773 assert( Gia_ManCoNum(pGia) == Gia_ManCoNum(pGia0) );
3774 assert( Gia_ManRegNum(pGia) == Gia_ManRegNum(pGia0) );
3776 Gia_ManConst0(pGia)->Value = 0;
3779 pNew =
Gia_ManStart( Vec_PtrSize(vGias) * Gia_ManObjNum(pGia0) );
3780 pNew->
pName = Abc_UtilStrsav( pGia0->
pName );
3781 pNew->
pSpec = Abc_UtilStrsav( pGia0->
pSpec );
3783 for ( k = 0; k < Gia_ManCiNum(pGia0); k++ )
3785 iNode = Gia_ManAppendCi(pNew);
3787 Gia_ManCi( pGia, k )->Value = iNode;
3791 for ( k = 0; k < Gia_ManCoNum(pGia0); k++ )
3822 pNew->
pName = Abc_UtilStrsav(
p->pName );
3823 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
3824 Gia_ManConst0(
p)->Value = 0;
3826 pObj->
Value = Gia_ManAppendCi(pNew);
3828 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
3830 if ( Vec_IntEntry(vPoTypes, i) == 0 )
3831 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
3833 if ( Vec_IntEntry(vPoTypes, i) == 1 )
3834 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) ^ 1 ), nConstr++;
3836 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
3859 return Gia_ObjCioId(pObj1) - Gia_ObjCioId(pObj2);
3863 if ( Gia_ObjIsTravIdCurrent(
p, pObj) )
3865 Gia_ObjSetTravIdCurrent(
p, pObj);
3866 if ( Gia_ObjIsAnd(pObj) )
3870 Vec_PtrPush( vNodes, pObj );
3872 else if ( Gia_ObjIsCo(pObj) )
3874 else if ( Gia_ObjIsRo(
p, pObj) )
3875 Vec_PtrPush( vRoots, Gia_ObjRoToRi(
p, pObj) );
3876 else if ( Gia_ObjIsPi(
p, pObj) )
3877 Vec_PtrPush( vLeaves, pObj );
3883 Vec_Ptr_t * vLeaves, * vNodes, * vRoots;
3888 vLeaves = Vec_PtrAlloc( 100 );
3889 vNodes = Vec_PtrAlloc( 100 );
3890 vRoots = Vec_PtrAlloc( 100 );
3891 for ( i = 0; i < nPos; i++ )
3892 Vec_PtrPush( vRoots, Gia_ManPo(
p, pPos[i]) );
3896 Gia_ObjSetTravIdCurrent(
p, Gia_ManConst0(
p) );
3903 pNew =
Gia_ManStart( (fTrimPis ? Vec_PtrSize(vLeaves) : Gia_ManCiNum(
p)) + Vec_PtrSize(vNodes) + Vec_PtrSize(vRoots) + 1 );
3904 pNew->
pName = Abc_UtilStrsav(
p->pName );
3905 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
3907 Gia_ManConst0(
p)->Value = 0;
3914 pObj->
Value = Gia_ManAppendCi( pNew );
3919 pObj->
Value = Gia_ManAppendCi( pNew );
3923 Gia_ObjRiToRo(
p, pObj)->Value = Gia_ManAppendCi( pNew );
3926 if ( Gia_ObjIsXor(pObj) )
3927 pObj->
Value = Gia_ManAppendXor( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
3929 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
3932 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
3935 Vec_PtrFree( vLeaves );
3936 Vec_PtrFree( vNodes );
3937 Vec_PtrFree( vRoots );
3944 Vec_Ptr_t * vLeaves, * vNodes, * vRoots;
3949 vLeaves = Vec_PtrAlloc( 100 );
3950 vNodes = Vec_PtrAlloc( 100 );
3951 vRoots = Vec_PtrAlloc( 100 );
3952 for ( i = 0; i < nAnds; i++ )
3954 Vec_PtrPush( vRoots, Gia_ManObj(
p, pAnds[i]) );
3958 Gia_ObjSetTravIdCurrent(
p, Gia_ManConst0(
p) );
3965 pNew =
Gia_ManStart( Vec_PtrSize(vLeaves) + Vec_PtrSize(vNodes) + Vec_PtrSize(vRoots) + 1);
3966 pNew->
pName = Abc_UtilStrsav(
p->pName );
3967 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
3969 Gia_ManConst0(
p)->Value = 0;
3974 pObj->
Value = Gia_ManAppendCi( pNew );
3979 pObj->
Value = Gia_ManAppendCi( pNew );
3986 if ( Gia_ObjIsMux(
p, pObj) )
3987 pObj->
Value = Gia_ManAppendMux( pNew, Gia_ObjFanin2Copy(
p, pObj), Gia_ObjFanin1Copy(pObj), Gia_ObjFanin0Copy(pObj) );
3988 else if ( Gia_ObjIsXor(pObj) )
3989 pObj->
Value = Gia_ManAppendXor( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
3991 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
3995 Gia_ManAppendCo( pNew, pObj->
Value );
3999 Vec_PtrFree( vLeaves );
4000 Vec_PtrFree( vNodes );
4001 Vec_PtrFree( vRoots );
4010 if ( !Gia_ObjIsAnd(pObj) || Gia_ObjLevel(
p, pObj) < Level )
4012 pObj->
Value = Gia_ManAppendCi( pNew );
4018 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
4026 pNew->
pName = Abc_UtilStrsav(
p->pName );
4027 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
4030 Gia_ManConst0(
p)->Value = 0;
4031 for ( i = 0; i < nAnds; i++ )
4033 for ( i = 0; i < nAnds; i++ )
4034 Gia_ManAppendCo( pNew, Gia_ManObj(
p, pAnds[i])->Value );
4043 if ( !Gia_ObjIsAnd(pObj) || Level <= 0 )
4045 pObj->
Value = Gia_ManAppendCi( pNew );
4051 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
4059 pNew->
pName = Abc_UtilStrsav(
p->pName );
4060 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
4062 Gia_ManConst0(
p)->Value = 0;
4063 for ( i = 0; i < nAnds; i++ )
4065 for ( i = 0; i < nAnds; i++ )
4066 Gia_ManAppendCo( pNew, Gia_ManObj(
p, pAnds[i])->Value );
4085 int i, b, Shift, iGiaLit, nLogVars = Abc_Base2Log( nVars );
4086 int * pTemp =
ABC_CALLOC(
int, (1 << nLogVars) );
4088 p->pName = Abc_UtilStrsav(
"onehot" );
4089 for ( i = 0; i < nSkips; i++ )
4090 Gia_ManAppendCi(
p );
4091 for ( i = 0; i < nVars; i++ )
4092 pTemp[i] = Gia_ManAppendCi(
p );
4094 for ( b = 0; b < nLogVars; b++ )
4095 for ( i = 0, Shift = (1<<b); i < (1 << nLogVars); i += 2*Shift )
4099 Gia_ManAppendCo(
p, iGiaLit );
4103 Gia_ManAppendCo(
p, Abc_LitNot(pTemp[0]) );
4105 assert( Gia_ManObjNum(
p) <= nSkips + 4 * nVars + 1 );
4111 if ( Gia_ManRegNum(pNew) == 0 )
4113 Abc_Print( 0,
"Appending 1-hotness constraints to the PIs.\n" );
4117 pOneHot =
Gia_ManOneHot( Gia_ManPiNum(pNew), Gia_ManRegNum(pNew) );
4119 pNew->
nConstrs += Gia_ManPoNum(pOneHot);
4140 int * pCounts =
ABC_CALLOC(
int, nLevels + 1 );
4141 int * pNodes =
ABC_ALLOC(
int, Gia_ManAndNum(
p) );
4143 pCounts[Gia_ObjLevel(
p, pObj)]++;
4144 for ( i = 1; i <= nLevels; i++ )
4145 pCounts[i] += pCounts[i-1];
4147 pNodes[pCounts[Gia_ObjLevel(
p, pObj)-1]++] = i;
4150 pNew->
pName = Abc_UtilStrsav(
p->pName );
4151 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
4152 Gia_ManConst0(
p)->Value = 0;
4154 pObj->
Value = Gia_ManAppendCi( pNew );
4155 for ( i = 0; i < Gia_ManAndNum(
p) && (pObj = Gia_ManObj(
p, pNodes[i])); i++ )
4156 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
4158 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
4183 pNew->
pName = Abc_UtilStrsav(
p->pName );
4184 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
4186 Gia_ManConst0(
p)->Value = 0;
4189 pObj->
Value = Gia_ManAppendCi( pNew );
4192 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
4195 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
4218 pNew->
pName = Abc_UtilStrsav(
p->pName );
4220 Gia_ManConst0(
p)->Value = 0;
4222 pObj->
Value = Gia_ManAppendCi( pNew );
4228 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
4233 Gia_ObjFanin0(pObj)->fMark1 = 1;
4234 Gia_ObjFanin1(pObj)->fMark1 = 1;
4237 Gia_ObjFanin0(pObj)->fMark1 = 1;
4241 Gia_ManAppendCo( pNew, pObj->
Value );
4261 if ( (Gia_IsComplement(pObj) || !Gia_ObjIsAnd(pObj)) && !fFirst )
4263 Vec_IntPushUnique( vSuper, Gia_ObjToLit(
p, pObj) );
4274 int i, iDriver, iLit, iLitBest = -1, LevelBest = -1;
4275 assert( Gia_ManPoNum(
p) == 1 );
4276 assert( Gia_ManRegNum(
p) == 0 );
4277 pObj = Gia_ManPo(
p, 0 );
4278 if ( Gia_ObjFaninC0(pObj) )
4280 printf(
"The miter's output is not AND-decomposable.\n" );
4283 if ( Gia_ObjFaninId0p(
p, pObj) == 0 )
4285 printf(
"The miter's output is a constant.\n" );
4288 vSuper = Vec_IntAlloc( 100 );
4290 assert( Vec_IntSize(vSuper) > 1 );
4294 if ( LevelBest < Gia_ObjLevelId(
p, Abc_Lit2Var(iLit)) )
4295 LevelBest = Gia_ObjLevelId(
p, Abc_Lit2Var(iLit)), iLitBest = iLit;
4296 assert( iLitBest != -1 );
4299 pNew->
pName = Abc_UtilStrsav(
p->pName );
4300 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
4301 Gia_ManConst0(
p)->Value = 0;
4305 if ( Gia_ObjIsAnd(pObj) )
4307 else if ( Gia_ObjIsCi(pObj) )
4308 pObj->
Value = Gia_ManAppendCi( pNew );
4314 if ( iLit == iLitBest )
4316 if ( iDriver == -1 )
4317 iDriver = Gia_ObjLitCopy(
p, iLit);
4322 Gia_ManAppendCo( pNew, Gia_ObjLitCopy(
p, iLitBest) );
4324 Gia_ManAppendCo( pNew, Abc_LitNot(iDriver) );
4329 Vec_IntFree( vSuper );
4347 int Diff = Gia_Regular(*pp1)->Value - Gia_Regular(*pp2)->Value;
4372 pNew->
pName = Abc_UtilStrsav(
p->pName );
4373 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
4374 Gia_ManConst0(
p)->Value = 0;
4376 pObj->
Value = Gia_ManAppendCi(pNew);
4378 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
4380 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
4382 Gia_ManAppendCo( pNew, pObj->
Value );
4384 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
4405 Vec_Wec_t * vSuppsNo = Vec_WecStart( Vec_IntSize(vNodes) );
4406 Vec_Wec_t * vSupps = Vec_WecStart( Gia_ManObjNum(
p) );
4408 Vec_IntPush( Vec_WecEntry(vSupps, Id), i );
4410 Vec_IntTwoMerge2( Vec_WecEntry(vSupps, Gia_ObjFaninId0(pObj, Id)),
4411 Vec_WecEntry(vSupps, Gia_ObjFaninId1(pObj, Id)),
4412 Vec_WecEntry(vSupps, Id) );
4414 Vec_IntAppend( Vec_WecEntry(vSuppsNo, i), Vec_WecEntry(vSupps, Gia_ObjId(
p, pObj)) );
4415 Vec_WecFree( vSupps );
4417 Abc_PrintTime( 1,
"Support computation", Abc_Clock() - clk );
4425 Vec_Wec_t * vSuppsCo = Vec_WecStart( Gia_ManCoNum(
p) );
4426 Vec_Wec_t * vSupps = Vec_WecStart( Gia_ManObjNum(
p) );
4428 Vec_IntPush( Vec_WecEntry(vSupps, Id), i );
4430 Vec_IntTwoMerge2( Vec_WecEntry(vSupps, Gia_ObjFaninId0(pObj, Id)),
4431 Vec_WecEntry(vSupps, Gia_ObjFaninId1(pObj, Id)),
4432 Vec_WecEntry(vSupps, Id) );
4434 Vec_IntAppend( Vec_WecEntry(vSuppsCo, i), Vec_WecEntry(vSupps, Gia_ObjFaninId0p(
p, pObj)) );
4435 Vec_WecFree( vSupps );
4437 Abc_PrintTime( 1,
"Support computation", Abc_Clock() - clk );
4447 vSuppOne = Vec_WecEntry( vSupps, i );
4459 vSuppOne = Vec_WecEntry( vSupps, i );
4460 if (
nSuppMax < Vec_IntSize(vSuppOne) )
4470 Vec_Int_t * vOrder = Vec_IntAlloc( Gia_ManCoNum(
p) );
4471 Vec_Wrd_t * vSortData = Vec_WrdAlloc( Gia_ManCoNum(
p) );
4474 Vec_WrdPush( vSortData, ((
word)i << 32) | Vec_IntSize(vSuppOne) );
4475 Abc_QuickSort3( Vec_WrdArray(vSortData), Vec_WrdSize(vSortData), 1 );
4477 Vec_IntPush( vOrder, (
int)(Entry >> 32) );
4478 Vec_WrdFree( vSortData );
4497 assert( Gia_ObjIsAnd(pObj) );
4500 return pObj->
Value =
Gia_ManHashAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
4504 if ( !~pObj->
Value )
4507 if ( Gia_ObjIsCi(pObj) )
4509 assert( Gia_ObjIsAnd(pObj) );
4519 assert( Gia_ManRegNum(
p) == 0 );
4521 vCoMapLit = Vec_IntAlloc( Gia_ManCoNum(
p) );
4523 pNew->
pName = Abc_UtilStrsav(
p->pName );
4524 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
4525 Gia_ManConst0(
p)->Value = 0;
4528 Gia_ManAppendCi(pNew);
4532 vSuppOne = Vec_WecEntry( vSupps, i );
4533 if ( Vec_IntSize(vSuppOne) == 0 )
4534 Vec_IntPush( vCoMapLit, Abc_Var2Lit(0, Gia_ObjFaninC0(pObj)) );
4535 else if ( Vec_IntSize(vSuppOne) == 1 )
4536 Vec_IntPush( vCoMapLit, Abc_Var2Lit(1, Gia_ObjFaninC0(pObj)) );
4540 Gia_ManCi(
p, iCi)->Value = Gia_Obj2Lit(pNew, Gia_ManCi(pNew, k) );
4542 assert( Gia_ObjFanin0Copy(pObj) < 2 * Gia_ManObjNum(pNew) );
4543 Vec_IntPush( vCoMapLit, Gia_ObjFanin0Copy(pObj) );
4548 assert( Vec_IntSize(vCoMapLit) == Gia_ManCoNum(
p) );
4549 if ( pvCoMap == NULL )
4552 Gia_ManAppendCo( pNew, iLit );
4556 Vec_Int_t * vCoMapRes = Vec_IntAlloc( Gia_ManCoNum(
p) );
4557 Vec_Int_t * vMap = Vec_IntStartFull( 2*Gia_ManObjNum(pNew) );
4560 if ( Vec_IntEntry(vMap, iLit) == -1 )
4562 Vec_IntWriteEntry( vMap, iLit, Gia_ManCoNum(pNew) );
4563 Gia_ManAppendCo( pNew, iLit );
4565 Vec_IntPush( vCoMapRes, Vec_IntEntry(vMap, iLit) );
4567 Vec_IntFree( vMap );
4568 *pvCoMap = vCoMapRes;
4570 Vec_IntFree( vCoMapLit );
4580 Vec_IntFree( vCoMap );
4581 Vec_WecFree( vSupps );
4582 *pvPosEquivs = NULL;
4589 assert( Gia_ObjIsCo(pObj) );
4590 if ( Vec_IntSize(vSupp) == 0 )
4591 return Abc_Var2Lit(0, Gia_ObjFaninC0(pObj));
4592 if ( Vec_IntSize(vSupp) == 1 )
4593 return Abc_Var2Lit(1, Gia_ObjFaninC0(pObj));
4595 Gia_ManCi(
p, iCi)->Value = Gia_Obj2Lit(pNew, Gia_ManCi(pNew, k) );
4597 iLit = Gia_ObjFanin0Copy(pObj);
4605 Vec_Wec_t * vPosEquivs = Vec_WecAlloc( 100 );
4606 Vec_Int_t * vSuppOne, * vMap = Vec_IntAlloc( 10000 );
4611 Vec_IntAddToEntry( vSizeCount, Vec_IntSize(vSuppOne), 1 );
4615 Gia_ManConst0(
p)->Value = 0;
4617 Gia_ManAppendCi(pNew);
4621 vSuppOne = Vec_WecEntry( vSupps, i );
4622 if ( Vec_IntEntry(vSizeCount, Vec_IntSize(vSuppOne)) == 1 )
4624 Vec_IntPush( Vec_WecPushLevel(vPosEquivs), i );
4628 Vec_IntFillExtra( vMap, iLit + 1, -1 );
4629 if ( Vec_IntEntry(vMap, iLit) == -1 )
4631 Vec_IntWriteEntry( vMap, iLit, Vec_WecSize(vPosEquivs) );
4632 Vec_IntPush( Vec_WecPushLevel(vPosEquivs), i );
4635 Vec_IntPush( Vec_WecEntry(vPosEquivs, Vec_IntEntry(vMap, iLit)), i );
4639 Vec_IntFree( vSizeCount );
4640 Vec_IntFree( vMap );
4648 Vec_Int_t * vFirsts = Vec_WecCollectFirsts( vPosEquivs );
4650 Vec_IntFree( vFirsts );
4651 Vec_WecFree( vSupps );
4655 printf(
"Nontrivial classes:\n" );
4656 Vec_WecPrint( vPosEquivs, 1 );
4659 *pvPosEquivs = Vec_WecConvertToVecPtr( vPosEquivs );
4660 Vec_WecFree( vPosEquivs );
4682 assert( Gia_ManPoNum(
p) == 1 );
4684 pObjPo = Gia_ManPo(
p, 0 );
4685 vSuper = Vec_IntAlloc( 100 );
4687 assert( Vec_IntSize(vSuper) > 1 );
4689 printf(
"The miter is %s-decomposable into %d parts.\n", Gia_ObjFaninC0(pObjPo) ?
"OR":
"AND", Vec_IntSize(vSuper) );
4693 Gia_ManObj(
p, Abc_Lit2Var(iLit))->Value = Gia_ObjLevelId(
p, Abc_Lit2Var(iLit));
4695 vSuperPtr = Vec_PtrAlloc( Vec_IntSize(vSuper) );
4697 Vec_PtrPush( vSuperPtr, Gia_Lit2Obj(
p, iLit) );
4701 pNew->
pName = Abc_UtilStrsav(
p->pName );
4702 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
4703 Gia_ManConst0(
p)->Value = 0;
4706 pObj->
Value = Gia_ManAppendCi( pNew );
4711 Gia_ManAppendCo( pNew, Gia_ObjLitCopy(
p, Gia_Obj2Lit(
p, pObj)) ^ Gia_ObjFaninC0(pObjPo) );
4713 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
4718 Vec_IntFree( vSuper );
4719 Vec_PtrFree( vSuperPtr );
4736 int i, iObj, * pPerm;
4737 Vec_Int_t * vSizes = Vec_IntAlloc( 100 );
4741 Vec_IntClear( vSizes );
4742 for ( i = 0; i < Vec_IntSize(vXors); i++ )
4743 Vec_IntPush( vSizes, Vec_IntEntry(vXors, pPerm[i]) );
4745 Vec_IntClear( vXors );
4746 Vec_IntAppend( vXors, vSizes );
4747 Vec_IntFree( vSizes );
4752 int i, k, iObj, iObjBest = -1;
4756 if ( Vec_IntEntry(vTakenOuts, i) )
4760 Count += !Vec_IntEntry(vTakenIns, iObj);
4761 if ( CountBest > Count )
4773 Vec_Int_t * vTakenIns = Vec_IntStart( Gia_ManCiNum(
p) );
4774 Vec_Int_t * vTakenOuts = Vec_IntStart( Vec_IntSize(vXors) );
4775 Vec_Int_t * vOrder = Vec_IntAlloc( Vec_IntSize(vXors) );
4778 for ( i = 0; i < Vec_IntSize(vXors); i++ )
4781 assert( Index >= 0 && Index < Vec_IntSize(vXors) );
4782 Vec_IntPush( vOrder, Vec_IntEntry(vXors, Index) );
4783 assert( !Vec_IntEntry( vTakenOuts, Index ) );
4784 Vec_IntWriteEntry( vTakenOuts, Index, 1 );
4786 Vec_IntWriteEntry( vTakenIns, iObj, 1 );
4788 Vec_WecFree( vSupps );
4789 Vec_IntFree( vTakenIns );
4790 Vec_IntFree( vTakenOuts );
4792 Vec_IntClear( vXors );
4793 Vec_IntAppend( vXors, vOrder );
4794 Vec_IntFree( vOrder );
4812 pObj = Gia_ManObj(
p, iObj );
4816 if ( !Gia_ObjIsAnd(pObj) )
4824 pObj = Gia_ManObj(
p, iObj );
4828 if ( !Gia_ObjIsAnd(pObj) )
4837 if ( Gia_ObjIsTravIdCurrentId(
p, iObj) )
4839 Gia_ObjSetTravIdCurrentId(
p, iObj);
4840 pObj = Gia_ManObj(
p, iObj );
4841 if ( !Gia_ObjIsAnd(pObj) )
4854 if ( Gia_ObjIsTravIdCurrentId(
p, iObj) )
4856 Gia_ObjSetTravIdCurrentId(
p, iObj);
4857 pObj = Gia_ManObj(
p, iObj );
4858 if ( !Gia_ObjIsAnd(pObj) )
4871 int Count0 = 1, Count1 = 0;
4872 assert( Vec_IntSize(vPart[0]) == Vec_IntSize(vPart[1]) );
4873 if ( Vec_IntSize(vPart[0]) > 0 )
4878 return Count0 < Count1;
4883 int iObj = Gia_ObjId(
p, pObj );
4886 Vec_IntPushUnique( vXors, Gia_ObjId(
p, pObj) );
4889 if ( Gia_ObjFaninC0(pObj) )
4890 Vec_IntPushUnique( vXors, Gia_ObjFaninId0(pObj, iObj) );
4893 if ( Gia_ObjFaninC1(pObj) )
4894 Vec_IntPushUnique( vXors, Gia_ObjFaninId1(pObj, iObj) );
4900 int i, iObj, iObj2, fFlip, Count1 = 0;
4901 Vec_Int_t * vXors, * vPart[2], * vOrder;
4902 Gia_Obj_t * pFan[2], * pObj = Gia_ManCo(
p, 0);
4903 vXors = Vec_IntAlloc( 100 );
4904 if ( Gia_ManCoNum(
p) == 1 )
4906 if ( Gia_ObjFaninC0(pObj) )
4909 Vec_IntPush( vXors, Gia_ObjId(
p, Gia_ObjFanin0(pObj)) );
4914 if ( Gia_ObjFaninId0p(
p, pObj) > 0 )
4915 Vec_IntPush( vXors, Gia_ObjFaninId0p(
p, pObj) );
4920 Vec_IntReverseOrder( vXors );
4923 vPart[0] = Vec_IntAlloc( 100 );
4924 vPart[1] = Vec_IntAlloc( 100 );
4929 pFan[0] = pObj, pFan[1] = Gia_ManConst0(
p), Count1++;
4932 fCompl ^= Gia_IsComplement(pFan[0]);
4933 fCompl ^= Gia_IsComplement(pFan[1]);
4934 pFan[0] = Gia_Regular(pFan[0]);
4935 pFan[1] = Gia_Regular(pFan[1]);
4938 Vec_IntPush( vPart[0], Gia_ObjId(
p, pFan[fFlip]) );
4939 Vec_IntPush( vPart[1], Gia_ObjId(
p, pFan[!fFlip]) );
4944 Vec_IntFree( vXors );
4947 vOrder = Vec_IntAlloc( 100 );
4949 Vec_IntPushTwo( vOrder, iObj, iObj2 );
4950 Vec_IntFree( vPart[0] );
4951 Vec_IntFree( vPart[1] );
4952 Vec_IntReverseOrder( vOrder );
4961 if ( vOrder == NULL )
4963 printf(
"Cannot demiter because the top-most gate is an AND-gate.\n" );
4966 assert( Vec_IntSize(vOrder) % 2 == 0 );
4967 vNodes = Vec_IntAlloc( Gia_ManObjNum(
p) );
4970 pNew =
Gia_ManStart( 1 + Gia_ManCiNum(
p) + Vec_IntSize(vNodes) + Vec_IntSize(vOrder) );
4971 pNew->
pName = Abc_UtilStrsav(
p->pName );
4972 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
4973 Gia_ManConst0(
p)->Value = 0;
4975 pObj->
Value = Gia_ManAppendCi( pNew );
4977 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
4978 pObj = Gia_ManCo(
p, 0);
4979 if ( Gia_ObjFanin0(pObj) == Gia_ManConst0(
p) )
4981 Gia_ManAppendCo( pNew, 0 );
4982 Gia_ManAppendCo( pNew, Gia_ObjFaninC0(pObj) );
4988 Gia_ManAppendCo( pNew, Abc_LitNotCond(pObj->
Value, pObj->
fPhase) );
4990 Vec_IntFree( vNodes );
4991 Vec_IntFree( vOrder );
5009 if ( Gia_ObjIsTravIdCurrentId(
p, iObj) )
5011 Gia_ObjSetTravIdCurrentId(
p, iObj);
5012 pObj = Gia_ManObj(
p, iObj );
5013 if ( !Gia_ObjIsAnd(pObj) )
5017 Vec_IntPush( vNodes, iObj );
5022 Vec_Int_t * vNodes = Vec_IntAlloc( Gia_ManObjNum(
p) );
5024 Gia_ObjSetTravIdCurrent(
p, Gia_ManConst0(
p) );
5026 if ( (i & 1) == fOdd )
5034 assert( Gia_ManRegNum(
p) == 0 );
5035 assert( Gia_ManCoNum(
p) % 2 == 0 );
5037 for ( fOdd = 0; fOdd < 2; fOdd++ )
5041 pNew->
pName = Abc_UtilStrsav(
p->pName );
5042 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
5043 Gia_ManConst0(
p)->Value = 0;
5045 pObj->
Value = Gia_ManAppendCi( pNew );
5047 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
5049 if ( (i & 1) == fOdd )
5050 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
5051 Vec_IntFree( vNodes );
5074 Vec_Int_t * vNodes = Vec_IntAlloc( Gia_ManObjNum(
p) );
5076 Gia_ObjSetTravIdCurrent(
p, Gia_ManConst0(
p) );
5078 if ( (i < Gia_ManCoNum(
p)/2) ^ fSecond )
5086 assert( Gia_ManRegNum(
p) == 0 );
5087 assert( Gia_ManCoNum(
p) % 2 == 0 );
5089 for ( fSecond = 0; fSecond < 2; fSecond++ )
5093 pNew->
pName = Abc_UtilStrsav(
p->pName );
5094 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
5095 Gia_ManConst0(
p)->Value = 0;
5097 pObj->
Value = Gia_ManAppendCi( pNew );
5099 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
5101 if ( (i < Gia_ManCoNum(
p)/2) ^ fSecond )
5102 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
5103 Vec_IntFree( vNodes );
5129 pNew->
pName = Abc_UtilStrsav(
p->pName );
5130 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
5132 Gia_ManConst0(
p)->Value = 0;
5136 pObj->
Value = Gia_ManAppendCi( pNew );
5140 if ( i >= Gia_ManRegNum(
p)/2 )
5147 pObj->
Value = Gia_ManAppendCi( pNew );
5149 if ( i >= Gia_ManRegNum(
p)/2 )
5150 pObj->
Value = Gia_ManAppendCi( pNew );
5152 if ( i < Gia_ManRegNum(
p)/2 )
5153 pObj->
Value = Gia_ManAppendCi( pNew );
5157 if ( i < Gia_ManRegNum(
p)/2 )
5177 int i, iObj, * pClasses =
ABC_FALLOC(
int, Gia_ManObjNum(
p) );
5178 int n, Repr, * pClass2Repr =
ABC_FALLOC(
int, Gia_ManObjNum(
p) );
5180 assert(
p->pReprs == NULL &&
p->pNexts == NULL );
5182 for ( i = 0; i < Gia_ManObjNum(
p); i++ )
5186 for ( n = 0; n < 2; n++ )
5188 assert( pPart[n]->pReprs != NULL && pPart[n]->pNexts != NULL );
5189 for ( i = 0; i < Gia_ManObjNum(pPart[n]); i++ )
5190 if ( Gia_ObjRepr(pPart[n], i) == 0 )
5191 pClasses[Gia_ManObj(pPart[n], i)->Value] = 0;
5194 Repr = Gia_ManObj(pPart[n], i)->Value;
5198 if ( pClasses[Gia_ManObj(pPart[n], iObj)->Value] != -1 )
5199 Repr = pClasses[Gia_ManObj(pPart[n], iObj)->Value];
5202 pClasses[Gia_ManObj(pPart[n], iObj)->Value] = Repr;
5206 for ( i = 0; i < Gia_ManObjNum(
p); i++ )
5207 if ( pClasses[i] != -1 && pClass2Repr[pClasses[i]] == -1 )
5209 pClass2Repr[pClasses[i]] = i;
5213 for ( i = 0; i < Gia_ManObjNum(
p); i++ )
5214 if ( pClasses[i] != -1 )
5215 p->pReprs[i].iRepr = pClass2Repr[pClasses[i]];
5236 printf(
"Const0:" );
5238 if ( Gia_ObjRepr(
p, i) == 0 )
5245 printf(
" %d", iObj );
5266 for ( n = 0; n < 2; n++ )
5276 Gia_ManObj( pParts[n], Abc_Lit2Var(pObj->
Value) )->Value = i;
5315 pObj->
fMark0 = Gia_ObjFanin0(pObj)->fMark0 | Gia_ObjFanin1(pObj)->fMark0;
5317 pObj->
fMark0 = Gia_ObjFanin0(pObj)->fMark0;
5325 pNew->
pName = Abc_UtilStrsav(
p->pName );
5326 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
5329 Gia_ManConst0(
p)->Value = 0;
5334 pFanin = Gia_ObjFanin0(pObj);
5336 pFanin->
Value = Gia_ManAppendCi(pNew);
5337 pFanin = Gia_ObjFanin1(pObj);
5339 pFanin->
Value = Gia_ManAppendCi(pNew);
5343 pObj->
Value = Gia_ManAppendCi(pNew);
5367 pNew =
Gia_ManStart( Gia_ManObjNum(
p) + Gia_ManCiNum(
p) * nMulti );
5368 pNew->
pName = Abc_UtilStrsav(
p->pName );
5369 Gia_ManConst0(
p)->Value = 0;
5372 pObj->
Value = Gia_ManAppendCi(pNew);
5373 for ( k = 1; k < nMulti; k++ )
5374 Gia_ManAppendCi(pNew);
5377 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
5379 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
5380 assert( Gia_ManCiNum(pNew) == nMulti * Gia_ManCiNum(
p) );
5397 Vec_Int_t * vTypes = Vec_IntAlloc( 10 );
5400 if ( Vec_IntFind(vTypes, Entry & 0xFFFE) < 0 )
5401 Vec_IntPush( vTypes, Entry & 0xFFFE );
5408 Vec_Int_t * vBufs = Vec_IntAlloc(
p->nBufs );
5409 Gia_Obj_t * pObj;
int i, Item, j, k = 0;
5411 if ( Gia_ObjIsBuf(pObj) )
5412 Vec_IntPush( vBufs, i );
5413 assert(
p->nBufs == Vec_IntSize(vBufs) );
5414 for ( i = 0; i < 2*Vec_IntSize(vTypes); i++ )
5415 pvMap[i] = Vec_WecAlloc( 10 );
5418 int Type = Vec_IntFind( vTypes, Item & 0xFFFE );
5419 Vec_Int_t * vVec = Vec_WecPushLevel(pvMap[2*Type + (Item&1)]);
5420 for ( j = 0; j < (Item >> 16); j++ )
5421 Vec_IntPush( vVec, Vec_IntEntry(vBufs, k++) );
5424 for ( i = 0; i < Vec_IntSize(vTypes); i++ )
5425 assert( Vec_WecSize(pvMap[2*i+0]) == Vec_WecSize(pvMap[2*i+1]) );
5426 Vec_IntFree( vTypes );
5427 Vec_IntFree( vBufs );
5432 Vec_Int_t * vTemp = Vec_IntAlloc( Vec_IntSize(vVec0) );
5433 int i, o0, o1, iRes;
5435 Vec_IntPush( vTemp,
Gia_ManHashXor(pNew, Gia_ManObj(
p, o0)->Value, Abc_LitNot(Gia_ManObj(
p, o1)->Value)) );
5437 Vec_IntFree( vTemp );
5442 int t, i, k, iUif = 1;
5443 for ( t = 0; t < nTypes; t++ )
5445 assert( Vec_WecSize(pvMap[2*t+0]) == Vec_WecSize(pvMap[2*t+1]) );
5446 for ( i = 0; i < Vec_WecSize(pvMap[2*t+0]); i++ )
5447 for ( k = i + 1; k < Vec_WecSize(pvMap[2*t+0]); k++ )
5451 int iRes =
Gia_ManHashOr( pNew, Abc_LitNot(iCond1), iCond2 );
5464 pNew->
pName = Abc_UtilStrsav(
p->pName );
5465 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
5466 Gia_ManConst0(
p)->Value = 0;
5470 if ( Gia_ObjIsBuf(pObj) )
5471 pObj->
Value = Gia_ManAppendBuf( pNew, Gia_ObjFanin0Copy(pObj) );
5472 else if ( Gia_ObjIsAnd(pObj) )
5474 else if ( Gia_ObjIsCi(pObj) )
5475 pObj->
Value = Gia_ManAppendCi( pNew );
5476 else if ( Gia_ObjIsCo(pObj) )
5477 pObj->
Value = Gia_ObjFanin0Copy(pObj);
5484 for ( i = 0; i < 2*Vec_IntSize(vTypes); i++ )
5485 Vec_WecFree( pvMap[i] );
5488 pNew->
vBarBufs = Vec_IntDup(
p->vBarBufs );
5489 printf(
"Added UIF constraints for %d type%s of boxes.\n", Vec_IntSize(vTypes), Vec_IntSize(vTypes) > 1 ?
"s" :
"" );
5490 Vec_IntFree( vTypes );
5507 Vec_Int_t * vMap = Vec_IntAlloc(
p->nBufs );
int i, Item;
5509 Vec_IntFillExtra( vMap, Vec_IntSize(vMap) + (Item >> 16), Item & 1 );
5510 assert(
p->nBufs == Vec_IntSize(vMap) );
5518 int i, k = 0, iCi = 0, nCis = Gia_ManCiNum(
p) + Vec_IntSum(vMap);
5520 pNew->
pName = Abc_UtilStrsav(
p->pName );
5521 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
5522 Gia_ManConst0(
p)->Value = 0;
5523 for ( i = 0; i < nCis; i++ )
5524 Gia_ManAppendCi( pNew );
5528 if ( Gia_ObjIsBuf(pObj) )
5530 if ( Vec_IntEntry(vMap, k++) )
5531 pObj->
Value = Gia_ManCiLit(pNew, iCi++);
5533 pObj->
Value = Gia_ObjFanin0Copy(pObj);
5535 else if ( Gia_ObjIsAnd(pObj) )
5537 else if ( Gia_ObjIsCi(pObj) )
5538 pObj->
Value = Gia_ManCiLit(pNew, iCi++);
5539 else if ( Gia_ObjIsCo(pObj) )
5540 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
5542 assert( k ==
p->nBufs && iCi == nCis );
5545 Vec_IntFree( vMap );
5565 assert( Gia_ManCiNum(pCare) == Gia_ManCiNum(
p) );
5566 assert( Gia_ManCoNum(pCare) == 1 );
5567 assert( Gia_ManRegNum(
p) == 0 );
5568 assert( Gia_ManRegNum(pCare) == 0 );
5569 pNew =
Gia_ManStart( 2*Gia_ManObjNum(
p) + Gia_ManObjNum(pCare) );
5570 pNew->
pName = Abc_UtilStrsavTwo( pNew->
pName ? pNew->
pName : (
char *)
"test", (
char *)
"_care" );
5572 Gia_ManConst0(pCare)->Value = 0;
5574 pObj->
Value = Gia_ManAppendCi( pNew );
5578 iCare = Gia_ObjFanin0Copy(pObj);
5579 Gia_ManConst0(
p)->Value = 0;
5581 pObj->
Value = Gia_ManCi(pCare, i)->Value;
5589 pObj->
Value = Gia_ObjFanin0Copy(pObj);
5591 Gia_ManAppendCo( pNew, pObj->
Value );
5612 int i, k, x, fCompl, iLit;
char pNameP[32], pNameT[32];
5613 Vec_Wec_t * vProds = Vec_WecStart( nArgA + nArgB );
5614 Vec_Wec_t * vLevels = Vec_WecStart( nArgA + nArgB );
5615 Vec_Int_t * vRes = Vec_IntAlloc( nArgA + nArgB );
5616 Vec_Int_t * vArgA = Vec_IntAlloc( nArgA );
5617 Vec_Int_t * vArgB = Vec_IntAlloc( nArgB ), * vLevel;
5621 pProd->
pName = Abc_UtilStrsav(
"prod" );
5622 pTree->
pName = Abc_UtilStrsav(
"tree" );
5623 for ( x = 0; x < nArgA; x++ )
5624 Vec_IntPush( vArgA, Gia_ManAppendCi(pProd) );
5625 for ( x = 0; x < nArgB; x++ )
5626 Vec_IntPush( vArgB, Gia_ManAppendCi(pProd) );
5627 for ( x = 0; x < nArgA + nArgB; x++ )
5629 for ( i = 0; i < nArgA; i++ )
5630 for ( k = 0; k < nArgB; k++ )
5634 fCompl = fSigned && ((i == nArgA-1) ^ (k == nArgB-1));
5635 iLit = Abc_LitNotCond(Gia_ManAppendAnd(pProd, Vec_IntEntry(vArgA, i), Vec_IntEntry(vArgB, k)), fCompl);
5636 Gia_ManAppendCo( pProd, iLit );
5637 Vec_WecPush( vProds, i+k, Gia_ManAppendCi(pTree) );
5638 Vec_WecPush( vLevels, i+k, 0 );
5643 Vec_WecPush( vProds, nArgA, 1 );
5644 Vec_WecPush( vLevels, nArgA, 0 );
5646 Vec_WecPush( vProds, nArgA+nArgB-1, 1 );
5647 Vec_WecPush( vLevels, nArgA+nArgB-1, 0 );
5652 for ( x = 0; x < Seed; x++ )
5655 if ( Vec_IntSize(vLevel) > 1 )
5656 Vec_IntRandomizeOrder( vLevel );
5659 Vec_IntShrink( vRes, nArgA + nArgB );
5660 assert( Vec_IntSize(vRes) == nArgA + nArgB );
5662 Gia_ManAppendCo( pTree, iLit );
5666 sprintf( pNameP,
"prod%d%d.aig", nArgA, nArgB );
5667 sprintf( pNameT,
"tree%d%d.aig", nArgA, nArgB );
5672 printf(
"Dumped files \"%s\" and \"%s\".\n", pNameP, pNameT );
5674 Vec_WecFree( vProds );
5675 Vec_WecFree( vLevels );
5676 Vec_IntFree( vArgA );
5677 Vec_IntFree( vArgB );
5678 Vec_IntFree( vRes );
5698 pNew->
pName = Abc_UtilStrsav(
p->pName);
5699 Gia_ManConst0(
p)->Value = 0;
5701 pObj->
Value = Gia_ManAppendCi( pNew );
5702 Gia_ManAppendCi( pNew );
5704 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
5706 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
5707 Gia_ManAppendCo( pNew, 0 );
5729 if ( Gia_ManBufNum(p1) == 0 ) {
5730 printf(
"The first AIG should have a boundary.\n" );
5733 if ( Gia_ManBufNum(p2) != 0 ) {
5734 printf(
"The second AIG should have no boundary.\n" );
5737 assert( Gia_ManBufNum(p1) > 0 );
5738 assert( Gia_ManBufNum(p2) == 0 );
5739 assert( Gia_ManRegNum(p1) == 0 );
5740 assert( Gia_ManRegNum(p2) == 0 );
5741 assert( Gia_ManCiNum(p1) == Gia_ManCiNum(p2) );
5742 assert( Gia_ManCoNum(p1) == Gia_ManCoNum(p2) );
5745 printf(
"Creating a boundary miter with %d inputs, %d outputs, and %d buffers.\n",
5746 Gia_ManCiNum(p1), Gia_ManCoNum(p1), Gia_ManBufNum(p1) );
5747 pNew =
Gia_ManStart( Gia_ManObjNum(p1) + Gia_ManObjNum(p2) );
5751 Gia_ManConst0(p1)->Value = 0;
5752 Gia_ManConst0(p2)->Value = 0;
5755 for(
int i = 0; i < Gia_ManCiNum(p1); i++ )
5757 int iLit = Gia_ManCi(p1, i)->Value = Gia_ManCi(p2, i) -> Value = Gia_ManAppendCi(pNew);
5759 pObj = Gia_ManCi(p1, i);
5762 pObj = Gia_ManCi(p2, i);
5783 iLit = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
5787 iLit = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
5814 int nBoundI = 0, nBoundO = 0;
5820 Gia_ManConst0(
p)->Value = 0;
5830 nExtra = Gia_ManAndNum( pNew );
5837 pObj2 = Gia_ObjFanin0(pObj);
5840 if ( i >= 2 * nPo + nBInput )
5848 Gia_ManAppendBuf( pNew, Gia_ObjFanin0Copy(pObj) );
5851 nExtra = Gia_ManAndNum( pNew ) - nExtra - Gia_ManBufNum( pNew );
5854 if ( !~pObj->
Value )
5855 pObj->
Value = Gia_ManAppendCi(pNew);
5856 assert( Gia_ManCiNum(pNew) == Gia_ManCiNum(
p) );
5863 printf(
"synthesized implementation:\n" );
5864 printf(
"\t%d / %d input boundary recovered.\n", nBoundI, nBInput );
5865 printf(
"\t%d / %d output boundary recovered.\n", nBoundO, Gia_ManCoNum(
p)-2*nPo-nBInput );
5866 printf(
"\t%d / %d unused nodes in the box.\n", nExtra, Gia_ManAndNum(pNew) - Gia_ManBufNum( pNew ) );
5885 Vec_Int_t * vNodes = Vec_IntAlloc( 100 );
5886 Vec_Int_t * vSupp = Vec_IntAlloc( 100 );
5888 Vec_IntPush( vRoots, iObj );
5892 Vec_IntSort(vNodes, 0);
5894 if ( !Gia_ObjIsTravIdCurrent(
p, Gia_ObjFanin0(pObj)) )
5895 Vec_IntPushUnique( vSupp, Gia_ObjFaninId0p(
p, pObj) );
5896 if ( !Gia_ObjIsTravIdCurrent(
p, Gia_ObjFanin1(pObj)) )
5897 Vec_IntPushUnique( vSupp, Gia_ObjFaninId1p(
p, pObj) );
5899 Vec_IntSort(vSupp, 0);
5900 if ( fVerbose ) Vec_IntPrint( vSupp );
5901 if ( fVerbose ) Vec_IntPrint( vNodes );
5903 pNew->
pName = Abc_UtilStrsav(
"care" );
5905 Gia_ManConst0(
p)->Value = 0;
5907 pObj->
Value = Gia_ManAppendCi(pNew);
5909 Gia_ManObj(
p, iObj)->Value = 0;
5913 if ( Gia_ObjIsTravIdCurrent(
p, pObj) )
5914 pObj->
Value = Gia_ObjFanin0Copy(pObj);
5915 Gia_ManObj(
p, iObj)->Value = 1;
5919 if ( Gia_ObjIsTravIdCurrent(
p, pObj) )
5921 Gia_ManAppendCo( pNew, Abc_LitNot(iRes) );
5922 Vec_IntFree( vRoots );
5923 Vec_IntFree( vNodes );
5924 Vec_IntFree( vSupp );
5944 Vec_Int_t * vInner = Vec_IntAlloc( 100 );
5947 Gia_ObjSetTravIdCurrent(
p, pObj);
5948 Vec_IntAppend( vInner, vObjs );
5950 if ( Gia_ObjIsTravIdCurrent(
p, pObj) )
5952 if ( !Gia_ObjIsTravIdCurrent(
p, Gia_ObjFanin0(pObj)) || !Gia_ObjIsTravIdCurrent(
p, Gia_ObjFanin1(pObj)) )
5954 Gia_ObjSetTravIdCurrent(
p, pObj);
5955 Vec_IntPush( vInner, Gia_ObjId(
p, pObj) );
5962 Vec_Int_t * vOuts = Vec_IntAlloc( 100 );
5964 Gia_ObjSetTravIdPrevious(
p, pObj);
5966 if ( Gia_ObjIsTravIdCurrent(
p, pObj) )
5968 if ( Gia_ObjIsTravIdCurrent(
p, Gia_ObjFanin0(pObj)) ) {
5969 Gia_ObjSetTravIdPrevious(
p, Gia_ObjFanin0(pObj));
5970 Vec_IntPush( vOuts, Gia_ObjFaninId0p(
p, pObj) );
5972 if ( Gia_ObjIsTravIdCurrent(
p, Gia_ObjFanin1(pObj)) ) {
5973 Gia_ObjSetTravIdPrevious(
p, Gia_ObjFanin1(pObj));
5974 Vec_IntPush( vOuts, Gia_ObjFaninId1p(
p, pObj) );
5978 if ( Gia_ObjIsTravIdCurrent(
p, Gia_ObjFanin0(pObj)) ) {
5979 Gia_ObjSetTravIdPrevious(
p, Gia_ObjFanin0(pObj));
5980 Vec_IntPush( vOuts, Gia_ObjFaninId0p(
p, pObj) );
5983 Vec_IntSort( vOuts, 0 );
5992 pNew->
pName = Abc_UtilStrsav(
"win" );
5993 Gia_ManConst0(
p)->Value = 0;
5995 pObj->
Value = Gia_ManAppendCi( pNew );
5997 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
5999 pObj->
Value = Gia_ManAppendCo( pNew, pObj->
Value );
6000 printf(
"Derived window with %d inputs, %d internal nodes, and %d outputs.\n", Vec_IntSize(vCut), Vec_IntSize(vInner), Vec_IntSize(vOuts) );
6001 printf(
"Outputs: " );
6002 Vec_IntPrint( vOuts );
6003 Vec_IntFree( vInner );
6004 Vec_IntFree( vOuts );
6021 Vec_Wec_t * vTfos = Vec_WecStart( Vec_IntSize(vVarNums) );
6022 Vec_Int_t * vNodes = Vec_IntAlloc( 100 );
6023 Gia_Obj_t * pObj;
int i, k, Input, iNode;
6026 Gia_ObjSetTravIdCurrentId(
p, Gia_ManCiIdToId(
p, Input) );
6028 if ( Gia_ObjIsTravIdCurrentId(
p, Gia_ObjFaninId0(pObj, i)) || Gia_ObjIsTravIdCurrentId(
p, Gia_ObjFaninId1(pObj, i)) )
6029 Gia_ObjSetTravIdCurrentId(
p, i ), Vec_IntPush( vNodes, i );
6033 Gia_ObjSetTravIdCurrentId(
p, Gia_ManCiIdToId(
p, Input) );
6035 if ( Gia_ObjIsTravIdCurrentId(
p, Gia_ObjFaninId0(Gia_ManObj(
p, iNode), iNode)) || Gia_ObjIsTravIdCurrentId(
p, Gia_ObjFaninId1(Gia_ManObj(
p, iNode), iNode)) )
6036 Gia_ObjSetTravIdCurrentId(
p, iNode ), Vec_WecPush( vTfos, i, iNode );
6038 Vec_IntFree( vNodes );
6043 int i, iLit, nMints = 1 << Vec_IntSize(vVarNums);
6044 Vec_Int_t * vOutLits = Vec_IntAlloc( nMints * Gia_ManCoNum(
p) );
6047 assert( Gia_ManRegNum(
p) == 0 );
6049 pNew->
pName = Abc_UtilStrsav(
p->pName );
6051 Gia_ManConst0(
p)->Value = 0;
6053 pObj->
Value = Gia_ManAppendCi(pNew);
6060 Vec_IntPush( vOutLits, Gia_ObjFanin0Copy(pObj) );
6062 for ( m = 1; m < nMints; m++ )
6064 g = m ^ (m >> 1); x = (b ^ g) == 1 ? 0 : Abc_Base2Log(b ^ g); b = g;
6065 Vec_Int_t * vNode = Vec_WecEntry( vTfos, x );
6066 Gia_ManPi(
p, Vec_IntEntry(vVarNums, x))->Value ^= 1;
6070 Vec_IntPush( vOutLits, Gia_ObjFanin0Copy(pObj) );
6072 assert( Vec_IntFindMin(vOutLits) >= 0 );
6074 Gia_ManAppendCo( pNew, iLit );
6075 Vec_IntFree( vOutLits );
6076 Vec_WecFree( vTfos );
6095 Vec_Int_t * vRes = Vec_IntAlloc( Gia_ManCoNum(
p) );
6096 Vec_Int_t * vMap = Vec_IntStartFull( 2*Gia_ManObjNum(
p) );
6097 Gia_Obj_t * pObj;
int i, iLit, iClass = 0;
6098 assert( Gia_ManCoNum(
p) == 1 << Abc_Base2Log(Gia_ManCoNum(
p)) );
6101 iLit = Gia_ObjFaninLit0p(
p, pObj);
6102 if ( Vec_IntEntry(vMap, iLit) == -1 )
6103 Vec_IntWriteEntry( vMap, iLit, iClass++ );
6104 Vec_IntPush( vRes, Vec_IntEntry(vMap, iLit) );
6106 Vec_IntFree( vMap );
6115 assert( Vec_IntSize(vRes) == 1 << Vec_IntSize(vVarNums) );
6120 int i, Class, nClasses = Vec_IntFindMax(vRes)+1;
6121 printf(
"%d -> %d: ", Vec_IntSize(vVarNums), nClasses );
6122 if ( nClasses <= 36 )
6124 printf(
"%c", (Class < 10 ? (
int)
'0' : (
int)
'A'-10) + Class );
6134 Vec_Int_t * vVars = Vec_IntAlloc( 100 ), * vDec;
6135 int i, k, Limit = Vec_IntSize(vCols), Entry;
6136 int nClasses = Vec_IntFindMax(vCols)+1;
6137 int nExtras = Abc_Base2Log(nClasses);
6139 pNew->
pName = Abc_UtilStrsav(
p->pName );
6140 for ( i = 0; i < Vec_IntSize(vVarNums) + nExtras; i++ )
6141 Vec_IntPush( vVars, Gia_ManAppendCi(pNew) );
6143 vDec =
Gia_GenDecoder( pNew, Vec_IntEntryP(vVars, Vec_IntSize(vVarNums)), nExtras );
6145 Vec_IntWriteEntry( vCols, i, Vec_IntEntry(vDec, Entry) );
6146 Vec_IntFree( vDec );
6147 for ( i = Vec_IntSize(vVarNums) - 1; i >= 0; i--, Limit /= 2 )
6148 for ( k = 0; k < Limit; k += 2 )
6149 Vec_IntWriteEntry( vCols, k/2,
Gia_ManHashMux(pNew, Vec_IntEntry(vVars, i), Vec_IntEntry(vCols, k+1), Vec_IntEntry(vCols, k)) );
6150 Gia_ManAppendCo( pNew, Vec_IntEntry(vCols, 0) );
6151 Vec_IntFree( vCols );
6152 Vec_IntFree( vVars );
6156 printf(
"Generated AIG with %d inputs and %d nodes representing %d PIs with %d columns.\n",
6157 Gia_ManPiNum(pNew), Gia_ManAndNum(pNew), Vec_IntSize(vVarNums), nClasses );
6174 for (
int n = 0; n < nRands; n++ )
6177 for (
int i = 0; i < n; i++ )
6179 Vec_Int_t * vIns = Vec_IntStartNatural( Gia_ManPiNum(
p) );
6180 Vec_IntRandomizeOrder( vIns );
6181 Vec_IntShrink( vIns, nVars );
6185 printf(
"%d ", Entry );
6188 Vec_IntFree( vTemp );
6189 Vec_IntFree( vIns );
6194 Vec_Int_t * vIns = Vec_IntAlloc( nVars );
6195 int m, k, Entry, Count, nMints = 1 << Gia_ManPiNum(
p);
6196 for ( m = 0; m < nMints; m++ ) {
6197 for ( Count = k = 0; k < Gia_ManPiNum(
p); k++ )
6198 Count += (m >> k) & 1;
6199 if ( Count != nVars )
6201 Vec_IntClear( vIns );
6202 for ( k = 0; k < Gia_ManPiNum(
p); k++ )
6204 Vec_IntPush( vIns, k );
6205 assert( Vec_IntSize(vIns) == Count );
6208 printf(
"%d ", Entry );
6211 Vec_IntFree( vTemp );
6213 Vec_IntFree( vIns );
6231 if ( FanId == iFanout )
6238 assert( Gia_ManRegNum(
p) == 0 );
6241 pNew->
pName = Abc_UtilStrsav(
p->pName );
6243 Gia_ManConst0(
p)->Value = 0;
6245 pNew->
vNamesIn = Vec_PtrAlloc( 100 );
6248 pObj->
Value = Gia_ManAppendCi(pNew);
6249 Vec_PtrPush( pNew->
vNamesIn, Gia_ObjCiName(
p, i) );
6250 for ( f = 1; f < Gia_ObjFanoutNum(
p, pObj); f++ ) {
6251 Gia_ManAppendCi(pNew);
6252 Vec_PtrPush( pNew->
vNamesIn, Abc_UtilStrsavNum(Gia_ObjCiName(
p, i), f) );
6256 iLit[0] = Gia_ObjFanin0Copy(pObj);
6257 if ( Gia_ObjIsPi(
p, Gia_ObjFanin0(pObj)) )
6259 iLit[1] = Gia_ObjFanin1Copy(pObj);
6260 if ( Gia_ObjIsPi(
p, Gia_ObjFanin1(pObj)) )
6262 pObj->
Value = Gia_ManAppendAnd( pNew, iLit[0], iLit[1] );
6265 iLit[0] = Gia_ObjFanin0Copy(pObj);
6266 if ( Gia_ObjIsPi(
p, Gia_ObjFanin0(pObj)) )
6268 Gia_ManAppendCo( pNew, iLit[0] );
6269 Vec_PtrPush( pNew->
vNamesOut, Gia_ObjCoName(
p, i) );
6291 printf(
"%d -> %d\n", i,
p->pSibls[i] );
6297 assert( Gia_ObjIsAnd(pObj) );
6298 Gia_Obj_t * pSibl = Gia_ObjSiblObj(
p, Gia_ObjId(
p, pObj));
6302 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
6304 int iObjNew = Abc_Lit2Var(pObj->
Value);
6305 int iNextNew = Abc_Lit2Var(pSibl->
Value);
6306 assert( iObjNew > iNextNew );
6307 assert( Gia_ObjIsAnd(Gia_ManObj(pNew, iNextNew)) );
6308 pNew->
pSibls[iObjNew] = iNextNew;
6316 pNew->
pName = Abc_UtilStrsav(
p->pName );
6317 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
6321 pObj->
Value = Gia_ManAppendCi(pNew);
6325 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
6360 if ( Abc_Lit2Var(Vec_IntEntry(vObj2Tt, iObj)) == iFunc )
6362 if ( Gia_ObjIsTravIdCurrentId(pGia, iObj) )
6364 Gia_ObjSetTravIdCurrentId(pGia, iObj);
6365 Gia_Obj_t * pObj = Gia_ManObj(pGia, iObj);
6366 if ( !Gia_ObjIsAnd(pObj) )
6385 Gia_Obj_t * pObj = Gia_ManObj( pGia, iObj );
6386 assert( ~Gia_ObjFanin0(pObj)->Value && ~Gia_ObjFanin1(pObj)->Value );
6387 int obLits[2] = { Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) };
6388 int ttLits[2] = { Vec_IntEntry(
p->vObj2Tt, Abc_Lit2Var(obLits[0])), Vec_IntEntry(
p->vObj2Tt, Abc_Lit2Var(obLits[1])) };
6389 int fCompl[2] = { Abc_LitIsCompl(ttLits[0]) ^ Abc_LitIsCompl(obLits[0]), Abc_LitIsCompl(ttLits[1]) ^ Abc_LitIsCompl(obLits[1]) };
6390 word * pTruth[2] = { Vec_MemReadEntry(
p->vTtMem, Abc_Lit2Var(ttLits[0])), Vec_MemReadEntry(
p->vTtMem, Abc_Lit2Var(ttLits[1])) };
6391 Abc_TtAndCompl(
p->pTruth, pTruth[0], fCompl[0], pTruth[1], fCompl[1],
p->nWords );
6392 int fComp = (int)
p->pTruth[0] & 1;
if ( fComp ) Abc_TtNot(
p->pTruth,
p->nWords );
6393 int nFuncs = Vec_MemEntryNum(
p->vTtMem );
6394 int iFunc = Vec_MemHashInsert(
p->vTtMem,
p->pTruth );
6395 assert( iFunc <= nFuncs );
6396 if ( iFunc == nFuncs ) {
6398 Vec_IntPush(
p->vObj2Tt, Abc_Var2Lit(iFunc, fComp ^ Abc_LitIsCompl(pObj->
Value)) );
6399 Vec_IntPush(
p->vTt2Obj, Abc_Lit2Var(pObj->
Value) );
6402 int iRepr = Vec_IntEntry(
p->vTt2Obj, iFunc );
6403 pObj->
Value = Abc_Var2Lit( iRepr, fComp ^ Abc_LitIsCompl(Vec_IntEntry(
p->vObj2Tt, iRepr)) );
6404 if ( iRepr <= Gia_ManCiNum(pGia) ||
Gia_ManDupChoicesMark(
p->pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj),
p->vObj2Tt, iFunc) )
6406 int nObjNew = Gia_ManObjNum(
p->pNew);
6407 int iLitNew =
Gia_ManHashAnd(
p->pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
6408 if ( Abc_Lit2Var(iLitNew) == nObjNew )
6409 Vec_IntPush(
p->vObj2Tt, Abc_Var2Lit(iFunc, fComp ^ Abc_LitIsCompl(iLitNew)) );
6414 assert( Gia_ManCiNum(
p->pNew) == Gia_ManCiNum(pGia) );
6415 assert( !
p->vCoLits || Vec_IntSize(
p->vCoLits) == Gia_ManCoNum(pGia) );
6416 assert( Gia_ManRegNum(
p->pNew) == Gia_ManRegNum(pGia) );
6419 pObj->
Value = Gia_ManCiLit(
p->pNew, i );
6422 assert( Vec_IntSize(
p->vObj2Tt) == Gia_ManObjNum(
p->pNew) );
6423 assert( Vec_IntSize(
p->vTt2Obj) == Vec_MemEntryNum(
p->vTtMem) );
6429 p->pNew->pName = Abc_UtilStrsav( pGia->
pName );
6430 p->pNew->pSpec = Abc_UtilStrsav( pGia->
pSpec );
6431 p->vTtMem = Vec_MemAllocWithTTs( Gia_ManCiNum(pGia) );
6432 p->vTt2Obj = Vec_IntStartNatural( 1 + Gia_ManCiNum(pGia) );
6433 p->vObj2Tt = Vec_IntAlloc( 10*Gia_ManObjNum(pGia) );
6434 p->nWords = Abc_TtWordNum( Gia_ManCiNum(pGia) );
6437 for ( i = 0; i <= Gia_ManCiNum(pGia); i++ )
6438 Vec_IntPush(
p->vObj2Tt, Abc_Var2Lit(i, 0) );
6440 Gia_ManAppendCi(
p->pNew);
6444 p->vCoLits = Vec_IntAlloc( Gia_ManCoNum(pGia) );
6446 Vec_IntPush(
p->vCoLits, Gia_ObjFanin0Copy(pObj) );
6452 Vec_Int_t * vSibls = Vec_IntStart( Gia_ManObjNum(
p->pNew) );
6453 assert( Vec_IntSize(
p->vTt2Obj) == Vec_MemEntryNum(
p->vTtMem) );
6455 int iPrev = Vec_IntEntry(
p->vTt2Obj, Abc_Lit2Var(ttLit));
6457 if ( iPrev == iObj )
6459 Vec_IntWriteEntry( vSibls, iPrev, iObj );
6460 Vec_IntWriteEntry(
p->vTt2Obj, Abc_Lit2Var(ttLit), iObj );
6466 Gia_Man_t * pTemp, * pNew =
p->pNew;
int i, iLit;
6468 p->pNew->pSibls = Vec_IntReleaseArray(
p->vSibls );
6470 Gia_ManAppendCo(
p->pNew, iLit );
6471 Vec_MemFree(
p->vTtMem );
6472 Vec_IntFree(
p->vSibls );
6473 Vec_IntFree(
p->vTt2Obj );
6474 Vec_IntFree(
p->vObj2Tt );
6475 Vec_IntFree(
p->vCoLits );
#define ABC_SWAP(Type, a, b)
#define ABC_FALLOC(type, num)
int * Abc_MergeSortCost(int *pCosts, int nSize)
#define ABC_ALLOC(type, num)
#define ABC_INFINITY
MACRO DEFINITIONS ///.
unsigned Abc_Random(int fReset)
void Abc_QuickSort3(word *pData, int nSize, int fDecrease)
#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 ///.
Gia_Man_t * Gia_ManCorrReduce(Gia_Man_t *p)
int Cec_ManLSCorrespondenceClasses(Gia_Man_t *pAig, Cec_ParCor_t *pPars)
struct Cec_ParCor_t_ Cec_ParCor_t
int Gia_ManTestChoices(Gia_Man_t *p)
Bnd_Man_t * pBnd
DECLARATIONS ///.
Gia_Man_t * Gia_ManDup(Gia_Man_t *p)
int Gia_ManCountMark1Dfs(Gia_Man_t *p, int iObj)
Gia_Man_t * Gia_ManDupAppendCones(Gia_Man_t *p, Gia_Man_t **ppCones, int nCones, int fOnlyRegs)
int Gia_ManCountMark0Dfs_rec(Gia_Man_t *p, int iObj)
Gia_Man_t * Gia_ManDupUif(Gia_Man_t *p)
Gia_Man_t * Gia_ManPermuteInputs(Gia_Man_t *p, int nPpis, int nExtra)
void Gia_ManDupRebuild(Gia_Man_t *pNew, Gia_Man_t *p, Vec_Int_t *vLits, int fBufs)
void Gia_ManDupAppendShare(Gia_Man_t *pNew, Gia_Man_t *pTwo)
void Gia_ManCofClassEnum(Gia_Man_t *p, int nVars)
Gia_Man_t * Gia_ManDupFlopClass(Gia_Man_t *p, int iClass)
Gia_Man_t * Gia_ManDupDfsCiMap(Gia_Man_t *p, int *pCi2Lit, Vec_Int_t *vLits)
void Gia_ManDupChoicesAdd(Gia_ChMan_t *p, Gia_Man_t *pGia)
void Gia_ManSetMark0Dfs_rec(Gia_Man_t *p, int iObj)
int Gia_ManDupUifConstr(Gia_Man_t *pNew, Gia_Man_t *p, Vec_Wec_t **pvMap, int nTypes)
int Gia_ManPoIsToRemove(Gia_Man_t *p, Gia_Obj_t *pObj, int Value)
void Gia_ManDupDfs_rec(Gia_Man_t *pNew, Gia_Man_t *p, Gia_Obj_t *pObj)
Gia_Man_t * Gia_ManDupPiPerm(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupFlip(Gia_Man_t *p, int *pInitState)
int Gia_ManDupOrderDfs_rec(Gia_Man_t *pNew, Gia_Man_t *p, Gia_Obj_t *pObj)
Gia_Man_t * Gia_ManDupWithAttributes(Gia_Man_t *p)
Vec_Int_t * Gia_ManMarkPointed(Gia_Man_t *p, Vec_Int_t *vCut, Vec_Int_t *vInner)
Gia_Man_t * Gia_ManIsoStrashReduce2(Gia_Man_t *p, Vec_Ptr_t **pvPosEquivs, int fVerbose)
Gia_Man_t * Gia_ManDupCofs(Gia_Man_t *p, Vec_Int_t *vVarNums)
Gia_Man_t * Gia_ManDupWindow(Gia_Man_t *p, Vec_Int_t *vCut)
int Gia_ManDupConeBackObjs(Gia_Man_t *p, Gia_Man_t *pNew, Vec_Int_t *vObjs)
Gia_Man_t * Gia_ManDupTrimmed(Gia_Man_t *p, int fTrimCis, int fTrimCos, int fDualOut, int OutValue)
Gia_Man_t * Gia_ManDupDfsCone(Gia_Man_t *p, Gia_Obj_t *pRoot)
Gia_Man_t * Gia_ManDupDfsClasses(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupOuts(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupAndConesLimit2(Gia_Man_t *p, int *pAnds, int nAnds, int Level)
Gia_Man_t * Gia_ManDupWithNewPo(Gia_Man_t *p1, Gia_Man_t *p2)
int Gia_ManDemiterTwoWords(Gia_Man_t *p, Gia_Man_t **pp0, Gia_Man_t **pp1)
void Gia_ManSeqEquivDivide(Gia_Man_t *p, Cec_ParCor_t *pPars)
Gia_Man_t * Gia_ManDupLastPis(Gia_Man_t *p, int nLastPis)
int Gia_ManDemiterDual(Gia_Man_t *p, Gia_Man_t **pp0, Gia_Man_t **pp1)
Gia_Man_t * Gia_ManDupMiterCones(Gia_Man_t *p, Vec_Int_t *vPairs)
Gia_Man_t * Gia_ManDupRemovePis(Gia_Man_t *p, int nRemPis)
Gia_Man_t * Gia_ManDupOutputGroup(Gia_Man_t *p, int iOutStart, int iOutStop)
Gia_Man_t * Gia_ManDupTimes(Gia_Man_t *p, int nTimes)
Gia_Man_t * Gia_ManDupZero(Gia_Man_t *p)
Gia_Man_t * Gia_ManTransformMiter(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupUniv(Gia_Man_t *p, int iVar)
void Gia_ManReorderChoices_rec(Gia_Man_t *pNew, Gia_Man_t *p, Gia_Obj_t *pObj)
int Gia_ManCoLargestSupp(Gia_Man_t *p, Vec_Wec_t *vSupps)
Vec_Ptr_t * Gia_ManMiterNames(Vec_Ptr_t *p, int nOuts)
Gia_Man_t * Gia_ManDupPermFlopGap(Gia_Man_t *p, Vec_Int_t *vFfMask)
Vec_Int_t * Gia_ManCofPattern(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupOneHot(Gia_Man_t *p)
int Gia_ManIsoStrashReduceOne(Gia_Man_t *pNew, Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vSupp)
Gia_Man_t * Gia_ManDupStrashReduce(Gia_Man_t *p, Vec_Wec_t *vSupps, Vec_Int_t **pvCoMap)
Vec_Int_t * Gia_ManDupBlackBoxBuildMap(Gia_Man_t *p)
Gia_Man_t * Gia_ManDup2(Gia_Man_t *p1, Gia_Man_t *p2)
Gia_Man_t * Gia_ManDupAndCare(Gia_Man_t *p, Gia_Man_t *pCare)
void Gia_ManCofClassRand(Gia_Man_t *p, int nVars, int nRands)
Gia_Man_t * Gia_ManDupInvMiter(Gia_Man_t *p, Gia_Man_t *pInv)
void Gia_ManPrintChoices(Gia_Man_t *p)
void Gia_ManCollectDfs_rec(Gia_Man_t *p, int iObj, Vec_Int_t *vNodes)
Gia_Man_t * Gia_ManDupCofactorVar(Gia_Man_t *p, int iVar, int Value)
void Gia_ManDupRemapEquiv(Gia_Man_t *pNew, Gia_Man_t *p)
Vec_Int_t * Gia_ManDupUifBoxTypes(Vec_Int_t *vBarBufs)
Gia_Man_t * Gia_ManDupChoicesFinish(Gia_ChMan_t *p)
Gia_Man_t * Gia_ManDupMux(int iVar, Gia_Man_t *pCof1, Gia_Man_t *pCof0)
void Gia_ManDupCones_rec(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Ptr_t *vLeaves, Vec_Ptr_t *vNodes, Vec_Ptr_t *vRoots)
Gia_Man_t * Gia_ManBoundaryMiter(Gia_Man_t *p1, Gia_Man_t *p2, int fVerbose)
int Gia_ManDupDemiterFindMin(Vec_Wec_t *vSupps, Vec_Int_t *vTakenIns, Vec_Int_t *vTakenOuts)
Gia_Man_t * Gia_ManDupPermFlop(Gia_Man_t *p, Vec_Int_t *vFfPerm)
Gia_Man_t * Gia_ManDupTrimmed3(Gia_Man_t *p)
int Gia_ObjWhichFanout(Gia_Man_t *p, int iFanin, int iFanout)
Gia_Man_t * Gia_ManPairWiseMiter(Gia_Man_t *p)
Vec_Int_t * Gia_ManCollectReach(Gia_Man_t *p, int fOdd)
Vec_Int_t * Gia_ManCollectTopXors(Gia_Man_t *p)
Gia_Man_t * Gia_ManChoiceMiter(Vec_Ptr_t *vGias)
Gia_Man_t * Gia_ManDupBlock(Gia_Man_t *p, int nBlock)
int Gia_ManDupUifConstrOne(Gia_Man_t *pNew, Gia_Man_t *p, Vec_Int_t *vVec0, Vec_Int_t *vVec1)
Gia_Man_t * Gia_ManIsoStrashReduce(Gia_Man_t *p, Vec_Ptr_t **pvPosEquivs, int fVerbose)
Vec_Int_t * Gia_ManCreatePerm(int n)
Gia_Man_t * Gia_ManDupWithConstr(Gia_Man_t *p)
int Gia_ManSortByValue(Gia_Obj_t **pp1, Gia_Obj_t **pp2)
int Gia_ManDupChoicesMark_rec(Gia_Man_t *pGia, int iObj, Vec_Int_t *vObj2Tt, int iFunc)
Gia_Man_t * Gia_ManDupPerm(Gia_Man_t *p, Vec_Int_t *vPiPerm)
void Gia_ManDupChoicesNode(Gia_ChMan_t *p, Gia_Man_t *pGia, int iObj)
void Gia_ManSetMark1Dfs_rec(Gia_Man_t *p, int iObj)
Vec_Wec_t * Gia_ManCreateCoSupps(Gia_Man_t *p, int fVerbose)
Gia_Man_t * Gia_ManDupExist(Gia_Man_t *p, int iVar)
int Gia_ManDupHashDfs_rec(Gia_Man_t *pNew, Gia_Man_t *p, Gia_Obj_t *pObj)
Gia_Man_t * Gia_ManDupMarked(Gia_Man_t *p)
void Gia_ManDupOrderDfsChoices_rec(Gia_Man_t *pNew, Gia_Man_t *p, Gia_Obj_t *pObj)
Gia_Man_t * Gia_ManDupHalfSeq(Gia_Man_t *p, int fSecond)
Gia_Man_t * Gia_ManScorrDivideTest(Gia_Man_t *p, Cec_ParCor_t *pPars)
Gia_Man_t * Gia_ManDupDfsSkip(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupCofactorObj(Gia_Man_t *p, int iObj, int Value)
Gia_Man_t * Gia_ManDupAndConesLimit(Gia_Man_t *p, int *pAnds, int nAnds, int Level)
int Gia_ManDecideWhereToAdd(Gia_Man_t *p, Vec_Int_t *vPart[2], Gia_Obj_t *pFan[2])
void Gia_ManDupRemapLiterals(Vec_Int_t *vLits, Gia_Man_t *p)
FUNCTION DEFINITIONS ///.
Vec_Wec_t * Gia_ManCreateNodeSupps(Gia_Man_t *p, Vec_Int_t *vNodes, int fVerbose)
void Gia_ManSeqEquivMerge(Gia_Man_t *p, Gia_Man_t *pPart[2])
int Gia_ManMiter_rec(Gia_Man_t *pNew, Gia_Man_t *p, Gia_Obj_t *pObj)
Gia_Man_t * Gia_ManDupOnsetOffset(Gia_Man_t *p)
int Gia_ManDupChoicesMark(Gia_Man_t *pGia, int iLit0, int iLit1, Vec_Int_t *vObj2Tt, int iFunc)
Gia_Man_t * Gia_ManDupOdc(Gia_Man_t *p, int iObj, int fVerbose)
Gia_Man_t * Gia_ManDupMap(Gia_Man_t *p, Vec_Int_t *vMap)
Gia_Man_t * Gia_ManDupFromVecs(Gia_Man_t *p, Vec_Int_t *vCis, Vec_Int_t *vAnds, Vec_Int_t *vCos, int nRegs)
void Gia_ManPrintRepr(Gia_Man_t *p)
Gia_Man_t * Gia_ManTransformTwoWord2DualOutput(Gia_Man_t *p)
Gia_Man_t * Gia_ManMiter2(Gia_Man_t *pStart, char *pInit, int fVerbose)
void Gia_ManDupRemapCos(Gia_Man_t *pNew, Gia_Man_t *p)
void Gia_ManDupCofactorVar_rec(Gia_Man_t *pNew, Gia_Man_t *p, Gia_Obj_t *pObj)
Gia_Man_t * Gia_ManDupEncode(Gia_Man_t *p, Vec_Int_t *vVarNums, int fVerbose)
Gia_Man_t * Gia_ManDupCones(Gia_Man_t *p, int *pPos, int nPos, int fTrimPis)
Gia_Man_t * Gia_ManDupAddFlop(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupDfsNode(Gia_Man_t *p, Gia_Obj_t *pRoot)
void Gia_ManDupDfsRehash_rec(Gia_Man_t *pNew, Gia_Man_t *p, Gia_Obj_t *pObj)
Vec_Wec_t * Gia_ManIsoStrashReduceInt(Gia_Man_t *p, Vec_Wec_t *vSupps, int fVerbose)
Gia_Man_t * Gia_ManTransformDualOutput(Gia_Man_t *p)
Vec_Int_t * Gia_ManDupChoicesCreateSibls(Gia_ChMan_t *p)
Gia_Man_t * Gia_ManDupNoBuf(Gia_Man_t *p)
Gia_Man_t * Gia_ManTransformMiter2(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupAddPis(Gia_Man_t *p, int nMulti)
void Gia_ManDupWithConstrCollectAnd_rec(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vSuper, int fFirst)
int Gia_ManDupDfs2_rec(Gia_Man_t *pNew, Gia_Man_t *p, Gia_Obj_t *pObj)
Gia_Man_t * Gia_ManDupDfs(Gia_Man_t *p)
void Gia_ManDupRemapCis(Gia_Man_t *pNew, Gia_Man_t *p)
void Gia_ManDupDfs3_rec(Gia_Man_t *pNew, Gia_Man_t *p, Gia_Obj_t *pObj)
Vec_Int_t * Gia_ManSortCoBySuppSize(Gia_Man_t *p, Vec_Wec_t *vSupps)
Gia_Man_t * Gia_ManDupAbs(Gia_Man_t *p, Vec_Int_t *vMapPpi2Ff, Vec_Int_t *vMapFf2Ppi)
Gia_Man_t * Gia_ManDupAndOr(Gia_Man_t *p, int nOuts, int fUseOr, int fCompl)
int Gia_ManDupOrderDfs2_rec(Gia_Man_t *pNew, Gia_Man_t *p, Gia_Obj_t *pObj)
void Gia_ManDupDemiterOrderXors(Gia_Man_t *p, Vec_Int_t *vXors)
void Gia_ManDupCleanDfs_rec(Gia_Obj_t *pObj)
void Gia_ManCycle(Gia_Man_t *p, Abc_Cex_t *pCex, int nFrames)
Gia_Man_t * Gia_ManDupOntop(Gia_Man_t *p, Gia_Man_t *p2)
Gia_Man_t * Gia_ManDupTopAnd(Gia_Man_t *p, int fVerbose)
Vec_Int_t * Gia_ManCollectOneSide(Gia_Man_t *p, int iSide)
Vec_Int_t * Gia_ManDupTrimmedNonZero(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupSelf(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupDemiter(Gia_Man_t *p, int fVerbose)
void Gia_ManDupConeBack_rec(Gia_Man_t *pNew, Gia_Man_t *p, Gia_Obj_t *pObj)
Gia_Man_t * Gia_ManDupWithConstraints(Gia_Man_t *p, Vec_Int_t *vPoTypes)
Gia_Man_t * Gia_ManDupSelectedOutputs(Gia_Man_t *p, Vec_Int_t *vOutsLeft)
Gia_Man_t * Gia_ManDupOrderDfsChoices(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupLevelized(Gia_Man_t *p)
void Gia_ManCollectTopXors_rec(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vXors)
void Gia_ManProdAdderGen(int nArgA, int nArgB, int Seed, int fSigned, int fCla)
void Gia_ManCollectOneSide_rec(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vNodes)
Gia_Man_t * Gia_ManDupAddBufs(Gia_Man_t *p)
Gia_Man_t * Gia_ManMiterInverse(Gia_Man_t *pBot, Gia_Man_t *pTop, int fDualOut, int fVerbose)
Gia_Man_t * Gia_ManTransformToDual(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupTrimmed2(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupConeSupp(Gia_Man_t *p, int iLit, Vec_Int_t *vCiIds)
int Gia_ManCountMark0Dfs(Gia_Man_t *p, int iObj)
Vec_Wec_t ** Gia_ManDupUifBuildMap(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupOutputVec(Gia_Man_t *p, Vec_Int_t *vOutPres)
Gia_Man_t * Gia_ManDupSpreadFlop(Gia_Man_t *p, Vec_Int_t *vFfMask)
Gia_Man_t * Gia_ManDupDfs2(Gia_Man_t *p)
Vec_Int_t * Gia_ManCollectReach2(Gia_Man_t *p, int fSecond)
void Gia_ManDupAppend(Gia_Man_t *pNew, Gia_Man_t *pTwo)
void Gia_ManDupAndConesLimit2_rec(Gia_Man_t *pNew, Gia_Man_t *p, int iObj, int Level)
int Gia_ManCountMark1Dfs_rec(Gia_Man_t *p, int iObj)
Gia_Man_t * Gia_ManDupZeroUndc(Gia_Man_t *p, char *pInit, int nNewPis, int fGiaSimple, int fVerbose)
Gia_Man_t * Gia_ManDupBlackBox(Gia_Man_t *p)
void Gia_ManHighLightFlopLogic(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupOrderAiger(Gia_Man_t *p)
void Gia_ManDupDemiterOrderXors2(Gia_Man_t *p, Vec_Int_t *vXors)
void Gia_ManDupAndConesLimit_rec(Gia_Man_t *pNew, Gia_Man_t *p, int iObj, int Level)
Gia_Man_t * Gia_ManDemiterToDual(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupReplaceCut(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupAppendNew(Gia_Man_t *pOne, Gia_Man_t *pTwo)
Vec_Int_t * Gia_ManCofClassPattern(Gia_Man_t *p, Vec_Int_t *vVarNums, int fVerbose)
Gia_Man_t * Gia_ManDupDfsOnePo(Gia_Man_t *p, int iPo)
Gia_Man_t * Gia_ManDupFanouts(Gia_Man_t *p)
void Gia_ManDupConeSupp_rec(Gia_Man_t *pNew, Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vObjs)
int Gia_ManCoSuppSizeMax(Gia_Man_t *p, Vec_Wec_t *vSupps)
Gia_Man_t * Gia_ManReorderChoices(Gia_Man_t *p)
int Gia_ManDupConeBack(Gia_Man_t *p, Gia_Man_t *pNew, Vec_Int_t *vCiIds)
int Gia_ManChoiceMiter_rec(Gia_Man_t *pNew, Gia_Man_t *p, Gia_Obj_t *pObj)
Gia_Man_t * Gia_ManDupTopAnd_iter(Gia_Man_t *p, int fVerbose)
Gia_Man_t * Gia_ManDupOrderDfsReverse(Gia_Man_t *p, int fRevFans, int fRevOuts)
Gia_Man_t * Gia_ManDupDfsLitArray(Gia_Man_t *p, Vec_Int_t *vLits)
Vec_Int_t * Gia_ManMarkSupported(Gia_Man_t *p, Vec_Int_t *vObjs)
Gia_Man_t * Gia_ManOneHot(int nSkips, int nVars)
int Gia_ObjCompareByCioId(Gia_Obj_t **pp1, Gia_Obj_t **pp2)
Gia_Man_t * Gia_ManDupOrderDfs(Gia_Man_t *p)
Vec_Wec_t * Gia_ManCollectIntTfos(Gia_Man_t *p, Vec_Int_t *vVarNums)
Gia_Man_t * Gia_ManMiter(Gia_Man_t *p0, Gia_Man_t *p1, int nInsDup, int fDualOut, int fSeq, int fImplic, int fVerbose)
void Gia_ManPrintEquivs(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupAndCones(Gia_Man_t *p, int *pAnds, int nAnds, int fTrimPis)
Gia_Man_t * Gia_ManDupSliced(Gia_Man_t *p, int nSuppMax)
Gia_Man_t * Gia_ManDupCycled(Gia_Man_t *p, Abc_Cex_t *pCex, int nFrames)
Gia_Man_t * Gia_ManDupRandPerm(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupWithCare(Gia_Man_t *p, Gia_Man_t *pCare)
Gia_ChMan_t * Gia_ManDupChoicesStart(Gia_Man_t *pGia)
Gia_Man_t * Gia_ManDupExist2(Gia_Man_t *p, int iVar)
Gia_Man_t * Gia_ManImplFromBMiter(Gia_Man_t *p, int nPo, int nBInput)
Gia_Man_t * Gia_ManDupDfsRehash(Gia_Man_t *p)
Vec_Int_t * Gia_GenDecoder(Gia_Man_t *p, int *pLits, int nLits)
struct Gia_Rpr_t_ Gia_Rpr_t
void Gia_ManStop(Gia_Man_t *p)
#define Gia_ManForEachRo(p, pObj, i)
void Gia_ManStaticFanoutStart(Gia_Man_t *p)
void Gia_ManHashStart(Gia_Man_t *p)
int Gia_ManSuppSize(Gia_Man_t *p, int *pNodes, int nNodes)
void Gia_ManStaticFanoutStop(Gia_Man_t *p)
int Gia_ManHasDangling(Gia_Man_t *p)
#define Gia_ManForEachPo(p, pObj, i)
int Gia_ManIsNormalized(Gia_Man_t *p)
#define Gia_ManForEachAnd(p, pObj, i)
#define Gia_ManForEachConst(p, i)
#define Gia_ManForEachCoReverse(p, pObj, i)
void Gia_ManSetRegNum(Gia_Man_t *p, int nRegs)
#define Gia_ManForEachCoDriverId(p, DriverId, i)
int Gia_ManHashAndMulti(Gia_Man_t *p, Vec_Int_t *vLits)
int * Gia_ManDeriveNexts(Gia_Man_t *p)
void Gia_ManCollectTfo(Gia_Man_t *p, Vec_Int_t *vRoots, Vec_Int_t *vNodes)
void Bnd_ManMap(int iLit, int id, int spec)
void Gia_ManHashAlloc(Gia_Man_t *p)
void Gia_ManPrintStatsShort(Gia_Man_t *p)
#define Gia_ClassForEachObj1(p, i, iObj)
#define Gia_ManForEachPi(p, pObj, i)
#define Gia_ManForEachCiVec(vVec, p, pObj, i)
Gia_Man_t * Gia_ManStart(int nObjsMax)
FUNCTION DEFINITIONS ///.
#define Gia_ManForEachObjVecStart(vVec, p, pObj, i, Start)
int Gia_ManHashOr(Gia_Man_t *p, int iLit0, int iLit1)
struct Gia_Obj_t_ Gia_Obj_t
int Gia_ManHashXor(Gia_Man_t *p, int iLit0, int iLit1)
#define Gia_ClassForEachObj(p, i, iObj)
void Gia_ManFillValue(Gia_Man_t *p)
struct Gia_Man_t_ Gia_Man_t
#define Gia_ManForEachObj1(p, pObj, i)
#define Gia_ManForEachObjVec(vVec, p, pObj, i)
int Gia_ManHashMux(Gia_Man_t *p, int iCtrl, int iData1, int iData0)
#define Gia_ManForEachClass(p, i)
Gia_Man_t * Gia_ManCleanup(Gia_Man_t *p)
void Gia_ManCleanMark0(Gia_Man_t *p)
Gia_Man_t * Gia_ManSeqStructSweep(Gia_Man_t *p, int fConst, int fEquiv, int fVerbose)
struct Bnd_Man_t_ Bnd_Man_t
int Gia_ObjRecognizeExor(Gia_Obj_t *pObj, Gia_Obj_t **ppFan0, Gia_Obj_t **ppFan1)
void Gia_ManCreateRefs(Gia_Man_t *p)
struct Gia_ChMan_t_ Gia_ChMan_t
Gia_Man_t * Gia_ManDupNormalize(Gia_Man_t *p, int fHashMapping)
int Gia_ManHashAnd(Gia_Man_t *p, int iLit0, int iLit1)
void Gia_ManIncrementTravId(Gia_Man_t *p)
#define Gia_ObjForEachFanoutStaticId(p, Id, FanId, i)
#define Gia_ManForEachObj(p, pObj, i)
MACRO DEFINITIONS ///.
#define Gia_ManForEachCo(p, pObj, i)
#define Gia_ManForEachCi(p, pObj, i)
#define Gia_ManForEachRiRo(p, pObjRi, pObjRo, i)
void Gia_ManSetPhase(Gia_Man_t *p)
void Gia_ManHashStop(Gia_Man_t *p)
void Gia_ManCleanMark01(Gia_Man_t *p)
int Gia_ManLevelNum(Gia_Man_t *p)
void Gia_ManTransferMapping(Gia_Man_t *p, Gia_Man_t *pGia)
unsigned Gia_ManRandom(int fReset)
FUNCTION DEFINITIONS ///.
void Gia_ManMarkFanoutDrivers(Gia_Man_t *p)
void Gia_ManTransferPacking(Gia_Man_t *p, Gia_Man_t *pGia)
#define Gia_ManForEachRi(p, pObj, i)
Gia_Man_t * Gia_ManSeqCleanup(Gia_Man_t *p)
#define Gia_ManForEachCiId(p, Id, i)
void Gia_AigerWrite(Gia_Man_t *p, char *pFileName, int fWriteSymbols, int fCompact, int fWriteNewLine)
void Gia_ManCollectAnds(Gia_Man_t *p, int *pNodes, int nNodes, Vec_Int_t *vNodes, Vec_Int_t *vLeaves)
unsigned __int64 word
DECLARATIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Tim_Man_t_ Tim_Man_t
INCLUDES ///.
Tim_Man_t * Tim_ManDup(Tim_Man_t *p, int fUnitDelay)
Abc_Cex_t * Abc_CexDup(Abc_Cex_t *p, int nRegsNew)
typedefABC_NAMESPACE_HEADER_START struct Abc_Cex_t_ Abc_Cex_t
INCLUDES ///.
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_IntForEachEntryTwo(vVec1, vVec2, Entry1, Entry2, i)
#define Vec_IntForEachEntryStart(vVec, Entry, i, Start)
#define Vec_PtrForEachEntryStart(Type, vVec, pEntry, i, Start)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntryDouble(Type1, Type2, vVec, Entry1, Entry2, i)
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
#define Vec_WecForEachLevel(vGlob, vVec, i)
MACRO DEFINITIONS ///.
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 ///.
void Wlc_BlastReduceMatrix(Gia_Man_t *pNew, Vec_Wec_t *vProds, Vec_Wec_t *vLevels, Vec_Int_t *vRes, int fSigned, int fCla)
Gia_Man_t * Cec4_ManSimulateTest3(Gia_Man_t *p, int nBTLimit, int fVerbose)