49 int nSize =
sizeof(
Cnf_Cut_t) +
sizeof(
int) * nLeaves +
sizeof(unsigned) * Abc_TruthWordNum(nLeaves);
52 pCut->
nWords = Abc_TruthWordNum(nLeaves);
71 Vec_IntFree( pCut->
vIsop[0] );
73 Vec_IntFree( pCut->
vIsop[1] );
92 assert( Aig_ObjIsNode(pObj) );
93 pCutBest = Dar_ObjBestCut( pObj );
94 assert( pCutBest != NULL );
98 pTruth = Cnf_CutTruth(pCut);
100 pCut->
Cost = Cnf_CutSopCost(
p, pCutBest );
119 for ( i = 0; i < pCut->
nFanins; i++ )
120 printf(
"%d ", pCut->
pFanins[i] );
196static inline int Cnf_CutMergeLeaves(
Cnf_Cut_t * pCut,
Cnf_Cut_t * pCutFan,
int * pFanins )
198 int i, k, nFanins = 0;
202 pFanins[nFanins++] = pCut->
pFanins[i], i++, k++;
204 pFanins[nFanins++] = pCut->
pFanins[i], i++;
206 pFanins[nFanins++] = pCutFan->
pFanins[k], k++;
208 for ( ; i < pCut->
nFanins; i++ )
209 pFanins[nFanins++] = pCut->
pFanins[i];
210 for ( ; k < pCutFan->
nFanins; k++ )
211 pFanins[nFanins++] = pCutFan->
pFanins[k];
230 for ( i = k = 0; i < pCut->
nFanins; i++ )
259 for ( i = iVar; i < pCut->
nFanins; i++ )
277 for ( i = pCut->
nFanins; i > iVar; i-- )
297 static int pFanins[32];
298 unsigned * pTruth, * pTruthFan, * pTruthRes;
299 unsigned * pTop =
p->pTruths[0], * pFan =
p->pTruths[2], * pTemp =
p->pTruths[3];
300 unsigned uPhase, uPhaseFan;
301 int i, iVar, nFanins, RetValue;
304 for ( iVar = 0; iVar < pCut->
nFanins; iVar++ )
305 if ( pCut->
pFanins[iVar] == iFan )
307 assert( iVar < pCut->nFanins );
311 nFanins = Cnf_CutMergeLeaves( pCut, pCutFan, pFanins );
312 if ( nFanins+1 >
p->nMergeLimit )
324 pTruth = Cnf_CutTruth(pCut);
325 pTruthFan = Cnf_CutTruth(pCutFan);
326 pTruthRes = Cnf_CutTruth(pCutRes);
327 for ( i = 0; i < 2*pCutRes->
nWords; i++ )
328 pTop[i] = pTruth[i % pCut->
nWords];
329 for ( i = 0; i < pCutRes->
nWords; i++ )
330 pFan[i] = pTruthFan[i % pCutFan->
nWords];
332 uPhase = Kit_BitMask( pCutRes->
nFanins+1 ) & ~(1 << iVar);
335 uPhase = Cnf_TruthPhase( pCutRes, pCut ) | (1 << pCutRes->
nFanins);
336 uPhaseFan = Cnf_TruthPhase( pCutRes, pCutFan );
341 Kit_TruthMux( pTruthRes, pTop, pTop+pCutRes->
nWords, pFan, pCutRes->
nFanins );
347 pCutRes->
Cost =
p->pSopSizes[0xFFFF & *pTruthRes] +
p->pSopSizes[0xFFFF & ~*pTruthRes];
353 pCutRes->
vIsop[1] = (RetValue == -1)? NULL : Vec_IntDup(
p->vMemory );
355 Kit_TruthNot( pTruthRes, pTruthRes, pCutRes->
nFanins );
357 pCutRes->
vIsop[0] = (RetValue == -1)? NULL : Vec_IntDup(
p->vMemory );
358 Kit_TruthNot( pTruthRes, pTruthRes, pCutRes->
nFanins );
361 if ( pCutRes->
vIsop[0] == NULL || pCutRes->
vIsop[1] == NULL )
363 else if ( Vec_IntSize(pCutRes->
vIsop[0]) + Vec_IntSize(pCutRes->
vIsop[1]) > 127 )
366 pCutRes->
Cost = Vec_IntSize(pCutRes->
vIsop[0]) + Vec_IntSize(pCutRes->
vIsop[1]);
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
char * Aig_MmFlexEntryFetch(Aig_MmFlex_t *p, int nBytes)
struct Aig_Obj_t_ Aig_Obj_t
void Cnf_CutDeref(Cnf_Man_t *p, Cnf_Cut_t *pCut)
void Cnf_CutRemoveIthVar(Cnf_Cut_t *pCut, int iVar, int iFan)
ABC_NAMESPACE_IMPL_START Cnf_Cut_t * Cnf_CutAlloc(Cnf_Man_t *p, int nLeaves)
DECLARATIONS ///.
void Cnf_CutUpdateRefs(Cnf_Man_t *p, Cnf_Cut_t *pCut, Cnf_Cut_t *pCutFan, Cnf_Cut_t *pCutRes)
Cnf_Cut_t * Cnf_CutCompose(Cnf_Man_t *p, Cnf_Cut_t *pCut, Cnf_Cut_t *pCutFan, int iFan)
Cnf_Cut_t * Cnf_CutCreate(Cnf_Man_t *p, Aig_Obj_t *pObj)
void Cnf_CutRef(Cnf_Man_t *p, Cnf_Cut_t *pCut)
void Cnf_CutPrint(Cnf_Cut_t *pCut)
void Cnf_CutFree(Cnf_Cut_t *pCut)
void Cnf_CutInsertIthVar(Cnf_Cut_t *pCut, int iVar, int iFan)
typedefABC_NAMESPACE_HEADER_START struct Cnf_Man_t_ Cnf_Man_t
INCLUDES ///.
struct Cnf_Cut_t_ Cnf_Cut_t
#define Cnf_CutForEachLeaf(p, pCut, pLeaf, i)
struct Dar_Cut_t_ Dar_Cut_t
int Kit_TruthIsop(unsigned *puTruth, int nVars, Vec_Int_t *vMemory, int fTryBoth)
void Kit_TruthShrink(unsigned *pOut, unsigned *pIn, int nVars, int nVarsAll, unsigned Phase, int fReturnIn)
void Kit_TruthStretch(unsigned *pOut, unsigned *pIn, int nVars, int nVarsAll, unsigned Phase, int fReturnIn)