31#define NUMBER1 3716960521u
32#define NUMBER2 2174103536u
52 static unsigned int m_z =
NUMBER1;
53 static unsigned int m_w =
NUMBER2;
55 static __thread
unsigned int m_z =
NUMBER1;
56 static __thread
unsigned int m_w =
NUMBER2;
63 m_z = 36969 * (m_z & 65535) + (m_z >> 16);
64 m_w = 18000 * (m_w & 65535) + (m_w >> 16);
65 return (m_z << 16) + m_w;
90 for ( w = iWordStart; w < iWordStop; w++ )
108 static char Buffer[100];
113 TimeStamp = asctime( localtime( <ime ) );
114 TimeStamp[
strlen(TimeStamp) - 1 ] = 0;
115 strcpy( Buffer, TimeStamp );
132 static char Buffer[1000];
135 if ( (pDot =
strrchr( Buffer,
'.' )) )
137 strcat( Buffer, pSuffix );
138 if ( (pDot =
strrchr( Buffer,
'\\' )) || (pDot =
strrchr( Buffer,
'/' )) )
160 vNames = Vec_PtrAlloc( nNames );
161 for ( i = 0; i < nNames; i++ )
165 Buffer[0] = (fCaps ?
'A' :
'a') + i;
170 Buffer[0] = (fCaps ?
'A' :
'a') + i%26;
171 Buffer[1] =
'0' + i/26;
192 if (
p->pTravIds == NULL )
194 p->nTravIdsAlloc = Gia_ManObjNum(
p) + 100;
198 while (
p->nTravIdsAlloc < Gia_ManObjNum(
p) )
200 p->nTravIdsAlloc *= 2;
202 memset(
p->pTravIds +
p->nTravIdsAlloc/2, 0,
sizeof(
int) *
p->nTravIdsAlloc/2 );
354 for ( i = 0; i <
p->nObjs; i++ )
355 p->pObjs[i].Value = 0;
372 for ( i = 0; i <
p->nObjs; i++ )
373 p->pObjs[i].Value = ~0;
389 if ( Gia_ObjIsAnd(pObj) )
391 int fPhase0 = Gia_ObjPhase(Gia_ObjFanin0(pObj)) ^ Gia_ObjFaninC0(pObj);
392 int fPhase1 = Gia_ObjPhase(Gia_ObjFanin1(pObj)) ^ Gia_ObjFaninC1(pObj);
393 if ( Gia_ObjIsMux(
p, pObj) )
395 int fPhase2 = Gia_ObjPhase(Gia_ObjFanin2(
p, pObj)) ^ Gia_ObjFaninC2(
p, pObj);
396 pObj->
fPhase = (fPhase2 && fPhase1) || (!fPhase2 && fPhase0);
398 else if ( Gia_ObjIsXor(pObj) )
399 pObj->
fPhase = fPhase0 ^ fPhase1;
401 pObj->
fPhase = fPhase0 & fPhase1;
403 else if ( Gia_ObjIsCo(pObj) )
404 pObj->
fPhase = (Gia_ObjPhase(Gia_ObjFanin0(pObj)) ^ Gia_ObjFaninC0(pObj));
431 assert( Gia_ManCiNum(
p) == Vec_IntSize(vCiValues) );
433 if ( Gia_ObjIsCi(pObj) )
434 pObj->
fPhase = Vec_IntEntry( vCiValues, Gia_ObjCioId(pObj) );
457 if ( !Gia_ObjIsCi(pObj) )
513 if (
p->vLevels == NULL )
514 p->vLevels = Vec_IntAlloc( Size );
515 Vec_IntFill(
p->vLevels, Size, 0 );
530 if (
p->vTruths == NULL )
531 p->vTruths = Vec_IntAlloc( Gia_ManObjNum(
p) );
532 Vec_IntFill(
p->vTruths, Gia_ManObjNum(
p), -1 );
554 if ( !
p->fGiaSimple && Gia_ObjIsBuf(pObj) )
555 Gia_ObjSetBufLevel(
p, pObj );
556 else if ( Gia_ObjIsAnd(pObj) )
557 Gia_ObjSetGateLevel(
p, pObj );
558 else if ( Gia_ObjIsCo(pObj) )
559 Gia_ObjSetCoLevel(
p, pObj );
561 Gia_ObjSetLevel(
p, pObj, 0 );
562 p->nLevels = Abc_MaxInt(
p->nLevels, Gia_ObjLevel(
p, pObj) );
574 if ( !
p->fGiaSimple && Gia_ObjIsBuf(pObj) )
575 Gia_ObjUpdateLevelId(
p, Gia_ObjFaninId0(pObj, i), Gia_ObjLevel(
p, pObj) );
576 else if ( Gia_ObjIsAnd(pObj) )
578 Gia_ObjUpdateLevelId(
p, Gia_ObjFaninId0(pObj, i), 1+Gia_ObjLevel(
p, pObj) );
579 Gia_ObjUpdateLevelId(
p, Gia_ObjFaninId1(pObj, i), 1+Gia_ObjLevel(
p, pObj) );
581 else if ( Gia_ObjIsCo(pObj) )
582 Gia_ObjUpdateLevelId(
p, Gia_ObjFaninId0(pObj, i), 1 );
584 p->nLevels = Abc_MaxInt(
p->nLevels, Gia_ObjLevel(
p, pObj) );
594 Ave += Gia_ObjLevel(
p, pObj);
595 return (
float)Ave / Gia_ManCoNum(
p);
614 if (
p->vLevels == NULL )
616 vCiLevels = Vec_IntAlloc( Gia_ManCiNum(
p) );
618 Vec_IntPush( vCiLevels, Gia_ObjLevel(
p, pObj) );
625 if ( vCiLevels == NULL )
627 assert( Vec_IntSize(vCiLevels) == Gia_ManCiNum(
p) );
632 Gia_ObjSetLevel(
p, pObj, Vec_IntEntry(vCiLevels, i) );
633 p->nLevels = Abc_MaxInt(
p->nLevels, Gia_ObjLevel(
p, pObj) );
637 if ( Gia_ObjIsAnd(pObj) )
638 Gia_ObjSetGateLevel(
p, pObj );
639 else if ( Gia_ObjIsCo(pObj) )
640 Gia_ObjSetCoLevel(
p, pObj );
642 p->nLevels = Abc_MaxInt(
p->nLevels, Gia_ObjLevel(
p, pObj) );
663 vLevelRev = Vec_IntStart( Gia_ManObjNum(
p) );
666 int LevelR = Vec_IntEntry( vLevelRev, i );
667 if ( Gia_ObjIsMux(
p, pObj) )
669 Vec_IntUpdateEntry( vLevelRev, Gia_ObjFaninId0(pObj, i), LevelR + 2 );
670 Vec_IntUpdateEntry( vLevelRev, Gia_ObjFaninId1(pObj, i), LevelR + 2 );
671 Vec_IntUpdateEntry( vLevelRev, Gia_ObjFaninId2(
p, i), LevelR + 2 );
673 else if ( Gia_ObjIsXor(pObj) )
675 Vec_IntUpdateEntry( vLevelRev, Gia_ObjFaninId0(pObj, i), LevelR + 2 );
676 Vec_IntUpdateEntry( vLevelRev, Gia_ObjFaninId1(pObj, i), LevelR + 2 );
678 else if ( Gia_ObjIsBuf(pObj) )
680 Vec_IntUpdateEntry( vLevelRev, Gia_ObjFaninId0(pObj, i), LevelR );
684 Vec_IntUpdateEntry( vLevelRev, Gia_ObjFaninId0(pObj, i), LevelR + 1 );
685 Vec_IntUpdateEntry( vLevelRev, Gia_ObjFaninId1(pObj, i), LevelR + 1 );
709 LevelMax = Abc_MaxInt( LevelMax, Vec_IntEntry(vRequired, Gia_ObjId(
p, pObj)) );
711 Vec_IntWriteEntry( vRequired, i, LevelMax - Vec_IntEntry(vRequired, i) );
731 Vec_Int_t * vSlacks = Vec_IntAlloc( Gia_ManObjNum(
p) );
733 Vec_IntPush( vSlacks, nLevels - Gia_ObjLevelId(
p, i) - Vec_IntEntry(vLevelR, i) );
734 assert( Vec_IntSize(vSlacks) == Gia_ManObjNum(
p) );
735 Vec_IntFree( vLevelR );
757 if ( Gia_ObjIsAnd(pObj) )
759 Gia_ObjFanin0(pObj)->Value++;
760 if ( !Gia_ObjIsBuf(pObj) )
761 Gia_ObjFanin1(pObj)->Value++;
763 else if ( Gia_ObjIsCo(pObj) )
764 Gia_ObjFanin0(pObj)->Value++;
787 if ( Gia_ObjIsAnd(pObj) )
789 Gia_ObjRefFanin0Inc(
p, pObj );
790 if ( !Gia_ObjIsBuf(pObj) )
791 Gia_ObjRefFanin1Inc(
p, pObj );
792 if ( Gia_ObjIsMuxId(
p, i) )
793 Gia_ObjRefFanin2Inc(
p, pObj );
795 else if ( Gia_ObjIsCo(pObj) )
796 Gia_ObjRefFanin0Inc(
p, pObj );
807 if ( Gia_ObjIsAnd(pObj) )
809 p->pRefs[Gia_ObjFaninLit0(pObj, i)]++;
810 p->pRefs[Gia_ObjFaninLit1(pObj, i)]++;
812 else if ( Gia_ObjIsCo(pObj) )
813 p->pRefs[Gia_ObjFaninLit0(pObj, i)]++;
830 Gia_Obj_t * pObj, * pCtrl, * pFan0, * pFan1;
840 pMuxRefs[ Gia_ObjId(
p, Gia_Regular(pCtrl)) ]++;
858 Vec_Int_t * vNodes = Vec_IntAlloc( Gia_ManObjNum(
p) );
865 Vec_IntPush( vNodes, Gia_ObjId(
p, pObj) );
866 Vec_VecFree( vLevels );
872 if ( Gia_ObjIsTravIdCurrent(
p, pObj) )
874 Gia_ObjSetTravIdCurrent(
p, pObj);
875 if ( Gia_ObjIsCi(pObj) )
877 Vec_IntPush( vNodes, Gia_ObjId(
p, pObj) );
880 if ( Gia_ObjIsCo(pObj) )
882 Gia_ObjFanin0(pObj)->Value++;
884 Vec_IntPush( vNodes, Gia_ObjId(
p, pObj) );
887 assert( Gia_ObjIsAnd(pObj) );
888 Gia_ObjFanin0(pObj)->Value++;
889 Gia_ObjFanin1(pObj)->Value++;
892 Vec_IntPush( vNodes, Gia_ObjId(
p, pObj) );
900 vNodes = Vec_IntAlloc( Gia_ManObjNum(
p) );
905 if ( !Gia_ObjIsConst0(Gia_ObjFanin0(pObj)) )
911 if ( !Gia_ObjIsConst0(Gia_ObjFanin0(pObj)) )
920 int i, nCutCur = 0, nCutMax = 0;
927 if ( nCutMax < nCutCur )
929 if ( Gia_ObjIsAnd(pObj) )
931 if ( --Gia_ObjFanin0(pObj)->Value == 0 )
933 if ( --Gia_ObjFanin1(pObj)->Value == 0 )
936 else if ( Gia_ObjIsCo(pObj) )
938 if ( --Gia_ObjFanin0(pObj)->Value == 0 )
942 Vec_IntFree( vNodes );
964 vStart = Vec_IntAlloc( Gia_ManPoNum(
p) );
966 Vec_IntPush( vStart, Entry );
986 assert( !Gia_IsComplement(pNode) );
988 if ( !Gia_ObjIsAnd(pNode) || Gia_ObjIsBuf(pNode) )
991 if ( !Gia_ObjFaninC0(pNode) || !Gia_ObjFaninC1(pNode) )
994 pNode0 = Gia_ObjFanin0(pNode);
995 pNode1 = Gia_ObjFanin1(pNode);
997 if ( !Gia_ObjIsAnd(pNode0) || !Gia_ObjIsAnd(pNode1) )
1000 return (Gia_ObjFanin0(pNode0) == Gia_ObjFanin0(pNode1) && (Gia_ObjFaninC0(pNode0) ^ Gia_ObjFaninC0(pNode1))) ||
1001 (Gia_ObjFanin0(pNode0) == Gia_ObjFanin1(pNode1) && (Gia_ObjFaninC0(pNode0) ^ Gia_ObjFaninC1(pNode1))) ||
1002 (Gia_ObjFanin1(pNode0) == Gia_ObjFanin0(pNode1) && (Gia_ObjFaninC1(pNode0) ^ Gia_ObjFaninC0(pNode1))) ||
1003 (Gia_ObjFanin1(pNode0) == Gia_ObjFanin1(pNode1) && (Gia_ObjFaninC1(pNode0) ^ Gia_ObjFaninC1(pNode1)));
1021 assert( !Gia_IsComplement(pObj) );
1022 if ( !Gia_ObjIsAnd(pObj) || Gia_ObjIsBuf(pObj) )
1024 assert( Gia_ObjIsAnd(pObj) );
1025 p0 = Gia_ObjChild0(pObj);
1026 p1 = Gia_ObjChild1(pObj);
1027 if ( !Gia_IsComplement(p0) || !Gia_IsComplement(p1) )
1029 p0 = Gia_Regular(p0);
1030 p1 = Gia_Regular(p1);
1031 if ( !Gia_ObjIsAnd(p0) || !Gia_ObjIsAnd(p1) )
1033 if ( Gia_ObjFanin0(p0) != Gia_ObjFanin0(p1) || Gia_ObjFanin1(p0) != Gia_ObjFanin1(p1) )
1035 if ( Gia_ObjFaninC0(p0) == Gia_ObjFaninC0(p1) || Gia_ObjFaninC1(p0) == Gia_ObjFaninC1(p1) )
1037 if ( ppFan0 ) *ppFan0 = Gia_ObjChild0(p0);
1038 if ( ppFan1 ) *ppFan1 = Gia_ObjChild1(p0);
1059 assert( !Gia_IsComplement(pNode) );
1062 pNode0 = Gia_ObjFanin0(pNode);
1063 pNode1 = Gia_ObjFanin1(pNode);
1066 if ( Gia_ObjFanin1(pNode0) == Gia_ObjFanin1(pNode1) && (Gia_ObjFaninC1(pNode0) ^ Gia_ObjFaninC1(pNode1)) )
1069 if ( Gia_ObjFaninC1(pNode0) )
1071 *ppNodeT = Gia_Not(Gia_ObjChild0(pNode1));
1072 *ppNodeE = Gia_Not(Gia_ObjChild0(pNode0));
1073 return Gia_ObjChild1(pNode1);
1077 *ppNodeT = Gia_Not(Gia_ObjChild0(pNode0));
1078 *ppNodeE = Gia_Not(Gia_ObjChild0(pNode1));
1079 return Gia_ObjChild1(pNode0);
1082 else if ( Gia_ObjFanin0(pNode0) == Gia_ObjFanin0(pNode1) && (Gia_ObjFaninC0(pNode0) ^ Gia_ObjFaninC0(pNode1)) )
1085 if ( Gia_ObjFaninC0(pNode0) )
1087 *ppNodeT = Gia_Not(Gia_ObjChild1(pNode1));
1088 *ppNodeE = Gia_Not(Gia_ObjChild1(pNode0));
1089 return Gia_ObjChild0(pNode1);
1093 *ppNodeT = Gia_Not(Gia_ObjChild1(pNode0));
1094 *ppNodeE = Gia_Not(Gia_ObjChild1(pNode1));
1095 return Gia_ObjChild0(pNode0);
1098 else if ( Gia_ObjFanin0(pNode0) == Gia_ObjFanin1(pNode1) && (Gia_ObjFaninC0(pNode0) ^ Gia_ObjFaninC1(pNode1)) )
1101 if ( Gia_ObjFaninC0(pNode0) )
1103 *ppNodeT = Gia_Not(Gia_ObjChild0(pNode1));
1104 *ppNodeE = Gia_Not(Gia_ObjChild1(pNode0));
1105 return Gia_ObjChild1(pNode1);
1109 *ppNodeT = Gia_Not(Gia_ObjChild1(pNode0));
1110 *ppNodeE = Gia_Not(Gia_ObjChild0(pNode1));
1111 return Gia_ObjChild0(pNode0);
1114 else if ( Gia_ObjFanin1(pNode0) == Gia_ObjFanin0(pNode1) && (Gia_ObjFaninC1(pNode0) ^ Gia_ObjFaninC0(pNode1)) )
1117 if ( Gia_ObjFaninC1(pNode0) )
1119 *ppNodeT = Gia_Not(Gia_ObjChild1(pNode1));
1120 *ppNodeE = Gia_Not(Gia_ObjChild0(pNode0));
1121 return Gia_ObjChild0(pNode1);
1125 *ppNodeT = Gia_Not(Gia_ObjChild0(pNode0));
1126 *ppNodeE = Gia_Not(Gia_ObjChild1(pNode1));
1127 return Gia_ObjChild1(pNode0);
1138 *iLitT = Gia_Obj2Lit(
p, pNodeT );
1139 *iLitE = Gia_Obj2Lit(
p, pNodeE );
1140 return Gia_Obj2Lit(
p, pCtrl );
1159 if ( Gia_ObjIsCi(pNode) )
1161 assert( Gia_ObjIsAnd(pNode) );
1162 pFanin = Gia_ObjFanin0(pNode);
1163 assert( Gia_ObjRefNum(
p, pFanin) > 0 );
1164 if ( Gia_ObjRefDec(
p, pFanin) == 0 )
1166 pFanin = Gia_ObjFanin1(pNode);
1167 assert( Gia_ObjRefNum(
p, pFanin) > 0 );
1168 if ( Gia_ObjRefDec(
p, pFanin) == 0 )
1188 if ( Gia_ObjIsCi(pNode) )
1190 assert( Gia_ObjIsAnd(pNode) );
1191 if ( fMark ) Gia_ObjSetTravIdCurrent(
p, pNode);
1192 pFanin = Gia_ObjFanin0(pNode);
1193 if ( Gia_ObjRefInc(
p, pFanin) == 0 )
1195 pFanin = Gia_ObjFanin1(pNode);
1196 if ( Gia_ObjRefInc(
p, pFanin) == 0 )
1232 int ConeSize1, ConeSize2;
1233 assert( !Gia_IsComplement(pNode) );
1234 assert( Gia_ObjIsCand(pNode) );
1237 assert( ConeSize1 == ConeSize2 );
1238 assert( ConeSize1 >= 0 );
1243 int ConeSize1, ConeSize2;
1244 assert( !Gia_IsComplement(pNode) );
1245 assert( Gia_ObjIsCand(pNode) );
1249 assert( ConeSize1 == ConeSize2 );
1250 assert( ConeSize1 >= 0 );
1267 if ( Gia_ObjIsTravIdCurrent(
p, pNode) )
1269 Gia_ObjSetTravIdCurrent(
p, pNode);
1270 if ( Gia_ObjRefNum(
p, pNode) || Gia_ObjIsCi(pNode) )
1272 Vec_IntPush( vSupp, Gia_ObjId(
p, pNode) );
1275 assert( Gia_ObjIsAnd(pNode) );
1281 int ConeSize1, ConeSize2;
1282 assert( !Gia_IsComplement(pNode) );
1283 assert( Gia_ObjIsAnd(pNode) );
1284 Vec_IntClear( vSupp );
1290 assert( ConeSize1 == ConeSize2 );
1291 assert( ConeSize1 >= 0 );
1308 Gia_Obj_t * pObj;
int i, iNode, Count = 1;
1309 if ( !iObj || Vec_IntEntry(vMapping, iObj) )
1311 pObj = Gia_ManObj(
p, iObj );
1312 if ( Gia_ObjIsCi(pObj) )
1315 Vec_IntSort( vSupp, 0 );
1316 Vec_IntWriteEntry( vMapping, iObj, Vec_IntSize(vMapping) );
1317 Vec_IntPush( vMapping, Vec_IntSize(vSupp) );
1318 Vec_IntAppend( vMapping, vSupp );
1319 Vec_IntPush( vMapping, iObj );
1326 int i, Id, Count = 0;
1328 Vec_Int_t * vMapping, * vSupp = Vec_IntAlloc( 100 );
1329 vMapping = Vec_IntAlloc( 2 * Gia_ManObjNum(
p) );
1330 Vec_IntFill( vMapping, Gia_ManObjNum(
p), 0 );
1331 pRefsOld =
p->pRefs;
p->pRefs = NULL;
1335 p->pRefs = pRefsOld;
1336 Vec_IntFree( vSupp );
1337 p->vMapping = vMapping;
1360 if ( Gia_ObjIsCo(pObj) )
1361 Gia_ObjFanin0(pObj)->fMark0 = 1;
1362 else if ( Gia_ObjIsMux(
p, pObj) )
1364 Gia_ObjFanin0(pObj)->fMark0 = 1;
1365 Gia_ObjFanin1(pObj)->fMark0 = 1;
1366 Gia_ObjFanin2(
p, pObj)->fMark0 = 1;
1368 else if ( Gia_ObjIsAnd(pObj) )
1370 Gia_ObjFanin0(pObj)->fMark0 = 1;
1371 Gia_ObjFanin1(pObj)->fMark0 = 1;
1375 Counter += !pObj->
fMark0;
1398 if ( Gia_ObjIsAnd(pObj) )
1400 Gia_ObjFanin0(pObj)->fMark0 = 1;
1401 Gia_ObjFanin1(pObj)->fMark0 = 1;
1403 else if ( Gia_ObjIsCo(pObj) )
1404 Gia_ObjFanin0(pObj)->fMark0 = 1;
1407 Counter += !pObj->
fMark0;
1430 if ( Gia_ObjIsAnd(pObj) )
1432 Gia_ObjFanin0(pObj)->fMark0 = 1;
1433 Gia_ObjFanin1(pObj)->fMark0 = 1;
1435 else if ( Gia_ObjIsCo(pObj) )
1436 Gia_ObjFanin0(pObj)->fMark0 = 1;
1438 vDangles = Vec_IntAlloc( 100 );
1441 Vec_IntPush( vDangles, i );
1460 printf(
"Object is NULL." );
1463 if ( Gia_IsComplement(pObj) )
1466 pObj = Gia_Not(pObj);
1468 assert( !Gia_IsComplement(pObj) );
1469 printf(
"Obj %4d : ", Gia_ObjId(
p, pObj) );
1470 if ( Gia_ObjIsConst0(pObj) )
1471 printf(
"constant 0" );
1472 else if ( Gia_ObjIsPi(
p, pObj) )
1474 else if ( Gia_ObjIsPo(
p, pObj) )
1475 printf(
"PO( %4d%s )", Gia_ObjFaninId0p(
p, pObj), (Gia_ObjFaninC0(pObj)?
"\'" :
" ") );
1476 else if ( Gia_ObjIsCi(pObj) )
1477 printf(
"RO( %4d%s )", Gia_ObjFaninId0p(
p, Gia_ObjRoToRi(
p, pObj)), (Gia_ObjFaninC0(Gia_ObjRoToRi(
p, pObj))?
"\'" :
" ") );
1478 else if ( Gia_ObjIsCo(pObj) )
1479 printf(
"RI( %4d%s )", Gia_ObjFaninId0p(
p, pObj), (Gia_ObjFaninC0(pObj)?
"\'" :
" ") );
1482 else if ( Gia_ObjIsXor(pObj) )
1483 printf(
"XOR( %4d%s, %4d%s )",
1484 Gia_ObjFaninId0p(
p, pObj), (Gia_ObjFaninC0(pObj)?
"\'" :
" "),
1485 Gia_ObjFaninId1p(
p, pObj), (Gia_ObjFaninC1(pObj)?
"\'" :
" ") );
1486 else if ( Gia_ObjIsMuxId(
p, Gia_ObjId(
p, pObj)) )
1487 printf(
"MUX( %4d%s, %4d%s, %4d%s )",
1488 Gia_ObjFaninId2p(
p, pObj), (Gia_ObjFaninC2(
p, pObj)?
"\'" :
" "),
1489 Gia_ObjFaninId1p(
p, pObj), (Gia_ObjFaninC1(pObj)?
"\'" :
" "),
1490 Gia_ObjFaninId0p(
p, pObj), (Gia_ObjFaninC0(pObj)?
"\'" :
" ") );
1492 printf(
"AND( %4d%s, %4d%s )",
1493 Gia_ObjFaninId0p(
p, pObj), (Gia_ObjFaninC0(pObj)?
"\'" :
" "),
1494 Gia_ObjFaninId1p(
p, pObj), (Gia_ObjFaninC1(pObj)?
"\'" :
" ") );
1496 printf(
" (refs = %3d)", Gia_ObjRefNum(
p, pObj) );
1501 if ( Gia_ManHasMapping(
p) && Gia_ObjIsLut(
p, Gia_ObjId(
p, pObj)) )
1504 printf(
" Cut = { " );
1506 printf(
"%d ", iFan );
1509 if ( Gia_ManHasMapping2(
p) && Gia_ObjIsLut2(
p, Gia_ObjId(
p, pObj)) )
1512 printf(
" Cut = { " );
1514 printf(
"%d ", iFan );
1547 printf(
"GIA manager has %d ANDs, %d XORs, %d MUXes.\n",
1548 Gia_ManAndNum(
p) - Gia_ManXorNum(
p) - Gia_ManMuxNum(
p), Gia_ManXorNum(
p), Gia_ManMuxNum(
p) );
1554 if ( Gia_ObjIsAnd(pObj) )
1558 if ( Gia_ObjIsMux(
p, pObj) )
1565 assert( Gia_ObjIsCo(pObj) );
1566 printf(
"TFI cone of CO number %d:\n", Gia_ObjCioId(pObj) );
1573 if ( Vec_IntFind(vNodes, Gia_ObjId(
p, pObj)) >= 0 )
1575 assert( Gia_ObjIsAnd(pObj) );
1578 if ( Gia_ObjIsMux(
p, pObj) )
1580 Vec_IntPush( vNodes, Gia_ObjId(
p, pObj) );
1585 Vec_IntClear( vNodes );
1586 for ( i = 0; i < nLeaves; i++ )
1587 Vec_IntPush( vNodes, pLeaves[i] );
1589 printf(
"GIA logic cone for node %d:\n", Gia_ObjId(
p, pObj) );
1597 Vec_IntClear( vNodes );
1598 Vec_IntAppend( vNodes, vLeaves );
1601 printf(
"GIA logic cone for %d nodes:\n", Vec_IntSize(vObjs) );
1608 if ( Vec_IntFind(vNodes, Gia_ObjId(
p, pObj)) >= 0 )
1610 if ( Gia_ObjIsCo(pObj) || Gia_ObjIsAnd(pObj) )
1612 if ( Gia_ObjIsAnd(pObj) )
1614 if ( Gia_ObjIsMux(
p, pObj) )
1616 Vec_IntPush( vNodes, Gia_ObjId(
p, pObj) );
1622 vNodes = Vec_IntAlloc( 100 );
1624 printf(
"GIA logic cone for node %d:\n", Gia_ObjId(
p, pObj) );
1627 Vec_IntFree( vNodes );
1645 if ( Gia_ManConstrNum(pAig) == 0 )
1648 if ( i >= Gia_ManPoNum(pAig) - Gia_ManConstrNum(pAig) )
1649 Gia_ObjFlipFaninC0( pObj );
1656 Gia_ObjFlipFaninC0( pObj );
1673 if ( Vec_IntSize(vObjs) == Limit )
1675 if ( Gia_ObjIsTravIdCurrentId(
p, iObjId) )
1677 Gia_ObjSetTravIdCurrentId(
p, iObjId);
1678 pObj = Gia_ManObj(
p, iObjId );
1679 if ( Gia_ObjIsAnd(pObj) )
1682 if ( Vec_IntSize(vObjs) == Limit )
1685 if ( Vec_IntSize(vObjs) == Limit )
1688 Vec_IntPush( vObjs, iObjId );
1692 int nVars = Gia_ManPiNum(
p);
1693 int nTruthWords = Abc_TruthWordNum( nVars );
1694 int nTruths = nBytesMax / (
sizeof(unsigned) * nTruthWords);
1695 int nTotalNodes = 0, nRounds = 0;
1700 printf(
"Var = %d. Words = %d. Truths = %d.\n", nVars, nTruthWords, nTruths );
1701 vObjs = Vec_IntAlloc( nTruths );
1706 if ( Vec_IntSize(vObjs) == nTruths )
1710 nTotalNodes += Vec_IntSize( vObjs );
1711 Vec_IntClear( vObjs );
1716 nTotalNodes += Vec_IntSize( vObjs );
1717 Vec_IntFree( vObjs );
1719 printf(
"Rounds = %d. Objects = %d. Total = %d. ", nRounds, Gia_ManObjNum(
p), nTotalNodes );
1720 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
1741 if ( Gia_ManObjNum(p1) != Gia_ManObjNum(p2) )
1743 printf(
"AIGs have different number of objects.\n" );
1750 pObj2 = Gia_ManObj( p2, i );
1753 printf(
"Objects %d are different.\n", i );
1756 if ( p1->pReprs && p2->pReprs )
1760 printf(
"Representatives of objects %d are different.\n", i );
1786 if ( Gia_ObjIsAnd(pObj) )
1788 Gia_ObjFanin0(pObj)->fMark0 = 1;
1789 Gia_ObjFanin1(pObj)->fMark0 = 1;
1791 else if ( Gia_ObjIsCo(pObj) )
1792 Gia_ObjFanin0(pObj)->fMark0 = 1;
1811 assert( i >= 0 && i < Gia_ManPoNum(
p) );
1814 Lit0 = Gia_ObjFaninLit0p(
p, Gia_ManPo(
p, 0) );
1815 LitI = Gia_ObjFaninLit0p(
p, Gia_ManPo(
p, i) );
1816 Gia_ManPatchCoDriver(
p, 0, LitI );
1817 Gia_ManPatchCoDriver(
p, i, Lit0 );
1836 vValues = Vec_IntAlloc( Gia_ManObjNum(
p) );
1838 Vec_IntPush( vValues, pObj->
Value );
1846 pObj->
Value = Vec_IntEntry(vValues, i);
1863 Vec_Int_t * vFans = Vec_IntStart( Gia_ManObjNum(
p) );
1868 if ( Gia_ObjIsAnd(pObj) )
1870 if ( Vec_IntEntry(vFans, Gia_ObjFaninId0p(
p, pObj)) == 0 )
1871 Vec_IntWriteEntry(vFans, Gia_ObjFaninId0p(
p, pObj), i);
1872 if ( Vec_IntEntry(vFans, Gia_ObjFaninId1p(
p, pObj)) == 0 )
1873 Vec_IntWriteEntry(vFans, Gia_ObjFaninId1p(
p, pObj), i);
1874 if ( Gia_ObjIsMuxId(
p, i) && Vec_IntEntry(vFans, Gia_ObjFaninId2p(
p, pObj)) == 0 )
1875 Vec_IntWriteEntry(vFans, Gia_ObjFaninId2p(
p, pObj), i);
1877 else if ( Gia_ObjIsCo(pObj) )
1879 if ( Vec_IntEntry(vFans, Gia_ObjFaninId0p(
p, pObj)) == 0 )
1880 Vec_IntWriteEntry(vFans, Gia_ObjFaninId0p(
p, pObj), i);
1900 int i, Counter1 = 0, Counter2 = 0;
1901 int nFailNoRepr = 0;
1902 int nFailHaveRepr = 0;
1903 int nChoiceNodes = 0;
1905 if (
p->pReprs == NULL ||
p->pNexts == NULL )
1910 if ( Gia_ObjReprObj(
p, Gia_ObjId(
p, pObj) ) )
1923 if ( Gia_ObjNext(
p, Gia_ObjId(
p, pObj) ) )
1930 if ( Counter1 == 0 )
1932 printf(
"Warning: AIG has repr data-strucure but not reprs.\n" );
1935 printf(
"%d nodes have reprs.\n", Counter1 );
1936 printf(
"%d nodes have nexts.\n", Counter2 );
1944 if ( Gia_ObjRefNum(
p, pObj) == 0 )
1946 if ( Gia_ObjReprObj(
p, Gia_ObjId(
p, pObj) ) == NULL )
1953 if ( Gia_ObjReprObj(
p, Gia_ObjId(
p, pObj) ) != NULL )
1955 if ( Gia_ObjNextObj(
p, Gia_ObjId(
p, pObj) ) != NULL )
1958 if ( Gia_ObjReprObj(
p, i ) )
1959 assert( Gia_ObjRepr(
p, i) < i );
1961 if ( nChoices == 0 )
1965 printf(
"Gia_ManHasChoices_very_old(): Error: %d internal nodes have no fanout and no repr.\n", nFailNoRepr );
1968 if ( nFailHaveRepr )
1970 printf(
"Gia_ManHasChoices_very_old(): Error: %d internal nodes have both fanout and repr.\n", nFailHaveRepr );
1997 int i, k, nGroupCur, nGroups;
1999 abctime timeStart = Abc_Clock();
2001 assert( nGroupSize > 0 );
2002 assert( pCommLine != NULL );
2004 Abc_Print( 1,
"RUNNING MultiProve: Group size = %d. Command line = \"%s\".\n", nGroupSize, pCommLine );
2006 vOuts = Vec_IntStartNatural( Gia_ManPoNum(
p) );
2007 vOutMap = Vec_IntAlloc( Gia_ManPoNum(
p) );
2008 vCexes = Vec_PtrAlloc( Gia_ManPoNum(
p) );
2009 nGroups = Gia_ManPoNum(
p) / nGroupSize + (int)((Gia_ManPoNum(
p) % nGroupSize) > 0);
2010 for ( i = 0; i < nGroups; i++ )
2013 nGroupCur = ((i + 1) * nGroupSize < Gia_ManPoNum(
p)) ? nGroupSize : Gia_ManPoNum(
p) - i * nGroupSize;
2014 pGroup =
Gia_ManDupCones(
p, Vec_IntArray(vOuts) + i * nGroupSize, nGroupCur, 0 );
2015 Abc_Print( 1,
"GROUP %4d : %4d <= PoId < %4d : ", i, i * nGroupSize, i * nGroupSize + nGroupCur );
2021 timeComm += Abc_Clock() - clk;
2023 if ( nGroupSize == 1 )
2032 assert( vStatusCur != NULL );
2034 for ( k = 0; k < nGroupCur; k++ )
2036 Vec_IntPush( vOutMap, Vec_IntEntry(vStatusCur, k) );
2037 Vec_PtrPush( vCexes, vCexesCur ? Vec_PtrEntry(vCexesCur, k) : NULL );
2041 assert( Vec_PtrSize(vCexes) == Gia_ManPoNum(
p) );
2042 assert( Vec_IntSize(vOutMap) == Gia_ManPoNum(
p) );
2044 if ( Vec_PtrCountZero(vCexes) < Vec_PtrSize(vCexes) )
2047 Vec_PtrFree( vCexes );
2049 Abc_Print( 1,
"SUMMARY: " );
2050 Abc_Print( 1,
"Properties = %6d. ", Gia_ManPoNum(
p) );
2051 Abc_Print( 1,
"UNSAT = %6d. ", Vec_IntCountEntry(vOutMap, 1) );
2052 Abc_Print( 1,
"SAT = %6d. ", Vec_IntCountEntry(vOutMap, 0) );
2053 Abc_Print( 1,
"UNDEC = %6d. ", Vec_IntCountEntry(vOutMap, -1) );
2054 Abc_Print( 1,
"\n" );
2055 Abc_PrintTime( 1,
"Command time", timeComm );
2056 Abc_PrintTime( 1,
"Total time ", Abc_Clock() - timeStart );
2058 Vec_IntFree( vOuts );
2079 int f, k, nLeft = Gia_ManPoNum(
p);
2080 vRes = Vec_IntAlloc( Gia_ManPoNum(
p) );
2081 Vec_IntFill( vRes, Gia_ManPoNum(
p), nFrames );
2082 Gia_ObjTerSimSet0( Gia_ManConst0(
p) );
2084 Gia_ObjTerSimSet0( pObj );
2085 for ( f = 0; f < nFrames; f++ )
2088 Gia_ObjTerSimSetX( pObj );
2090 Gia_ObjTerSimRo(
p, pObj );
2092 Gia_ObjTerSimAnd( pObj );
2094 Gia_ObjTerSimCo( pObj );
2098 Gia_ObjTerSimPrint( pObj );
2102 if ( Vec_IntEntry(vRes, k) == nFrames && Gia_ObjTerSimGetX(pObj) )
2103 Vec_IntWriteEntry(vRes, k, f), nLeft--;
2110 printf(
"Simulation converged after %d frames.\n", f+1 );
2112 printf(
"Simulation terminated after %d frames.\n", nFrames );
2118#define MAX_LUT_SIZE 8
2144 int i, k, iFan, iLut = 0;
2146 int nUints = Abc_TruthWordNum(LutSizeMax);
2149 Vec_Wrd_t * vTruths = Vec_WrdStart( Gia_ManObjNum(
p) );
2150 assert( LutSizeMax <= 6 );
2154 memset( pLuts->
pTruth, 0xFF,
sizeof(
unsigned) * nUints );
2156 Gia_ManConst0(
p)->Value = pLuts[iLut].
Out = Abc_Var2Lit( iLut, 0 );
2161 pLuts[iLut].
Type = 1;
2162 memset( pLuts[iLut].pTruth, 0xAA,
sizeof(
unsigned) * nUints );
2163 pObj->
Value = pLuts[iLut].
Out = Abc_Var2Lit( iLut, 0 );
2168 if ( i && Gia_ObjIsLut(
p, i) )
2171 pLuts[iLut].
Type = 3;
2173 pLuts[iLut].
pFans[k] = Gia_ManObj(
p, iFan)->Value;
2174 pLuts[iLut].
nFans = k;
2176 memcpy( pLuts[iLut].pTruth, &truth,
sizeof(
word) );
2177 pObj->
Value = pLuts[iLut].
Out = Abc_Var2Lit( iLut, 0 );
2183 pLuts[iLut].
Type = 2;
2184 pLuts[iLut].
pFans[0] = Gia_ObjFanin0(pObj)->Value;
2185 if ( Gia_ObjFaninC0(pObj) ^ Gia_ObjIsConst0(Gia_ObjFanin0(pObj)) )
2186 memset( pLuts[iLut].pTruth, 0x55,
sizeof(
unsigned) * nUints );
2188 memset( pLuts[iLut].pTruth, 0xAA,
sizeof(
unsigned) * nUints );
2189 pLuts[iLut].
nFans = 1;
2190 pObj->
Value = pLuts[iLut].
Out = Abc_Var2Lit( iLut, 0 );
2196 FILE * pFile = fopen( pFileName,
"wb" );
2197 if ( pFile == NULL )
2198 printf(
"Cannot open file \"%s\" for writing.\n", pFileName );
2202 int nSize2 = fwrite( pLuts, 1, nSize1, pFile );
2203 assert( nSize1 == nSize2 );
2204 printf(
"Successfully dumped %d bytes of binary data.\n", nSize1 );
2209 Vec_WrdFree( vTruths );
2225 FILE * pTable = fopen( pFileName,
"a+" );
2226 int i, Counts[10] = {0};
2228 if ( Gia_ObjLutSize(
p, i) > 0 && Gia_ObjLutSize(
p, i) < 10 )
2229 Counts[ Gia_ObjLutSize(
p, i) ]++;
2230 fprintf( pTable,
"%s",
p->pName );
2231 for ( i = 1; i < 10; i++ )
2232 fprintf( pTable,
" %d", Counts[i] );
2233 fprintf( pTable,
"\n" );
2253 if ( Gia_ObjIsCi(pObj) )
2263 if ( Gia_ObjIsCi(pObj) )
2272 if ( Gia_ObjIsCi(pObj) )
2281 if ( iNode1 == 0 || iNode2 == 0 )
2309 Gia_ObjFanin0(pObj)->fMark0 = 1;
2310 Gia_ObjFanin1(pObj)->fMark0 = 1;
2313 Gia_ObjFanin0(pObj)->fMark0 = 1;
2337 Count += Gia_ObjFaninLit0(pObj, Gia_ObjId(
p, pObj)) != 0;
2360 pObj = Gia_ManObj(
p, Abc_Lit2Var(iLit) );
2361 if ( !~pObj->
Value )
2362 Vec_IntWriteEntry( vCopy, i, -1 );
2364 Vec_IntWriteEntry( vCopy, i, Abc_LitNotCond(pObj->
Value, Abc_LitIsCompl(iLit)) );
2381 Vec_Int_t * vPoints = Vec_IntAlloc( 1000 );
2382 Vec_Int_t * vQuads = Vec_IntAlloc( 1000 );
2383 Vec_Bit_t * vHeads = Vec_BitStart( Gia_ManObjNum(
p) );
2384 Vec_Bit_t * vDatas = Vec_BitStart( Gia_ManObjNum(
p) );
2385 Gia_Obj_t * pObj, * pCtrl, * pData0, * pData1;
2387 assert( Gia_ManRegNum(pNew) == 0 );
2393 pCtrl = Gia_Regular(pCtrl);
2394 pData0 = Gia_Regular(pData0);
2395 pData1 = Gia_Regular(pData1);
2396 Vec_IntPushTwo( vQuads, Gia_ObjId(pNew, pObj), Gia_ObjId(pNew, pCtrl) );
2397 Vec_IntPushTwo( vQuads, Gia_ObjId(pNew, pData0), Gia_ObjId(pNew, pData1) );
2398 Vec_BitWriteEntry( vHeads, Gia_ObjId(pNew, pObj), 1 );
2399 Vec_BitWriteEntry( vDatas, Gia_ObjId(pNew, pData0), 1 );
2400 Vec_BitWriteEntry( vDatas, Gia_ObjId(pNew, pData1), 1 );
2403 Gia_ObjFanin0(pObj)->fMark0 = 1;
2404 for ( i = 0; i < Vec_IntSize(vQuads)/4; i++ )
2406 int iObj = Vec_IntEntry( vQuads, 4*i+0 );
2407 int iCtrl = Vec_IntEntry( vQuads, 4*i+1 );
2408 int iData0 = Vec_IntEntry( vQuads, 4*i+2 );
2409 int iData1 = Vec_IntEntry( vQuads, 4*i+3 );
2410 if ( (Vec_BitEntry(vHeads, iObj) && Vec_BitEntry(vDatas, iObj)) ||
2411 (Vec_BitEntry(vHeads, iData0) && Vec_BitEntry(vDatas, iData0)) ||
2412 (Vec_BitEntry(vHeads, iData1) && Vec_BitEntry(vDatas, iData1)) )
2416 Gia_Obj_t * pData0 = Gia_ManObj(
p, iData0 );
2417 Gia_Obj_t * pData1 = Gia_ManObj(
p, iData1 );
2418 if ( Gia_ObjIsAnd(pObj) && !pObj->
fMark0 ) Vec_IntPush( vPoints, iObj );
2419 if ( Gia_ObjIsAnd(pCtrl) && !pCtrl->
fMark0 ) Vec_IntPush( vPoints, iCtrl );
2420 if ( Gia_ObjIsAnd(pData0) && !pData0->
fMark0 ) Vec_IntPush( vPoints, iData0 );
2421 if ( Gia_ObjIsAnd(pData1) && !pData1->
fMark0 ) Vec_IntPush( vPoints, iData1 );
2425 Vec_IntUniqify( vPoints );
2427 Gia_ManAppendCo( pNew, Abc_Var2Lit(iObj, 0) );
2428 Vec_IntFree( vPoints );
2429 Vec_IntFree( vQuads );
2430 Vec_BitFree( vHeads );
2431 Vec_BitFree( vDatas );
2448 if ( Gia_ObjIsTravIdCurrentId(
p, iObj) )
2450 Gia_ObjSetTravIdCurrentId(
p, iObj);
2451 Vec_IntWriteEntry( vDists, iObj,
Dist );
2452 Vec_IntPush( vRes, iObj );
2456 int i, k, iObj, iFan;
2459 int Weight = Vec_IntEntry( vDists, iObj );
2462 if ( Gia_ObjIsAnd(pObj) )
2464 Gia_ManRingAdd(
p, Gia_ObjFaninId0(pObj, iObj), vRes, vDists, Weight + 1*!Gia_ObjIsBuf(Gia_ObjFanin0(pObj)) );
2465 Gia_ManRingAdd(
p, Gia_ObjFaninId1(pObj, iObj), vRes, vDists, Weight + 1*!Gia_ObjIsBuf(Gia_ObjFanin1(pObj)) );
2468 Gia_ManRingAdd(
p, iFan, vRes, vDists, Weight + 1*!Gia_ObjIsBuf(Gia_ManObj(
p, iFan)) );
2475 vStart = Vec_IntAlloc( 100 );
2476 vNexts = Vec_IntAlloc( 100 );
2477 vDists = Vec_IntStart( Gia_ManObjNum(
p) );
2483 Gia_ObjSetTravIdCurrentId(
p, iObj);
2484 Vec_IntWriteEntry( vDists, iObj, 1 );
2485 Vec_IntPush( vStart, iObj );
2490 Gia_ObjSetTravIdCurrentId(
p, iTarg);
2491 Vec_IntWriteEntry( vDists, iTarg, 1 );
2492 Vec_IntPush( vStart, iTarg );
2494 for ( i = 0; ; i++ )
2497 printf(
"Ring %2d : %6d\n", i, Vec_IntSize(vDists)-Vec_IntCountZero(vDists) );
2499 if ( Vec_IntSize(vNexts) == 0 )
2501 Vec_IntClear( vStart );
2504 Vec_IntFree( vStart );
2505 Vec_IntFree( vNexts );
2511 if (
p->vFanoutNums )
2536 char * pStart, Line [1000];
float Total = 0;
2537 char * pFileName =
"data.txt";
2538 FILE * pFile = fopen( pFileName,
"r" );
2539 if ( pFile == NULL )
2540 { printf(
"Input file \"%s\" cannot be opened.\n", pFileName );
return; }
2541 while ( fgets( Line, 1000, pFile ) != NULL )
2543 if ( !
strstr(Line,
"xxx") )
2545 if ( !
strstr(Line,
"yyy") )
2548 pStart =
strstr(Line,
"zzz");
2549 if ( pStart == NULL )
2552 Total += -
atof( pStart + 4 );
2554 printf(
"Total = %.2f\n", Total );
2573 Vec_Wec_t * vSupps = Vec_WecStart( Gia_ManObjNum(
p) );
2575 for ( i = 0; i < Gia_ManCiNum(
p); i++ )
2576 Vec_IntPush( Vec_WecEntry(vSupps, 1+i), i );
2578 Vec_IntTwoMerge2( Vec_WecEntry(vSupps, Gia_ObjFaninId0(pObj, i)), Vec_WecEntry(vSupps, Gia_ObjFaninId1(pObj, i)), Vec_WecEntry(vSupps, i) );
2580 nResult += Vec_IntSize( Vec_WecEntry(vSupps, Gia_ObjFaninId0p(
p, pObj)) );
2581 Vec_WecFree( vSupps );
2598 Vec_Wrd_t * vSims = Vec_WrdStart( Gia_ManObjNum(
p) );
2599 int r, nResult = 0, nRounds = (Gia_ManCiNum(
p) + 63)/64;
2600 for ( r = 0; r < nRounds; r++ )
2603 int i, Limit = r == nRounds-1 ? Gia_ManCiNum(
p) % 64 : 64;
2604 for ( i = 0; i < Limit; i++ )
2605 Vec_WrdWriteEntry( vSims, 1+64*r+i, (
word)1 << i );
2607 Vec_WrdWriteEntry( vSims, i, Vec_WrdEntry(vSims, Gia_ObjFaninId0(pObj, i)) | Vec_WrdEntry(vSims, Gia_ObjFaninId1(pObj, i)) );
2609 nResult += Abc_TtCountOnes( Vec_WrdEntry(vSims, Gia_ObjFaninId0p(
p, pObj)) );
2610 for ( i = 0; i < Limit; i++ )
2611 Vec_WrdWriteEntry( vSims, 1+64*r+i, 0 );
2613 Vec_WrdFree( vSims );
2634 Vec_Int_t * vNodes = Vec_IntAlloc( 1000 );
2635 Vec_IntPush( vRoots, Gia_ObjFaninId0p(
p, pSink) );
2638 pNew->
pName = Abc_UtilStrsav(
p->pName );
2640 pObj->
Value = Gia_ManAppendCi(pNew);
2642 for ( m = 0; m < (1 << nVars); m++ )
2644 for ( i = 0; i < nVars; i++ )
2645 Gia_ManCi(
p, Gia_ManCiNum(
p)-nVars+i)->Value = (m >> i) & 1;
2648 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pSink) );
2652 Vec_IntFree( vRoots );
2653 Vec_IntFree( vNodes );
2672 Vec_Int_t * vSupp = Vec_IntAlloc( 1000 );
2673 Vec_Int_t * vAnds = Vec_IntAlloc( 1000 );
2675 pNew->
pName = Abc_UtilStrsav(
p->pName );
2678 pObj->
Value = Gia_ManAppendCi(pNew);
2679 assert( (
int)pObj->
Value == Abc_Var2Lit( 1 + Gia_ObjCioId(pObj), 0 ) );
2684 int Fanin = Gia_ObjFaninId0p(
p, pSink );
2686 Vec_IntClear( vSupp );
2687 Vec_IntClear( vAnds );
2689 Vec_IntPush( Gia_ObjIsAnd(pObj) ? vAnds : vSupp, Gia_ObjId(
p, pObj) );
2690 Vec_IntFree( vNodes );
2691 Vec_IntSort( vSupp, 0 );
2692 for ( m = 0; m < 5; m++ )
2695 if ( i >= Vec_IntSize(vSupp)-5 )
2696 pObj->
Value = (i == Vec_IntSize(vSupp)-5+m) ? 1 : 0;
2702 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pSink) );
2703 Gia_ManAppendCo( pNew, Abc_Var2Lit( Vec_IntEntry(vSupp, Vec_IntSize(vSupp)-5+m), 0 ) );
2705 if ( i >= Vec_IntSize(vSupp)-5 )
2706 pObj->
Value = Abc_Var2Lit( 1 + Gia_ObjCioId(pObj), 0 );
2711 Vec_IntFree( vSupp );
2712 Vec_IntFree( vAnds );
2734 Vec_Int_t * vNodes = Vec_IntAlloc( 1000 );
2735 Vec_IntPush( vRoots, Gia_ObjFaninId0p(
p, pSink) );
2738 pNew->
pName = Abc_UtilStrsav(
p->pName );
2740 pObj->
Value = Gia_ManAppendCi(pNew);
2742 for ( n = 0; n < 2; n++ )
2747 iLits[n] = Gia_ObjFanin0Copy(pSink);
2749 Gia_ManAppendCo( pNew,
Gia_ManHashAnd(pNew, iLits[1], Abc_LitNot(iLits[0])) );
2750 Gia_ManAppendCo( pNew,
Gia_ManHashAnd(pNew, iLits[0], Abc_LitNot(iLits[1])) );
2753 Vec_IntFree( vRoots );
2754 Vec_IntFree( vNodes );
2762 int iLit[2] = { Gia_ObjFaninId0p( pSwp, Gia_ManCo(pSwp, 0) ), Gia_ObjFaninId0p( pSwp, Gia_ManCo(pSwp, 1) ) };
2765 if ( iLit[0] == 0 && iLit[1] == 0 )
2777 for ( i = 0; i < Gia_ManCiNum(
p); i++ )
2779 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
2796 Vec_Wec_t * vRes = Vec_WecStart( Gia_ManCoNum(
p) );
2797 Vec_Wec_t * vSupps = Vec_WecStart( Gia_ManObjNum(
p) );
2799 for ( i = 0; i < Gia_ManCiNum(
p); i++ )
2800 Vec_IntPush( Vec_WecEntry(vSupps, 1+i), i );
2802 Vec_IntTwoMerge2( Vec_WecEntry(vSupps, Gia_ObjFaninId0(pObj, i)), Vec_WecEntry(vSupps, Gia_ObjFaninId1(pObj, i)), Vec_WecEntry(vSupps, i) );
2804 Vec_IntAppend( Vec_WecEntry(vRes, i), Vec_WecEntry(vSupps, Gia_ObjFaninId0p(
p, pObj)) );
2805 Vec_WecFree( vSupps );
2810 Vec_Wec_t * vDiffs = Vec_WecStart( Vec_WecSize(vSupps) );
2813 Vec_IntTwoFindCommon( Vec_WecEntry(vSupps, i-1), vOld, vNew );
2819 int nSize = Gia_ManCoNum(
p) * (Gia_ManCiNum(
p) + 1) + 1;
2820 Vec_Str_t * vRes = Vec_StrAlloc( nSize );
2822 assert( Gia_ManCoNum(
p) == Vec_WecSize(vSupps) );
2823 Vec_StrFill( vRes, nSize-1,
'_' );
2824 Vec_StrPush( vRes,
'\0' );
2830 Vec_StrWriteEntry( vRes, i * (Gia_ManCiNum(
p) + 1) + Obj,
'*' );
2835 Vec_StrWriteEntry( vRes, i * (Gia_ManCiNum(
p) + 1) + Obj,
'*' );
2837 Vec_StrWriteEntry( vRes, i * (Gia_ManCiNum(
p) + 1) + Obj, (
char)(
'0'+Value) );
2840 Vec_StrWriteEntry( vRes, i * (Gia_ManCiNum(
p) + 1) + Gia_ManCiNum(
p),
'\n' );
2847 FILE * pFile = fopen( pFileName,
"wb" );
2848 if ( pFile == NULL )
2849 printf(
"Cannot open file \"%s\" for writing.\n", pFileName );
2852 int nOuts = Vec_StrCountEntry(
p,
'\n');
2853 int nIns = Vec_StrSize(
p)/Vec_StrCountEntry(
p,
'\n') - 1;
2854 int nSize1 = Vec_StrSize(
p) - 1;
2855 int nSize2 = fwrite( Vec_StrArray(
p), 1, nSize1, pFile );
2856 assert( nSize1 == nSize2 );
2857 printf(
"Successfully dumped file \"%s\" with support data for %d outputs and %d inputs.\n", pFileName, nOuts, nIns );
2868 Vec_WecFree( vDiffs2 );
2869 Vec_WecFree( vDiffs );
2870 Vec_WecFree( vSupps );
2871 Vec_StrFree( vRes );
2878 Vec_WecFree( vSupps );
2879 Vec_StrFree( vRes );
2896 if ( !Gia_ObjIsAnd(pObj) )
2898 if ( Gia_ObjIsTravIdCurrent(
p, pObj) )
2900 Gia_ObjSetTravIdCurrent(
p, pObj);
2912 Vec_Int_t * vSupp = Vec_IntAlloc( 100 );
2913 Vec_Int_t * vAnds = Vec_IntAlloc( 100 );
2915 assert( Gia_ManRegNum(
p) && Gia_ManRegNum(
p) % 8 == 0 );
2917 pNew->
pName = Abc_UtilStrsav(
p->pName );
2918 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
2920 Gia_ManConst0(
p)->Value = 0;
2922 pObjPi->
Value = Gia_ManAppendCi( pNew );
2926 pObjRo = Gia_ObjRiToRo(
p, pObjRi);
2927 if ( (i - Gia_ManPoNum(
p)) % 8 != 0 )
2932 for ( n = 0; n < 2; n++ )
2937 iLits[n] = Gia_ObjFanin0Copy(pObjRi);
2940 Gia_ManAppendCo( pNew, Abc_LitNot(
Gia_ManHashAnd( pNew, iLits[1], Abc_LitNot(iLits[0]) )) );
2944 int Fanin = Gia_ObjFaninId0p(
p, pObjRi );
2947 Vec_IntClear( vSupp );
2948 Vec_IntClear( vAnds );
2950 Vec_IntPush( Gia_ObjIsAnd(pObj) ? vAnds : vSupp, Gia_ObjId(
p, pObj) );
2951 Vec_IntFree( vNodes );
2952 Vec_IntSort( vSupp, 0 );
2953 for ( m = 0; m < 4; m++ )
2956 if ( i >= Vec_IntSize(vSupp)-5 )
2957 pObj->
Value = (i == Vec_IntSize(vSupp)-5+m) ? 1 : 0;
2963 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObjRi) );
2966 if ( i >= Vec_IntSize(vSupp)-5 )
2967 pObj->
Value = Abc_Var2Lit( 1 + Gia_ObjCioId(pObj), 0 );
2971 Vec_IntFree( vSupp );
2972 Vec_IntFree( vAnds );
2978 printf(
"Transformed %d outputs, ", Gia_ManPoNum(pNew) );
2980 Abc_PrintTime( 0,
"Time", Abc_Clock() - clk );
3002 int i, n, iTempLit, iLits[2];
3003 assert( Gia_ManRegNum(
p) > 0 );
3005 pNew->
pName = Abc_UtilStrsav(
p->pName );
3006 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
3008 Gia_ManConst0(
p)->Value = 0;
3010 pObjPi->
Value = Gia_ManAppendCi( pNew );
3016 pObjRo = Gia_ObjRiToRo(
p, pObjRi);
3017 iTempLit = pObjRo->
Value;
3018 for ( n = 0; n < 2; n++ )
3023 iLits[n] = Gia_ObjFanin0Copy(pObjRi);
3025 pObjRo->
Value = iTempLit;
3026 Gia_ManAppendCo( pNew, Abc_LitNot(
Gia_ManHashAnd( pNew, iLits[1], Abc_LitNot(iLits[0]) )) );
3027 Gia_ManAppendCo( pNew, Abc_LitNot(
Gia_ManHashAnd( pNew, iLits[0], Abc_LitNot(iLits[1]) )) );
3034 printf(
"Created %d outputs. ", Gia_ManPoNum(pNew) );
3036 Abc_PrintTime( 0,
"Time", Abc_Clock() - clk );
3055 Vec_Int_t * vPat = Vec_IntAlloc( Gia_ManCiNum(
p) );
3056 Vec_Int_t * vVis = Vec_IntAlloc( Gia_ManAndNum(
p) );
3057 Gia_Obj_t * pObj = Gia_ManCo(
p, iCo ), * pTemp;
int iLit, i, k, nTries = 0;
3058 if ( Gia_ObjFanin0(pObj) == Gia_ManConst0(
p) )
3061 assert( !pTemp->fMark0 && !pTemp->fMark1 );
3062 for ( i = 0; i < 64*
nWords; )
3069 if ( Abc_LitIsCompl(iLit) )
3071 pTemp = Gia_ManObj(
p, Abc_Lit2Var(iLit) );
3072 assert( Gia_ObjIsCi(pTemp) );
3073 Abc_InfoSetBit( (
unsigned *)Vec_WrdEntryP(vSim,
nWords*Gia_ObjCioId(pTemp)), i );
3078 pTemp->fMark0 = pTemp->fMark1 = 0;
3082 Vec_IntFree( vPat );
3083 Vec_IntFree( vVis );
3088 Vec_Wrd_t *
p = Vec_WrdAlloc( Vec_WrdSize(p1)+Vec_WrdSize(p2) );
3092 for ( i = 0; i < nIns; i++ )
3094 for ( k = 0; k <
nWords; k++ )
3095 Vec_WrdPush(
p, Vec_WrdEntry(p1, i*
nWords+k) );
3096 for ( k = 0; k <
nWords; k++ )
3097 Vec_WrdPush(
p, Vec_WrdEntry(p2, i*
nWords+k) );
3109 for ( i = 0; i < Gia_ManCoNum(
p); i++ )
3112 if ( i >= Gia_ManCoNum(
p)-4 )
3113 vSim[i-(Gia_ManCoNum(
p)-4)] = vSims;
3115 Vec_WrdFreeP( &vSims );
3138 Abc_PrintTime( 0,
"Time", Abc_Clock() - clk );
3144 char * pFileName2 = Abc_UtilStrsavTwo( pBasicName,
".sol" );
3145 FILE * pFile = fopen( pFileName2,
"wb" );
3147 if ( pFile == NULL )
3148 printf(
"Cannot open output file \"%s\".\n", pFileName2 );
3153 fprintf( pFile,
"%d %d ", Gia_ObjFaninLit0(pObj, i), Gia_ObjFaninLit1(pObj, i) );
3155 fprintf( pFile,
"%d %d ", Gia_ObjFaninLit0p(
p, pObj), Gia_ObjFaninLit0p(
p, pObj) );
3157 printf(
"Finished writing solution file \"%s\".\n", pFileName2 );
3163 FILE * pFile = fopen( pFileName,
"wb" );
3164 if ( pFile == NULL )
3165 printf(
"Cannot open output file \"%s\".\n", pFileName );
3168 Vec_Wrd_t * vSimsPi = Vec_WrdStartTruthTables( Gia_ManCiNum(
p) );
3170 int i, k,
nWords = Vec_WrdSize(vSimsPi) / Gia_ManCiNum(
p);
3172 fprintf( pFile,
"%d %d %d %d\n", Gia_ManCiNum(
p), 0, Gia_ManCoNum(
p), 1 << Gia_ManCiNum(
p) );
3173 for ( i = 0; i < Gia_ManCiNum(
p); i++ )
3174 Abc_TtPrintBinary1( pFile, Vec_WrdEntryP(vSimsPi, i*
nWords), Gia_ManCiNum(
p) ), fprintf(pFile,
"\n");
3175 for ( i = 0; i < (1 << Gia_ManCoNum(
p)); i++ )
3177 Abc_TtFill( pTemp,
nWords );
3178 for ( k = 0; k < Gia_ManCoNum(
p); k++ )
3179 Abc_TtAndCompl( pTemp, pTemp, 0, Vec_WrdEntryP(vSimsPo, k*
nWords), !((i>>k)&1),
nWords );
3180 Abc_TtPrintBinary1( pFile, pTemp, Gia_ManCiNum(
p) ), fprintf(pFile,
"\n");
3184 Vec_WrdFree( vSimsPi );
3185 Vec_WrdFree( vSimsPo );
3186 printf(
"Finished writing resub file \"%s\".\n", pFileName );
3205 Gia_Obj_t * pObj;
int i, nSize = Gia_ManObjNum(
p);
3206 printf(
"static int s_ArraySize = %d;\n", nSize );
3207 printf(
"static int s_ArrayData[%d] = {\n", 2*nSize );
3214 printf(
"%d, %d, ", Gia_ObjFaninLit0p(
p, pObj), Gia_ObjFaninLit1p(
p, pObj) );
3217 printf(
"%d, %d, ", Gia_ObjFaninLit0p(
p, pObj), Gia_ObjFaninLit0p(
p, pObj) );
3237 assert( i >= 0 && i < 16 );
3239 return (Mint >> i) & 1;
3242 if ( Mint < (1 << nIns) )
3243 return (Truth >> Mint) & 1;
3245 return ((Truth >> (Mint-(1 << nIns))) & 1) == 0;
3252 unsigned Truth = 0xFE;
3253 int i, j, k, c, nIns = 3, nAux = 3;
3254 int nTotal = nIns + 1 + nAux;
3256 int nMints = (1 << (nIns+1));
3257 int M[64][100] = {{0}};
3258 float Value[64] = {0};
3259 float Solution[100] = {0};
3265 for ( k = 0; k < nMints; k++ )
3267 for ( i = c = 0; i <
nTotal; i++ )
3268 for ( j = i+1; j <
nTotal; j++ )
3272 M[k][c++] = iVal == jVal ? 1 : -1;
3274 Value[k] = k < (1 << nIns) ? -1 : 1;
3278 for ( k = 0; k < nMints; k++ )
3280 for ( c = 0; c < nPairs; c++ )
3281 printf(
"%2d ",
M[k][c] );
3282 printf(
"%3f\n", Value[k] );
3287 for ( i = 0; i < 100; i++ )
3290 for ( k = 0; k < nMints; k++ )
3291 Error += Value[k] > 0 ? Value[k] : -Value[k];
3292 printf(
"Round %3d : Error = %5f ", i, Error );
3293 for ( c = 0; c < nPairs; c++ )
3294 printf(
"%2f ", Solution[c] );
3300 for ( c = 0; c < nPairs; c++ )
3303 for ( k = 0; k < nMints; k++ )
3304 if ( (
M[k][c] > 0 && Value[k] > 0) || (
M[k][c] < 0 && Value[k] < 0) )
3310 printf(
"Count = %3d ", Count );
3313 printf(
"Increasing %d by %f\n", c, Delta );
3314 Solution[c] += Delta;
3315 for ( k = 0; k < nMints; k++ )
3323 printf(
"Reducing %d by %f\n", c, Delta );
3324 Solution[c] -= Delta;
3325 for ( k = 0; k < nMints; k++ )
3348 if ( !Gia_ObjIsAnd(pObj) )
3350 if ( Gia_ObjIsTravIdPrevious(
p, pObj) )
3352 if ( Gia_ObjIsTravIdCurrent(
p, pObj) )
3354 Gia_ObjSetTravIdPrevious(
p, pObj);
3357 Gia_ObjSetTravIdCurrent(
p, pObj);
3365 assert(Gia_ObjIsAnd(pObj));
3369 Gia_ObjSetTravIdCurrent(
p, pObj);
3392 assert( Gia_ObjIsAnd(pObj) );
3393 if ( Vec_IntEntry(vMap, Gia_ObjId(
p, pObj)) == -1 )
3397 return pObj->
Value =
Gia_ManHashAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
3400 int iWin = Vec_IntEntry(vMap, Gia_ObjId(
p, pObj));
3406 Gia_ManConst0(pWin)->Value = 0;
3411 pNode->
Value =
Gia_ManHashAnd( pNew, Gia_ObjFanin0Copy(pNode), Gia_ObjFanin1Copy(pNode) );
3414 pNode->
Value = Gia_ObjFanin0Copy(Gia_ManPo(pWin, i));
3425 assert( Vec_IntSize(vIns) == Gia_ManPiNum(pTemp) );
3426 assert( Vec_IntSize(vOuts) == Gia_ManPoNum(pTemp) );
3430 Vec_Int_t * vMap = Vec_IntStartFull( Gia_ManObjNum(
p) ), * vOuts;
3433 Vec_IntWriteEntry( vMap, iNode, i );
3437 pNew->
pName = Abc_UtilStrsav(
p->pName );
3438 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
3441 Gia_ManConst0(
p)->Value = 0;
3443 pObj->
Value = Gia_ManAppendCi(pNew);
3447 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
3449 Vec_IntFree( vMap );
3470 assert( Gia_ManCiNum(p0) == Gia_ManCiNum(p1) );
3471 assert( Gia_ManCoNum(p0) == Gia_ManCoNum(p1) );
3473 pNew =
Gia_ManStart( Gia_ManObjNum(p0) + Gia_ManObjNum(p1) );
3474 pNew->
pName = Abc_UtilStrsav(
"miter" );
3478 Gia_ManConst0(p0)->Value = 0;
3479 Gia_ManConst0(p1)->Value = 0;
3481 Gia_ManCi(p1, i)->Value = pObj->
Value = Gia_ManAppendCi( pNew );
3486 assert( Gia_ManAndNum(pNew) == Gia_ManAndNum(p0) );
3491 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
3493 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
3494 printf(
"The two AIGs have %d structurally equivalent nodes.\n", Gia_ManAndNum(p0) + Gia_ManAndNum(p1) - Gia_ManAndNum(pNew) );
3497 assert( nDangling == 0 );
3503 Vec_Int_t * vPairs = Vec_IntAlloc( 100 );
3522 Vec_Int_t * vCounts = Vec_IntStart( Gia_ManObjNum(pMiter) );
3526 Vec_IntAddToEntry( vCounts, i, 1 );
3529 Vec_Int_t * vMap = Vec_IntStartFull( Gia_ManObjNum(pMiter) );
3530 int iStartP1 = 1 + Gia_ManPiNum(p0) + Gia_ManAndNum(p0);
3532 if ( Abc_Lit2Var(pObj->
Value) >= iStartP1 )
3533 Vec_IntWriteEntry( vMap, Abc_Lit2Var(pObj->
Value), i );
3537 for ( i = iStartP1; i < Gia_ManObjNum(pMiter) - Gia_ManCoNum(pMiter); i++ ) {
3538 assert( Gia_ObjIsAnd(Gia_ManObj(pMiter, i)) );
3539 int Repr = Gia_ObjRepr(pMiter, i);
3540 if ( Repr ==
GIA_VOID || Repr >= iStartP1 || Vec_IntEntry(vCounts, Repr) != 2 )
3542 assert( Repr < iStartP1 );
3543 assert( Vec_IntEntry(vMap, i) > 0 );
3544 Vec_IntPushTwo( vPairs, Repr, Vec_IntEntry(vMap, i) );
3547 Vec_IntFree( vMap );
3548 Vec_IntFree( vCounts );
3557 printf(
"Pair Aig0 node Aig1 node\n" );
3560 printf(
"%3d %6d %6d\n", i/2, Obj0, Obj1 );
3563 Vec_IntFree( vPairs );
void Abc_FrameUpdateGia(Abc_Frame_t *pAbc, Gia_Man_t *pNew)
void Abc_FrameReplaceCexVec(Abc_Frame_t *pAbc, Vec_Ptr_t **pvCexVec)
#define ABC_SWAP(Type, a, b)
#define ABC_ALLOC(type, num)
#define ABC_REALLOC(type, obj, num)
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
ABC_DLL int Abc_FrameReadProbStatus(Abc_Frame_t *pAbc)
typedefABC_NAMESPACE_HEADER_START struct Abc_Frame_t_ Abc_Frame_t
INCLUDES ///.
ABC_DLL void * Abc_FrameReadCex(Abc_Frame_t *pAbc)
int nTotal
DECLARATIONS ///.
ABC_DLL Abc_Frame_t * Abc_FrameReadGlobalFrame()
ABC_DLL Vec_Int_t * Abc_FrameReadPoStatuses(Abc_Frame_t *p)
ABC_DLL Vec_Ptr_t * Abc_FrameReadCexVec(Abc_Frame_t *p)
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
struct Vec_Str_t_ Vec_Str_t
int Cec4_ManGeneratePatterns_rec(Gia_Man_t *p, Gia_Obj_t *pObj, int Value, Vec_Int_t *vPat, Vec_Int_t *vVisit)
ABC_DLL int Cmd_CommandExecute(Abc_Frame_t *pAbc, const char *sCommand)
void Gia_ManResubPair(Vec_Wrd_t *vOn, Vec_Wrd_t *vOff, int nWords, int nIns)
void Gia_ManWriteSol(Gia_Man_t *p, char *pFileName)
int Gia_ManCountPisWithFanout(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupWithMuxPos(Gia_Man_t *p)
Gia_Man_t * Gia_ManConvertSupp(Gia_Man_t *p)
void Gia_ManPrintArray(Gia_Man_t *p)
int Gia_NodeDeref_rec(Gia_Man_t *p, Gia_Obj_t *pNode)
int * Gia_ManCreateMuxRefs(Gia_Man_t *p)
void Gia_ObjSetPhase(Gia_Man_t *p, Gia_Obj_t *pObj)
void Gia_AigerWriteLut(Gia_Man_t *p, char *pFileName)
void Gia_ManCheckSuppMark_rec(Gia_Man_t *p, Gia_Obj_t *pObj)
void Gia_ManSwapPos(Gia_Man_t *p, int i)
int Gia_ManDupInsertWindows_rec(Gia_Man_t *pNew, Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vMap, Vec_Ptr_t *vvIns, Vec_Ptr_t *vvOuts, Vec_Ptr_t *vWins)
struct Gia_MapLut_t_ Gia_MapLut_t
int Gia_NodeMffcSizeSupp(Gia_Man_t *p, Gia_Obj_t *pNode, Vec_Int_t *vSupp)
void Gia_ManCreateLitRefs(Gia_Man_t *p)
void Gia_ManCollectRing(Gia_Man_t *p, Vec_Int_t *vStart, Vec_Int_t *vRes, Vec_Int_t *vDists)
int Gia_ManHasDangling(Gia_Man_t *p)
float Gia_ManLevelAve(Gia_Man_t *p)
int Gia_ManComputeDep(Gia_Man_t *p, int iIn, int iOut)
void Gia_ManPrintCone2(Gia_Man_t *p, Gia_Obj_t *pObj)
void Gia_ManFindMutualEquivsTest()
Gia_Obj_t * Gia_ObjRecognizeMux(Gia_Obj_t *pNode, Gia_Obj_t **ppNodeT, Gia_Obj_t **ppNodeE)
void Gia_ManSetPhasePattern(Gia_Man_t *p, Vec_Int_t *vCiValues)
Vec_Int_t * Gia_ManComputeDistance(Gia_Man_t *p, int iObj, Vec_Int_t *vObjs, int fVerbose)
Vec_Int_t * Gia_ManComputeSlacks(Gia_Man_t *p)
int Gia_ManPoMffcSize(Gia_Man_t *p)
Gia_Man_t * Gia_ManTransformCond2(Gia_Man_t *p)
unsigned * Gia_ManComputePoTruthTables(Gia_Man_t *p, int nBytesMax)
Vec_Int_t * Gia_ManCollectPoIds(Gia_Man_t *p)
int Gia_GetMValue(int i, int nIns, int Mint, unsigned Truth)
void Gia_ManWriteResub(Gia_Man_t *p, char *pFileName)
Vec_Int_t * Gia_ManRequiredLevel(Gia_Man_t *p)
Vec_Wec_t * Gia_ManComputeSharing(Vec_Wec_t *vSupps)
word Gia_ManRandomW(int fReset)
void Gia_ManSetPhase1(Gia_Man_t *p)
void Gia_ManRandomInfo(Vec_Ptr_t *vInfo, int iInputStart, int iWordStart, int iWordStop)
void Gia_ManCreateValueRefs(Gia_Man_t *p)
void Gia_ManSetMark1(Gia_Man_t *p)
Vec_Int_t * Gia_ManGetCiLevels(Gia_Man_t *p)
void Gia_ManDfsForCrossCut_rec(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vNodes)
void Gia_ManPrintCo(Gia_Man_t *p, Gia_Obj_t *pObj)
Gia_Man_t * Gia_ManComputeCofs2(Gia_Man_t *p)
int Gia_ManMarkDangling(Gia_Man_t *p)
Vec_Wec_t * Gia_ManComputeSupports(Gia_Man_t *p)
int Gia_NodeMffcMapping(Gia_Man_t *p)
void Gia_ManDumpSuppFileTest(Gia_Man_t *p, char *pFileName)
Vec_Str_t * Gia_ManConvertDump(Gia_Man_t *p, Vec_Wec_t *vSupps)
int Gia_ManCountPosWithNonZeroDrivers(Gia_Man_t *p)
Vec_Int_t * Gia_ManBfsForCrossCut(Gia_Man_t *p)
Gia_Man_t * Gia_ManComputeDepTest(Gia_Man_t *p)
void Gia_ManCollectObjs_rec(Gia_Man_t *p, int iObjId, Vec_Int_t *vObjs, int Limit)
int Gia_ObjRecognizeMuxLits(Gia_Man_t *p, Gia_Obj_t *pNode, int *iLitT, int *iLitE)
int Gia_ManLevelRNum(Gia_Man_t *p)
void Gia_ManUpdateCopy(Vec_Int_t *vCopy, Gia_Man_t *p)
int Gia_ManCompare(Gia_Man_t *p1, Gia_Man_t *p2)
void Gia_ManPrint(Gia_Man_t *p)
void Gia_ManLoadValue(Gia_Man_t *p, Vec_Int_t *vValues)
Vec_Wrd_t * Vec_WrdInterleave(Vec_Wrd_t *p1, Vec_Wrd_t *p2, int nWords, int nIns)
void Gia_ManCheckMark0(Gia_Man_t *p)
int Gia_ManSumTotalOfSupportSizes2(Gia_Man_t *p)
void Gia_ManPrintCollect2_rec(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vNodes)
Vec_Int_t * Gia_ManComputeDistanceInt(Gia_Man_t *p, int iTarg, Vec_Int_t *vObjs, int fVerbose)
void Gia_ManInvertPos(Gia_Man_t *pAig)
int Gia_ObjIsMuxType(Gia_Obj_t *pNode)
Gia_Man_t * Gia_ManDupInsertWindows(Gia_Man_t *p, Vec_Ptr_t *vvIns, Vec_Ptr_t *vvOuts, Vec_Ptr_t *vWins)
void Gia_ObjPrint(Gia_Man_t *p, Gia_Obj_t *pObj)
void Gia_ManFillValue(Gia_Man_t *p)
int Gia_ManCheckCoPhase(Gia_Man_t *p)
int Gia_ManHasChoices_very_old(Gia_Man_t *p)
void Gia_ManDumpSuppFile(Vec_Str_t *p, char *pFileName)
int Gia_NodeMffcSize(Gia_Man_t *p, Gia_Obj_t *pNode)
Vec_Int_t * Gia_ManGroupProve(Gia_Man_t *pInit, char *pCommLine, int nGroupSize, int fVerbose)
Vec_Int_t * Gia_ManDfsForCrossCut(Gia_Man_t *p, int fReverse)
Gia_Man_t * Gia_ManComputeCofs(Gia_Man_t *p, int nVars)
void Gia_ManCleanValue(Gia_Man_t *p)
void Gia_ManCleanPhase(Gia_Man_t *p)
int Gia_ManCheckSuppOverlap(Gia_Man_t *p, int iNode1, int iNode2)
void Gia_ManPrintCollect_rec(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vNodes)
void Gia_ManCleanMark0(Gia_Man_t *p)
int Gia_ManCheckSupp_rec(Gia_Man_t *p, Gia_Obj_t *pObj)
void Gia_ManCleanTruth(Gia_Man_t *p)
int Gia_ManCrossCut(Gia_Man_t *p, int fReverse)
int Gia_ManWindowCheckTopoError_rec(Gia_Man_t *p, Gia_Obj_t *pObj)
Vec_Wrd_t * Gia_ManDetectSims(Gia_Man_t *p, int iCo, int nWords)
int Gia_ManSetLevels(Gia_Man_t *p, Vec_Int_t *vCiLevels)
int Gia_NodeMffcMapping_rec(Gia_Man_t *p, int iObj, Vec_Int_t *vMapping, Vec_Int_t *vSupp)
void Gia_DumpLutSizeDistrib(Gia_Man_t *p, char *pFileName)
Gia_Man_t * Gia_ManComputeDepAig(Gia_Man_t *p, int iIn, int iOut)
int Gia_ObjRecognizeExor(Gia_Obj_t *pObj, Gia_Obj_t **ppFan0, Gia_Obj_t **ppFan1)
Vec_Int_t * Gia_ManGetDangling(Gia_Man_t *p)
void Gia_ManCreateRefs(Gia_Man_t *p)
void Gia_ManCleanLevels(Gia_Man_t *p, int Size)
void Gia_ManConvertSupp_rec(Gia_Man_t *pNew, Gia_Man_t *p, Gia_Obj_t *pObj)
void Gia_ManIncrementTravId(Gia_Man_t *p)
void Gia_ManCheckMark1(Gia_Man_t *p)
int Gia_ManWindowCheckTopoError(Gia_Man_t *p, Vec_Int_t *vIns, Vec_Int_t *vOuts)
void Gia_ManPrintCo_rec(Gia_Man_t *p, Gia_Obj_t *pObj)
Vec_Int_t * Gia_ManReverseLevel(Gia_Man_t *p)
Gia_Man_t * Gia_ManCreateDualOutputMiter(Gia_Man_t *p0, Gia_Man_t *p1)
void Gia_NodeCollect_rec(Gia_Man_t *p, Gia_Obj_t *pNode, Vec_Int_t *vSupp)
Vec_Int_t * Gia_ManPoXSim(Gia_Man_t *p, int nFrames, int fVerbose)
void Gia_ManInvertConstraints(Gia_Man_t *pAig)
void Gia_ManSetPhase(Gia_Man_t *p)
Vec_Int_t * Gia_ManFirstFanouts(Gia_Man_t *p)
void Gia_ManRingAdd(Gia_Man_t *p, int iObj, Vec_Int_t *vRes, Vec_Int_t *vDists, int Dist)
void Gia_ManCheckSuppUnmark_rec(Gia_Man_t *p, Gia_Obj_t *pObj)
int Gia_ManSumTotalOfSupportSizes(Gia_Man_t *p)
void Gia_ManPrintCone(Gia_Man_t *p, Gia_Obj_t *pObj, int *pLeaves, int nLeaves, Vec_Int_t *vNodes)
void Gia_ManTestProblem()
void Gia_ManCleanMark01(Gia_Man_t *p)
int Gia_ManLevelNum(Gia_Man_t *p)
char * Gia_FileNameGenericAppend(char *pBase, char *pSuffix)
Vec_Int_t * Gia_ManFindMutualEquivs(Gia_Man_t *p0, Gia_Man_t *p1, int nConflictLimit, int fVerbose)
void Gia_ManPrintConeMulti(Gia_Man_t *p, Vec_Int_t *vObjs, Vec_Int_t *vLeaves, Vec_Int_t *vNodes)
Gia_Man_t * Gia_ManTransformCond(Gia_Man_t *p)
void Gia_ManDumpSuppFileTest3(Gia_Man_t *p, char *pFileName)
unsigned Gia_ManRandom(int fReset)
FUNCTION DEFINITIONS ///.
Vec_Ptr_t * Gia_GetFakeNames(int nNames, int fCaps)
void Gia_ManSetMark0(Gia_Man_t *p)
int Gia_NodeMffcSizeMark(Gia_Man_t *p, Gia_Obj_t *pNode)
void Gia_ManMarkFanoutDrivers(Gia_Man_t *p)
int Gia_NodeRef_rec(Gia_Man_t *p, Gia_Obj_t *pNode, int fMark)
Vec_Int_t * Gia_ManSaveValue(Gia_Man_t *p)
void Gia_ManCleanMark1(Gia_Man_t *p)
struct Gia_Rpr_t_ Gia_Rpr_t
void Gia_ManStop(Gia_Man_t *p)
Gia_Man_t * Gia_ManDup(Gia_Man_t *p)
Vec_Wrd_t * Gia_ManSimPatSimOut(Gia_Man_t *pGia, Vec_Wrd_t *vSimsPi, int fOuts)
#define Gia_ManForEachRo(p, pObj, i)
void Gia_ManStaticFanoutStart(Gia_Man_t *p)
void Gia_ManStaticFanoutStop(Gia_Man_t *p)
#define Gia_ManForEachPo(p, pObj, i)
#define Gia_ManForEachAnd(p, pObj, i)
#define Gia_ManForEachAndReverse(p, pObj, i)
#define Gia_ManForEachCoReverse(p, pObj, i)
Gia_Man_t * Gia_AigerRead(char *pFileName, int fGiaSimple, int fSkipStrash, int fCheck)
#define Gia_LutForEachFanin2(p, i, iFan, k)
#define Gia_ManForEachCoDriverId(p, DriverId, i)
void Gia_ManHashAlloc(Gia_Man_t *p)
#define Gia_ManForEachObjReverse(p, pObj, i)
#define Gia_ManForEachPi(p, pObj, i)
#define Gia_ManForEachLut(p, i)
Gia_Man_t * Gia_ManStart(int nObjsMax)
FUNCTION DEFINITIONS ///.
struct Gia_Obj_t_ Gia_Obj_t
#define Gia_LutForEachFanin(p, i, iFan, k)
#define Gia_ClassForEachObj(p, i, iObj)
struct Gia_Man_t_ Gia_Man_t
word Gia_LutComputeTruth6(Gia_Man_t *p, int iObj, Vec_Wrd_t *vTruths)
#define Gia_ManForEachObjVec(vVec, p, pObj, i)
Gia_Man_t * Gia_ManDupCones(Gia_Man_t *p, int *pPos, int nPos, int fTrimPis)
#define Gia_ManForEachClass(p, i)
Gia_Man_t * Gia_ManCleanup(Gia_Man_t *p)
Vec_Vec_t * Gia_ManLevelize(Gia_Man_t *p)
int Gia_ManLutSizeMax(Gia_Man_t *p)
int Gia_ManLutNum(Gia_Man_t *p)
void Gia_ManCollectTfi(Gia_Man_t *p, Vec_Int_t *vRoots, Vec_Int_t *vNodes)
int Gia_ManHashAnd(Gia_Man_t *p, int iLit0, int iLit1)
#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)
void Gia_ManHashStop(Gia_Man_t *p)
Vec_Int_t * Gia_ManCollectNodesCis(Gia_Man_t *p, int *pNodes, int nNodes)
#define Gia_ManForEachRi(p, pObj, i)
unsigned __int64 word
DECLARATIONS ///.
word M(word f1, word f2, int n)
unsigned pTruth[MAX_LUT_SIZE< 6?1:(1<<(MAX_LUT_SIZE-5))]
typedefABC_NAMESPACE_HEADER_START struct Vec_Bit_t_ Vec_Bit_t
INCLUDES ///.
#define Vec_IntForEachEntryDouble(vVec, Entry1, Entry2, i)
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
#define Vec_IntForEachEntryStop(vVec, Entry, i, Stop)
#define Vec_PtrForEachEntryStart(Type, vVec, pEntry, i, Start)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
#define Vec_VecForEachLevel(vGlob, vVec, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.
#define Vec_WecForEachLevel(vGlob, vVec, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Wec_t_ Vec_Wec_t
INCLUDES ///.
#define Vec_WecForEachLevelTwo(vGlob1, vGlob2, vVec1, vVec2, i)
typedefABC_NAMESPACE_HEADER_START struct Vec_Wrd_t_ Vec_Wrd_t
INCLUDES ///.
Gia_Man_t * Cec4_ManSimulateTest3(Gia_Man_t *p, int nBTLimit, int fVerbose)