53 Cost += Csw_ObjRefs(
p, pLeaf );
57 return Cost * 100 / pCut->
nFanins;
78 Cost += (float)1.0/pLeaf->
nRefs;
102 if ( pCutMax == NULL || pCutMax->
Cost < pCut->
Cost )
105 assert( pCutMax != NULL );
125 for ( i = k = 0; i < pCut->
nFanins; i++ )
153 Kit_TruthNot(
p->puTemp[0], Csw_CutTruth(pCut0),
p->nLeafMax );
155 Kit_TruthCopy(
p->puTemp[0], Csw_CutTruth(pCut0),
p->nLeafMax );
159 Kit_TruthNot(
p->puTemp[1], Csw_CutTruth(pCut1),
p->nLeafMax );
161 Kit_TruthCopy(
p->puTemp[1], Csw_CutTruth(pCut1),
p->nLeafMax );
164 Kit_TruthAnd( Csw_CutTruth(pCut),
p->puTemp[2],
p->puTemp[3],
p->nLeafMax );
166 return Csw_CutTruth(pCut);
183 int uSupp, nFansNew, i, k;
185 pTruth = Csw_CutTruth( pCut );
189 nFansNew = Kit_WordCountOnes( uSupp );
191 if ( nFansNew == pCut->
nFanins )
193 assert( nFansNew < pCut->nFanins );
196 for ( i = k = 0; i < pCut->
nFanins; i++ )
197 if ( uSupp & (1 << i) )
220 for ( i = 0; i < (int)pDom->
nFanins; i++ )
222 for ( k = 0; k < (int)pCut->
nFanins; k++ )
260 if ( Csw_CutCheckDominance( pCut, pTemp ) )
272 if ( Csw_CutCheckDominance( pTemp, pCut ) )
301 for ( i = 0; i < pC0->
nFanins; i++ )
304 for ( i = 0; i < pC0->
nFanins; i++ )
312 for ( i = 0; i < pC1->
nFanins; i++ )
314 for ( k = pC0->
nFanins - 1; k >= 0; k-- )
320 for ( i = 0; i < pC0->
nFanins; i++ )
328 for ( c = 0; c <
p->nLeafMax; c++ )
363 if ( i < pC0->nFanins || k < pC1->nFanins )
386 if ( !Csw_CutMergeOrdered(
p, pCut1, pCut0, pCut ) )
391 if ( !Csw_CutMergeOrdered(
p, pCut0, pCut1, pCut ) )
412 int nVars, uTruth, fCompl = 0;
418 pIn0 = Aig_ManObj(
p->pManRes, pCut->
pFanins[0] );
419 pIn1 = Aig_ManObj(
p->pManRes, pCut->
pFanins[1] );
421 uTruth = 0xF & *Csw_CutTruth(pCut);
422 if ( uTruth == 14 || uTruth == 13 || uTruth == 11 || uTruth == 7 )
424 uTruth = 0xF & ~uTruth;
430 pRes =
Aig_And(
p->pManRes, Aig_Not(pIn0), Aig_Not(pIn1) );
432 pRes =
Aig_And(
p->pManRes, pIn0 , Aig_Not(pIn1) );
434 pRes =
Aig_And(
p->pManRes, Aig_Not(pIn0), pIn1 );
436 pRes =
Aig_And(
p->pManRes, pIn0 , pIn1 );
438 pRes = Aig_NotCond( pRes, fCompl );
459 Csw_ObjSetCuts(
p, pObj, pCutSet );
475 pCut->
uSign = Aig_ObjCutSign( pObj->
Id );
476 memset( Csw_CutTruth(pCut), 0xAA,
sizeof(
unsigned) *
p->nTruthWords );
495 Csw_Cut_t * pCut0, * pCut1, * pCut, * pCutSet;
496 Aig_Obj_t * pFanin0 = Aig_ObjFanin0(pObj);
497 Aig_Obj_t * pFanin1 = Aig_ObjFanin1(pObj);
500 int i, k, nVars, nFanins, iVar;
503 assert( !Aig_IsComplement(pObj) );
504 if ( !Aig_ObjIsNode(pObj) )
506 if ( Csw_ObjCuts(
p, pObj) )
509 assert( Csw_ObjCuts(
p, pObj) == NULL );
510 assert( Aig_ObjIsNode(pObj) );
522 if ( Kit_WordCountOnes(pCut0->
uSign | pCut1->
uSign) >
p->nLeafMax )
525 pCut = Csw_CutFindFree(
p, pObj );
540 pTruth =
Csw_CutComputeTruth(
p, pCut, pCut0, pCut1, Aig_ObjFaninC0(pObj), Aig_ObjFaninC1(pObj) );
545p->timeCuts += Abc_Clock() - clk;
551 return Aig_NotCond( Aig_ManConst1(
p->pManRes), !(pTruth[0] & 1) );
557 assert( iVar < pCut->nFanins );
558 return Aig_NotCond( Aig_ManObj(
p->pManRes, pCut->
pFanins[iVar]), (pTruth[0] & 1) );
560 if ( nVars == 2 && nFanins > 2 && fUseResub )
572p->timeHash += Abc_Clock() - clk;
580 pCut->
Cost = Csw_CutFindCost(
p, pCut );
596p->timeHash += Abc_Clock() - clk;
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
char * Aig_MmFixedEntryFetch(Aig_MmFixed_t *p)
Aig_Obj_t * Aig_And(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
struct Aig_Obj_t_ Aig_Obj_t
Csw_Cut_t * Csw_ObjPrepareCuts(Csw_Man_t *p, Aig_Obj_t *pObj, int fTriv)
FUNCTION DECLARATIONS ///.
int Csw_CutSupportMinimize(Csw_Man_t *p, Csw_Cut_t *pCut)
int Csw_CutFilter(Csw_Man_t *p, Aig_Obj_t *pObj, Csw_Cut_t *pCut)
Aig_Obj_t * Csw_ObjSweep(Csw_Man_t *p, Aig_Obj_t *pObj, int fTriv)
unsigned * Csw_CutComputeTruth(Csw_Man_t *p, Csw_Cut_t *pCut, Csw_Cut_t *pCut0, Csw_Cut_t *pCut1, int fCompl0, int fCompl1)
Aig_Obj_t * Csw_ObjTwoVarCut(Csw_Man_t *p, Csw_Cut_t *pCut)
int Csw_CutMerge(Csw_Man_t *p, Csw_Cut_t *pCut0, Csw_Cut_t *pCut1, Csw_Cut_t *pCut)
void Csw_TableCutInsert(Csw_Man_t *p, Csw_Cut_t *pCut)
#define Csw_CutForEachLeaf(p, pCut, pLeaf, i)
struct Csw_Cut_t_ Csw_Cut_t
#define Csw_ObjForEachCut(p, pObj, pCut, i)
MACRO DEFINITIONS ///.
Aig_Obj_t * Csw_TableCutLookup(Csw_Man_t *p, Csw_Cut_t *pCut)
typedefABC_NAMESPACE_HEADER_START struct Csw_Man_t_ Csw_Man_t
INCLUDES ///.
unsigned Kit_TruthSupport(unsigned *pTruth, int nVars)
int Kit_TruthSupportSize(unsigned *pTruth, int nVars)
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)