111static inline int Dar_LibObjTruth(
Dar_LibObj_t * pObj ) {
return pObj->
Num < (0xFFFF & ~pObj->Num) ? pObj->
Num : (0xFFFF & ~pObj->Num); }
130 unsigned uTruths[4] = { 0xAAAA, 0xCCCC, 0xF0F0, 0xFF00 };
144 for ( i = 0; i < 4; i++ )
146 p->pObjs[i].fTerm = 1;
147 p->pObjs[i].Num = uTruths[i];
196 return s_DarLib->pMap[uTruth & 0xffff];
213 int Visits[222] = {0};
216 for ( i = k = 0; i < (1<<16); i++ )
217 if ( !Visits[s_DarLib->pMap[i]] )
219 Visits[s_DarLib->pMap[i]] = 1;
220 pCanons[k++] = ((i<<16) | i);
246 pObj->
Num = 0xFFFF & (fCompl0? ~pFan0->Num : pFan0->
Num) & (fCompl1? ~pFan1->
Num : pFan1->
Num);
262 if ( pObj->
fTerm || (
int)pObj->
Num == Class )
268 p->pNodes[Class][
p->nNodes[Class]++ ] = pObj-
p->pObjs;
288 int nNodesTotal, uTruth, Class, Out, i, k;
292 for ( i = 0; i < 222; i++ )
293 p->nSubgr[i] =
p->nNodes[i] = 0;
296 pObj = Dar_LibObj(
p, Out );
297 uTruth = Dar_LibObjTruth( pObj );
298 Class =
p->pMap[uTruth];
302 p->pSubgrMem =
ABC_ALLOC(
int, Vec_IntSize(vOuts) );
303 p->pSubgr0Mem =
ABC_ALLOC(
int, Vec_IntSize(vOuts) );
305 for ( i = 0; i < 222; i++ )
307 p->pSubgr[i] =
p->pSubgrMem +
p->nSubgrTotal;
308 p->pSubgr0[i] =
p->pSubgr0Mem +
p->nSubgrTotal;
309 p->nSubgrTotal +=
p->nSubgr[i];
312 assert(
p->nSubgrTotal == Vec_IntSize(vOuts) );
316 pObj = Dar_LibObj(
p, Out );
317 uTruth = Dar_LibObjTruth( pObj );
318 Class =
p->pMap[uTruth];
319 p->pSubgr[Class][
p->nSubgr[Class]++ ] = Out;
325 p->pPriosMem =
ABC_ALLOC(
int, Vec_IntSize(vOuts) );
327 for ( i = 0; i < 222; i++ )
329 p->pPrios[i] =
p->pPriosMem +
p->nSubgrTotal;
330 p->nSubgrTotal +=
p->nSubgr[i];
331 for ( k = 0; k <
p->nSubgr[i]; k++ )
335 assert(
p->nSubgrTotal == Vec_IntSize(vOuts) );
338 p->pPlaceMem =
ABC_ALLOC(
int, Vec_IntSize(vOuts) );
340 for ( i = 0; i < 222; i++ )
342 p->pPlace[i] =
p->pPlaceMem +
p->nSubgrTotal;
343 p->nSubgrTotal +=
p->nSubgr[i];
344 for ( k = 0; k <
p->nSubgr[i]; k++ )
348 assert(
p->nSubgrTotal == Vec_IntSize(vOuts) );
351 p->pScoreMem =
ABC_ALLOC(
int, Vec_IntSize(vOuts) );
353 for ( i = 0; i < 222; i++ )
355 p->pScore[i] =
p->pScoreMem +
p->nSubgrTotal;
356 p->nSubgrTotal +=
p->nSubgr[i];
357 for ( k = 0; k <
p->nSubgr[i]; k++ )
361 assert(
p->nSubgrTotal == Vec_IntSize(vOuts) );
367 p->pPriosMem =
ABC_ALLOC(
int, Vec_IntSize(vOuts) );
369 for ( i = 0; i < 222; i++ )
371 p->pPrios[i] =
p->pPriosMem +
p->nSubgrTotal;
372 p->nSubgrTotal +=
p->nSubgr[i];
373 for ( k = 0; k <
p->nSubgr[i]; k++ )
374 p->pPrios[i][k] = Vec_IntEntry(vPrios, Counter++);
377 assert(
p->nSubgrTotal == Vec_IntSize(vOuts) );
378 assert( Counter == Vec_IntSize(vPrios) );
382 for ( i = 0; i <
p->iObj; i++ )
383 Dar_LibObj(
p, i)->Num = 0xff;
385 for ( i = 0; i < 222; i++ )
386 for ( k = 0; k <
p->nSubgr[i]; k++ )
390 for ( i = 0; i < 222; i++ )
391 p->nNodesTotal +=
p->nNodes[i];
396 for ( i = 0; i < 222; i++ )
398 p->pNodes[i] =
p->pNodesMem +
p->nNodesTotal;
399 p->pNodes0[i] =
p->pNodes0Mem +
p->nNodesTotal;
400 p->nNodesTotal +=
p->nNodes[i];
404 for ( i = 0; i <
p->iObj; i++ )
405 Dar_LibObj(
p, i)->Num = 0xff;
408 for ( i = 0; i < 222; i++ )
410 for ( k = 0; k <
p->nSubgr[i]; k++ )
412 nNodesTotal +=
p->nNodes[i];
415 assert( nNodesTotal ==
p->nNodesTotal );
417 for ( i = 0; i < 4; i++ )
418 Dar_LibObj(
p, i)->Num = i;
434 if (
p->nDatas == nDatas )
456 if ( pObj->
fTerm || (
int)pObj->
Num == Class )
462 p->pNodes0[Class][
p->nNodes0[Class]++ ] = pObj-
p->pObjs;
481 int i, k, nNodes0Total;
482 if (
p->nSubgraphs == nSubgraphs )
493 for ( i = 0; i < 222; i++ )
497 p->nSubgr0[i] =
p->nSubgr[i];
499 p->nSubgr0[i] = Abc_MinInt(
p->nSubgr[i], nSubgraphs );
500 p->nSubgr0Total +=
p->nSubgr0[i];
501 for ( k = 0; k <
p->nSubgr0[i]; k++ )
502 p->pSubgr0[i][k] =
p->pSubgr[i][
p->pPrios[i][k] ];
507 for ( i = 0; i < 222; i++ )
510 for ( i = 0; i <
p->iObj; i++ )
511 Dar_LibObj(
p, i)->Num = 0xff;
516 for ( i = 0; i < 222; i++ )
518 for ( k = 0; k <
p->nSubgr0[i]; k++ )
520 p->nNodes0Total +=
p->nNodes0[i];
521 p->nNodes0Max = Abc_MaxInt(
p->nNodes0Max,
p->nNodes0[i] );
525 for ( i = 0; i < 222; i++ )
528 for ( i = 0; i <
p->iObj; i++ )
529 Dar_LibObj(
p, i)->Num = 0xff;
532 for ( i = 0; i < 222; i++ )
534 for ( k = 0; k <
p->nSubgr0[i]; k++ )
536 nNodes0Total +=
p->nNodes0[i];
538 assert( nNodes0Total ==
p->nNodes0Total );
540 for ( i = 0; i < 4; i++ )
541 Dar_LibObj(
p, i)->Num = i;
571 for ( i = 0; i < vObjs->nSize; i += 2 )
573 vObjs->pArray[i] & 1, vObjs->pArray[i+1] & 1 );
576 Vec_IntFree( vObjs );
577 Vec_IntFree( vOuts );
578 Vec_IntFree( vPrios );
596 if ( s_DarLib != NULL )
598 assert( s_DarLib == NULL );
617 assert( s_DarLib != NULL );
635 int * pPrios = s_DarLib->pPrios[Class];
636 int * pPlace = s_DarLib->pPlace[Class];
637 int * pScore = s_DarLib->pScore[Class];
639 assert( Class >= 0 && Class < 222 );
640 assert( Out >= 0 && Out < s_DarLib->nSubgr[Class] );
641 assert( pPlace[pPrios[Out]] == Out );
645 while ( pPlace[Out] > 0 && pScore[Out] > pScore[ pPrios[pPlace[Out]-1] ] )
648 Out2 = pPrios[pPlace[Out]-1];
652 pPrios[pPlace[Out]] = Out;
653 pPrios[pPlace[Out2]] = Out2;
670 int i, k, Out, Out2, Counter = 0, Printed = 0;
671 printf(
"\nOutput priorities (total = %d):\n", s_DarLib->nSubgrTotal );
672 for ( i = 0; i < 222; i++ )
675 for ( k = 0; k < s_DarLib->nSubgr[i]; k++ )
677 Out = s_DarLib->pPrios[i][k];
678 Out2 = k == 0 ? Out : s_DarLib->pPrios[i][k-1];
679 assert( s_DarLib->pScore[i][Out2] >= s_DarLib->pScore[i][Out] );
681 printf(
"%d, ", Out );
683 if ( ++Counter == 15 )
691 assert( Printed == s_DarLib->nSubgrTotal );
714 uPhase = s_DarLib->pPhases[pCut->
uTruth];
715 pPerm = s_DarLib->pPerms4[ (int)s_DarLib->pPerms[pCut->
uTruth] ];
717 for ( i = 0; i < (int)pCut->
nLeaves; i++ )
719 pFanin = Aig_ManObj(
p->pAig, pCut->
pLeaves[ (
int)pPerm[i] ] );
720 if ( pFanin == NULL )
725 pFanin = Aig_NotCond(pFanin, ((uPhase >> i) & 1) );
726 s_DarLib->pDatas[i].pFunc = pFanin;
727 s_DarLib->pDatas[i].
Level = Aig_Regular(pFanin)->Level;
729 if (
p->pPars->fPower )
731 float Prob = Abc_Int2Float( Vec_IntEntry(
p->pAig->vProbs, Aig_ObjId(Aig_Regular(pFanin)) ) );
732 s_DarLib->pDatas[i].dProb = Aig_IsComplement(pFanin)? 1.0-Prob : Prob;
756 for ( i = 0; i < nLeaves; i++ )
757 Aig_Regular(s_DarLib->pDatas[i].pFunc)->nRefs++;
761 for ( i = 0; i < nLeaves; i++ )
762 Aig_Regular(s_DarLib->pDatas[i].pFunc)->nRefs--;
781 printf(
"%c",
'a' + (
int)(pObj - s_DarLib->pObjs) );
812 for ( i = 0; i < s_DarLib->nNodes0[Class]; i++ )
815 pObj = Dar_LibObj(s_DarLib, s_DarLib->pNodes0[Class][i]);
817 assert( (
int)pObj->
Num < s_DarLib->nNodes0Max + 4 );
818 pData = s_DarLib->pDatas + pObj->
Num;
824 assert( (
int)Dar_LibObj(s_DarLib, pObj->
Fan0)->Num < s_DarLib->nNodes0Max + 4 );
825 assert( (
int)Dar_LibObj(s_DarLib, pObj->
Fan1)->Num < s_DarLib->nNodes0Max + 4 );
826 pData0 = s_DarLib->pDatas + Dar_LibObj(s_DarLib, pObj->
Fan0)->Num;
827 pData1 = s_DarLib->pDatas + Dar_LibObj(s_DarLib, pObj->
Fan1)->Num;
829 if ( pData0->
pFunc == NULL || pData1->
pFunc == NULL )
833 if ( Aig_Regular(pFanin0) == pRoot || Aig_Regular(pFanin1) == pRoot )
839 pData->
Level = Aig_Regular(pData->
pFunc)->Level;
841 pData->
fMffc = Aig_ObjIsTravIdCurrent(
p->pAig, Aig_Regular(pData->
pFunc));
843 if (
p->pPars->fPower )
845 float Prob = Abc_Int2Float( Vec_IntEntry(
p->pAig->vProbs, Aig_ObjId(Aig_Regular(pData->
pFunc)) ) );
846 pData->
dProb = Aig_IsComplement(pData->
pFunc)? 1.0-Prob : Prob;
866 float Power0, Power1;
869 *pPower = (float)0.0;
870 pData = s_DarLib->pDatas + pObj->
Num;
871 if ( pData->
TravId == Out )
877 *pPower = pData->
dProb;
881 if ( pData->
Level > Required )
886 *pPower = pData->
dProb;
891 Area =
Dar_LibEval_rec( Dar_LibObj(s_DarLib, pObj->
Fan0), Out, nNodesSaved, Required+1, pPower? &Power0 : NULL );
892 if ( Area > nNodesSaved )
894 Area +=
Dar_LibEval_rec( Dar_LibObj(s_DarLib, pObj->
Fan1), Out, nNodesSaved, Required+1, pPower? &Power1 : NULL );
895 if ( Area > nNodesSaved )
899 Dar_LibDat_t * pData0 = s_DarLib->pDatas + Dar_LibObj(s_DarLib, pObj->
Fan0)->Num;
900 Dar_LibDat_t * pData1 = s_DarLib->pDatas + Dar_LibObj(s_DarLib, pObj->
Fan1)->Num;
903 *pPower = Power0 + 2.0 * pData0->
dProb * (1.0 - pData0->
dProb) +
904 Power1 + 2.0 * pData1->
dProb * (1.0 - pData1->
dProb);
923 float PowerSaved, PowerAdded;
925 int Out, k, Class, nNodesSaved, nNodesAdded, nNodesGained;
935 Class = s_DarLib->pMap[pCut->
uTruth];
938 p->nTotalSubgs += s_DarLib->nSubgr0[Class];
939 p->ClassSubgs[Class] += s_DarLib->nSubgr0[Class];
940 for ( Out = 0; Out < s_DarLib->nSubgr0[Class]; Out++ )
942 pObj = Dar_LibObj(s_DarLib, s_DarLib->pSubgr0[Class][Out]);
943 if ( Aig_Regular(s_DarLib->pDatas[pObj->
Num].pFunc) == pRoot )
945 nNodesAdded =
Dar_LibEval_rec( pObj, Out, nNodesSaved - !
p->pPars->fUseZeros, Required,
p->pPars->fPower? &PowerAdded : NULL );
946 nNodesGained = nNodesSaved - nNodesAdded;
947 if (
p->pPars->fPower && PowerSaved < PowerAdded )
949 if ( fTraining && nNodesGained >= 0 )
951 if ( nNodesGained < 0 || (nNodesGained == 0 && !
p->pPars->fUseZeros) )
953 if ( nNodesGained < p->GainBest ||
954 (nNodesGained ==
p->GainBest && s_DarLib->pDatas[pObj->
Num].Level >=
p->LevelBest) )
957 Vec_PtrClear(
p->vLeavesBest );
958 for ( k = 0; k < (int)pCut->
nLeaves; k++ )
959 Vec_PtrPush(
p->vLeavesBest, s_DarLib->pDatas[k].pFunc );
960 p->OutBest = s_DarLib->pSubgr0[Class][Out];
962 p->LevelBest = s_DarLib->pDatas[pObj->
Num].Level;
963 p->GainBest = nNodesGained;
964 p->ClassBest = Class;
965 assert(
p->LevelBest <= Required );
966 *pnMffcSize = nNodesSaved;
968clk = Abc_Clock() - clk;
969p->ClassTimes[Class] += clk;
988 pObj->
Num = (*pCounter)++;
989 s_DarLib->pDatas[ pObj->
Num ].pFunc = NULL;
1010 return pData->
pFunc;
1013 pFanin0 = Aig_NotCond( pFanin0, pObj->
fCompl0 );
1014 pFanin1 = Aig_NotCond( pFanin1, pObj->
fCompl1 );
1017 return pData->
pFunc;
1034 for ( i = 0; i < Vec_PtrSize(
p->vLeavesBest); i++ )
1035 s_DarLib->pDatas[i].pFunc = (
Aig_Obj_t *)Vec_PtrEntry(
p->vLeavesBest, i );
1061 assert( Vec_IntSize(vCutLits) == 4 );
1063 uPhase = s_DarLib->pPhases[uTruth];
1064 pPerm = s_DarLib->pPerms4[ (int)s_DarLib->pPerms[uTruth] ];
1066 for ( i = 0; i < Vec_IntSize(vCutLits); i++ )
1071 s_DarLib->pDatas[i].iGunc = Abc_LitNotCond( Vec_IntEntry(vCutLits, (
int)pPerm[i]), ((uPhase >> i) & 1) );
1072 s_DarLib->pDatas[i].Level = Gia_ObjLevel(
p, Gia_Regular(Gia_ObjFromLit(
p, s_DarLib->pDatas[i].iGunc)) );
1092 int iFanin0, iFanin1, i, iLit;
1093 for ( i = 0; i < s_DarLib->nNodes0[Class]; i++ )
1096 pObj = Dar_LibObj(s_DarLib, s_DarLib->pNodes0[Class][i]);
1098 assert( (
int)pObj->
Num < s_DarLib->nNodes0Max + 4 );
1099 pData = s_DarLib->pDatas + pObj->
Num;
1105 assert( (
int)Dar_LibObj(s_DarLib, pObj->
Fan0)->Num < s_DarLib->nNodes0Max + 4 );
1106 assert( (
int)Dar_LibObj(s_DarLib, pObj->
Fan1)->Num < s_DarLib->nNodes0Max + 4 );
1107 pData0 = s_DarLib->pDatas + Dar_LibObj(s_DarLib, pObj->
Fan0)->Num;
1108 pData1 = s_DarLib->pDatas + Dar_LibObj(s_DarLib, pObj->
Fan1)->Num;
1110 if ( pData0->
iGunc == -1 || pData1->
iGunc == -1 )
1112 iFanin0 = Abc_LitNotCond( pData0->
iGunc, pObj->
fCompl0 );
1113 iFanin1 = Abc_LitNotCond( pData1->
iGunc, pObj->
fCompl1 );
1115 if ( iFanin0 == 0 || iFanin1 == 0 || iFanin0 == Abc_LitNot(iFanin1) )
1117 else if ( iFanin0 == 1 || iFanin0 == iFanin1 )
1119 else if ( iFanin1 == 1 )
1127 pData->
iGunc = iLit;
1128 if ( pData->
iGunc >= 0 )
1131 pData->
Level = Gia_ObjLevel(
p, Gia_Regular(Gia_ObjFromLit(
p, pData->
iGunc)) );
1153 pData = s_DarLib->pDatas + pObj->
Num;
1154 if ( pData->
TravId == Out )
1160 if ( pData->
iGunc >= 0 )
1187 int p_OutNumBest = -1;
1188 int p_LevelBest = 1000000;
1189 int p_GainBest = -1000000;
1190 int p_ClassBest = -1;
1193 int Out, k, Class, nNodesSaved, nNodesAdded, nNodesGained;
1195 assert( Vec_IntSize(vCutLits) == 4 );
1196 assert( (uTruth >> 16) == 0 );
1204 Class = s_DarLib->pMap[uTruth];
1209 for ( Out = 0; Out < s_DarLib->nSubgr0[Class]; Out++ )
1211 pObj = Dar_LibObj(s_DarLib, s_DarLib->pSubgr0[Class][Out]);
1214 nNodesGained = nNodesSaved - nNodesAdded;
1217 if ( s_DarLib->pDatas[pObj->
Num].Level > p_LevelBest ||
1218 (s_DarLib->pDatas[pObj->
Num].Level == p_LevelBest && nNodesGained <= p_GainBest) )
1223 if ( nNodesGained < p_GainBest ||
1224 (nNodesGained == p_GainBest && s_DarLib->pDatas[pObj->
Num].Level >= p_LevelBest) )
1228 Vec_IntClear( vLeavesBest2 );
1229 for ( k = 0; k < Vec_IntSize(vCutLits); k++ )
1230 Vec_IntPush( vLeavesBest2, s_DarLib->pDatas[k].iGunc );
1231 p_OutBest = s_DarLib->pSubgr0[Class][Out];
1233 p_LevelBest = s_DarLib->pDatas[pObj->
Num].Level;
1234 p_GainBest = nNodesGained;
1235 p_ClassBest = Class;
1241 assert( p_OutBest != -1 );
1260 pObj->
Num = (*pCounter)++;
1261 s_DarLib->pDatas[ pObj->
Num ].iGunc = -1;
1281 int iFanin0, iFanin1;
1282 pData = s_DarLib->pDatas + pObj->
Num;
1283 if ( pData->
iGunc >= 0 )
1284 return pData->
iGunc;
1287 iFanin0 = Abc_LitNotCond( iFanin0, pObj->
fCompl0 );
1288 iFanin1 = Abc_LitNotCond( iFanin1, pObj->
fCompl1 );
1290 pNode = Gia_ManObj(
p, Abc_Lit2Var(pData->
iGunc) );
1291 if ( Gia_ObjIsAnd( pNode ) )
1292 Gia_ObjSetAndLevel(
p, pNode );
1294 return pData->
iGunc;
1310 int i, iLeaf, Counter = 4;
1311 assert( Vec_IntSize(vLeavesBest2) == 4 );
1313 s_DarLib->pDatas[i].iGunc = iLeaf;
1331 int OutBest =
Dar2_LibEval(
p, vCutLits, uTruth, fKeepLevel, vLeavesBest2 );
#define ABC_ALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
Aig_Obj_t * Aig_And(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
struct Aig_Obj_t_ Aig_Obj_t
int Aig_NodeMffcLabel(Aig_Man_t *p, Aig_Obj_t *pNode, float *pPower)
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
Aig_Obj_t * Aig_TableLookupTwo(Aig_Man_t *p, Aig_Obj_t *pFanin0, Aig_Obj_t *pFanin1)
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Vec_Int_t * Dar_LibReadPrios()
Vec_Int_t * Dar_LibReadNodes()
Vec_Int_t * Dar_LibReadOuts()
typedefABC_NAMESPACE_HEADER_START struct Dar_Man_t_ Dar_Man_t
INCLUDES ///.
void Dar_Truth4VarNPN(unsigned short **puCanons, char **puPhases, char **puPerms, unsigned char **puMap)
struct Dar_Cut_t_ Dar_Cut_t
char ** Dar_Permutations(int n)
struct Dar_LibObj_t_ Dar_LibObj_t
void Dar_LibDumpPriorities()
void Dar2_LibBuildClear_rec(Dar_LibObj_t *pObj, int *pCounter)
int Dar2_LibEval_rec(Dar_LibObj_t *pObj, int Out)
void Dar_LibEval(Dar_Man_t *p, Aig_Obj_t *pRoot, Dar_Cut_t *pCut, int Required, int *pnMffcSize)
struct Dar_LibDat_t_ Dar_LibDat_t
typedefABC_NAMESPACE_IMPL_START struct Dar_Lib_t_ Dar_Lib_t
DECLARATIONS ///.
int Dar2_LibEval(Gia_Man_t *p, Vec_Int_t *vCutLits, unsigned uTruth, int fKeepLevel, Vec_Int_t *vLeavesBest2)
void Dar_LibObjPrint_rec(Dar_LibObj_t *pObj)
int Dar_LibCutMatch(Dar_Man_t *p, Dar_Cut_t *pCut)
void Dar2_LibEvalAssignNums(Gia_Man_t *p, int Class)
Aig_Obj_t * Dar_LibBuildBest_rec(Dar_Man_t *p, Dar_LibObj_t *pObj)
int Dar_LibCutMarkMffc(Aig_Man_t *p, Aig_Obj_t *pRoot, int nLeaves, float *pPower)
int Dar2_LibBuildBest(Gia_Man_t *p, Vec_Int_t *vLeavesBest2, int OutBest)
int Dar_LibEval_rec(Dar_LibObj_t *pObj, int Out, int nNodesSaved, int Required, float *pPower)
void Dar_LibSetup0_rec(Dar_Lib_t *p, Dar_LibObj_t *pObj, int Class, int fCollect)
void Dar_LibStart()
MACRO DEFINITIONS ///.
void Dar_LibFree(Dar_Lib_t *p)
void Dar_LibAddNode(Dar_Lib_t *p, int Id0, int Id1, int fCompl0, int fCompl1)
void Dar_LibCreateData(Dar_Lib_t *p, int nDatas)
int Dar2_LibBuildBest_rec(Gia_Man_t *p, Dar_LibObj_t *pObj)
void Dar_LibBuildClear_rec(Dar_LibObj_t *pObj, int *pCounter)
Dar_Lib_t * Dar_LibAlloc(int nObjs)
FUNCTION DEFINITIONS ///.
Dar_Lib_t * Dar_LibRead()
void Dar_LibReturnCanonicals(unsigned *pCanons)
void Dar_LibIncrementScore(int Class, int Out, int Gain)
void Dar_LibEvalAssignNums(Dar_Man_t *p, int Class, Aig_Obj_t *pRoot)
void Dar_LibPrepare(int nSubgraphs)
void Dar_LibSetup_rec(Dar_Lib_t *p, Dar_LibObj_t *pObj, int Class, int fCollect)
int Dar_LibEvalBuild(Gia_Man_t *p, Vec_Int_t *vCutLits, unsigned uTruth, int fKeepLevel, Vec_Int_t *vLeavesBest2)
DECLARATIONS ///.
Aig_Obj_t * Dar_LibBuildBest(Dar_Man_t *p)
int Dar_LibReturnClass(unsigned uTruth)
int Dar2_LibCutMatch(Gia_Man_t *p, Vec_Int_t *vCutLits, unsigned uTruth)
void Dar_LibSetup(Dar_Lib_t *p, Vec_Int_t *vOuts, Vec_Int_t *vPrios)
void Gia_ObjSetPhase(Gia_Man_t *p, Gia_Obj_t *pObj)
int Gia_ManHashLookup(Gia_Man_t *p, Gia_Obj_t *p0, Gia_Obj_t *p1)
struct Gia_Obj_t_ Gia_Obj_t
struct Gia_Man_t_ Gia_Man_t
int Gia_ManHashAnd(Gia_Man_t *p, int iLit0, int iLit1)
unsigned short * puCanons
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.