49 assert( !Hop_IsComplement(pObj) );
52 assert( ((
unsigned)(ABC_PTRUINT_T)pObj->
pData) & 0xffff0000 );
56 if ( Hop_ObjIsConst1(pObj) )
60 assert( Hop_ObjIsAnd(pObj) );
109 assert( ((
unsigned)(ABC_PTRUINT_T)pFanin->
pCopy) & 0xffff0000 );
110 Hop_ManPi( pManHop, k )->pData = pFanin->
pCopy;
140 unsigned * pTruth, * pTruth0, * pTruth1;
141 assert( !Hop_IsComplement(pObj) );
144 assert( ((
unsigned)(ABC_PTRUINT_T)pObj->
pData) & 0xffff0000 );
145 return (
unsigned *)pObj->
pData;
148 pTruth = (
unsigned *)Vec_PtrEntry( vTtNodes, (*piCount)++ );
149 if ( Hop_ObjIsConst1(pObj) )
150 Kit_TruthFill( pTruth, nVars );
153 assert( Hop_ObjIsAnd(pObj) );
155 pTruth0 =
Lpk_CutTruth_rec( pMan, Hop_ObjFanin0(pObj), nVars, vTtNodes, piCount );
156 pTruth1 =
Lpk_CutTruth_rec( pMan, Hop_ObjFanin1(pObj), nVars, vTtNodes, piCount );
158 Kit_TruthAndPhase( pTruth, pTruth0, pTruth1, nVars, Hop_ObjFaninC0(pObj), Hop_ObjFaninC1(pObj) );
160 pObj->
pData = pTruth;
181 unsigned * pTruth = NULL;
182 int i, k, iCount = 0;
200 assert( ((
unsigned)(ABC_PTRUINT_T)pFanin->
pCopy) & 0xffff0000 );
201 Hop_ManPi( pManHop, k )->pData = pFanin->
pCopy;
206 Kit_TruthNot( pTruth, pTruth, pCut->
nLeaves );
214 pTruth = (
unsigned *)Vec_PtrEntry(
p->vTtNodes, iCount++ );
215 Kit_TruthCopy( pTruth, (
unsigned *)(ABC_PTRUINT_T)pObj->
pCopy, pCut->
nLeaves );
217 assert( iCount <= Vec_PtrSize(
p->vTtNodes) );
236 Vec_Ptr_t * vNodes = Vec_VecEntry(
p->vVisited,
p->pObj->Id );
240 Vec_PtrClear( vNodes );
241 for ( i = 0; i <
p->nCuts; i++ )
244 for ( k = 0; k < (int)pCut->
nLeaves; k++ )
246 pNode = Abc_NtkObj(
p->pNtk, pCut->
pLeaves[k] );
250 Vec_PtrPush( vNodes, (
void *)(ABC_PTRUINT_T)pNode->
Id );
251 Vec_PtrPush( vNodes, (
void *)(ABC_PTRUINT_T)Abc_ObjFanoutNum(pNode) );
257 pNode = Abc_NtkObj(
p->pNtk, (
int)(ABC_PTRUINT_T)pNode );
278 int i, k, nCands, fLeavesOnly, RetValue;
296 p->pRefs[(int)(ABC_PTRUINT_T)pFanin->
pCopy]++;
300 p->pCands[nCands++] = pObj->
Id;
304 for ( i = 0; i < nCands; i++ )
306 pObj = Abc_NtkObj(
p->pNtk,
p->pCands[i] );
310 if (
p->pRefs[(
int)(ABC_PTRUINT_T)pFanin->
pCopy] > 1 )
313 if ( k == Abc_ObjFaninNum(pObj) )
339 for ( i = 0; i < (int)pDom->
nLeaves; i++ )
341 for ( k = 0; k < (int)pCut->
nLeaves; k++ )
368 for ( i = 0; i < nCuts; i++ )
377 for ( k = 0; k < (int)pCutNew->
nLeaves; k++ )
380 if ( k == (
int)pCutNew->
nLeaves )
393 if ( Lpk_NodeCutsOneDominance( pCut, pCutNew ) )
405 if ( Lpk_NodeCutsOneDominance( pCutNew, pCut ) )
427 printf(
"LEAVES:\n" );
429 printf(
"%d,", pObj->
Id );
432 printf(
"\nNODES:\n" );
435 printf(
"%d,", pObj->
Id );
436 assert( Abc_ObjIsNode(pObj) );
457 for ( i = 0; i < pCut->
nLeaves; i++ )
481 int i, k, j, nLeavesNew;
492 pObj = Abc_NtkObj(
p->pNtk, Node );
493 if ( Abc_ObjIsCi(pObj) )
495 assert( Abc_ObjIsNode(pObj) );
499 if ( !Abc_NodeIsTravIdCurrent(pObj) )
501 if ( (
int)pCut->
nNodesDup ==
p->pPars->nLutsOver )
507 nLeavesNew = pCut->
nLeaves - 1;
510 if ( (pCut->
uSign[(pFanin->
Id & 32) > 0] & (1 << (pFanin->
Id & 31))) )
512 if ( ++nLeavesNew >
p->pPars->nVarsMax )
518 pCutNew =
p->pCuts +
p->nCuts;
520 for ( i = 0; i < (int)pCut->
nLeaves; i++ )
521 if ( pCut->
pLeaves[i] != Node )
528 for ( k = 0; k < (int)pCutNew->
nLeaves; k++ )
534 if ( (
int)pCutNew->
nLeaves ==
p->pPars->nVarsMax )
537 for ( j = pCutNew->
nLeaves; j > k; j-- )
557 for ( i = 0; i < (int)pCutNew->
nNodes; i++ )
558 if ( pCutNew->
pNodes[i] == Node )
560 for ( k = i; k < (int)pCutNew->
nNodes - 1; k++ )
562 pCutNew->
pNodes[k] = Node;
565 if ( i == (
int)pCutNew->
nNodes )
568 pCutNew->
nNodesDup += !Abc_NodeIsTravIdCurrent(pObj);
596 if ( Abc_NodeIsTravIdCurrent(pFanin) )
622 int i, k, Temp, nMffc, fChanges;
626 Vec_PtrClear(
p->vTemp );
638 pCut =
p->pCuts;
p->nCuts = 1;
647 for ( i = 0; i <
p->nCuts; i++ )
654 for ( k = 0; k < (int)pCut->
nLeaves; k++ )
669 if (
p->pPars->fSatur )
674 for ( i = 0; i <
p->nCuts; i++ )
681 pCut->
nLuts = Lpk_LutNumLuts( pCut->
nLeaves,
p->pPars->nLutSize );
684 if ( pCut->
Weight <= 1.001 )
690 p->pEvals[
p->nEvals++] = i;
695 if (
p->nEvals == 0 )
701 for ( i = 0; i <
p->nEvals - 1; i++ )
703 pCut =
p->pCuts +
p->pEvals[i];
704 pCut2 =
p->pCuts +
p->pEvals[i+1];
708 p->pEvals[i] =
p->pEvals[i+1];
709 p->pEvals[i+1] = Temp;
712 }
while ( fChanges );
struct Abc_Obj_t_ Abc_Obj_t
#define Abc_ObjForEachFanin(pObj, pFanin, i)
ABC_DLL int Abc_NodeMffcLabel(Abc_Obj_t *pNode, Vec_Ptr_t *vNodes)
struct Abc_Ntk_t_ Abc_Ntk_t
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
CloudNode * Cloud_bddAnd(CloudManager *dd, CloudNode *f, CloudNode *g)
typedefABC_NAMESPACE_HEADER_START struct cloudManager CloudManager
struct cloudNode CloudNode
#define Cloud_NotCond(p, c)
typedefABC_NAMESPACE_HEADER_START struct Hop_Man_t_ Hop_Man_t
INCLUDES ///.
void Hop_ObjCleanData_rec(Hop_Obj_t *pObj)
struct Hop_Obj_t_ Hop_Obj_t
CloudNode * Lpk_CutTruthBdd(Lpk_Man_t *p, Lpk_Cut_t *pCut)
int Lpk_CountSupp(Abc_Ntk_t *p, Vec_Ptr_t *vNodes)
void Lpk_NodePrintCut(Lpk_Man_t *p, Lpk_Cut_t *pCut, int fLeavesOnly)
void Lpk_NodeCutsOne(Lpk_Man_t *p, Lpk_Cut_t *pCut, int Node)
int Lpk_NodeCutsCheckDsd(Lpk_Man_t *p, Lpk_Cut_t *pCut)
unsigned * Lpk_CutTruth_rec(Hop_Man_t *pMan, Hop_Obj_t *pObj, int nVars, Vec_Ptr_t *vTtNodes, int *piCount)
void Lpk_NodeCutSignature(Lpk_Cut_t *pCut)
ABC_NAMESPACE_IMPL_START CloudNode * Lpk_CutTruthBdd_rec(CloudManager *dd, Hop_Man_t *pMan, Hop_Obj_t *pObj, int nVars)
DECLARATIONS ///.
int Lpk_NodeCuts(Lpk_Man_t *p)
void Lpk_NodeRecordImpact(Lpk_Man_t *p)
unsigned * Lpk_CutTruth(Lpk_Man_t *p, Lpk_Cut_t *pCut, int fInv)
int Lpk_NodeCutsOneFilter(Lpk_Cut_t *pCuts, int nCuts, Lpk_Cut_t *pCutNew)
#define Lpk_CutForEachNodeReverse(pNtk, pCut, pObj, i)
#define Lpk_CutForEachLeaf(pNtk, pCut, pObj, i)
MACRO DEFINITIONS ///.
#define LPK_SIZE_MAX
INCLUDES ///.
#define Lpk_CutForEachNode(pNtk, pCut, pObj, i)
struct Lpk_Man_t_ Lpk_Man_t
struct Lpk_Cut_t_ Lpk_Cut_t
int pLeaves[LPK_SIZE_MAX]
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 ///.