52 static Ivy_Store_t CutStore, * pCutStore = &CutStore;
106 pCutStore->
nCuts = 0;
116 for ( k = 0; k < nNodes; k++ )
145 memset( pBitCut, 0, 4 * nWords );
291 LevelMax = pObj->
Level;
297 if ( (
int)pLeaf->
Level == LevelMax )
304 if ( pPivot == NULL )
306 if ( --LevelMax == 0 )
322 if ( pFanin && !pFanin->
fMarkA )
360 for ( w = nWords-1; w >= 0; w-- )
361 pOut[w] = pIn0[w] | pIn1[w];
366 for ( w = nWords-1; w >= 0; w-- )
367 if ( pIn1[w] & ~pIn2[w] )
386 unsigned * pBitCut, * pBitCut0, * pBitCut1, * pBitCutTest;
394 for ( w = 0; w <
nWords; w++ )
397 if ( Counter > nLeaves )
400 if ( Counter > nLeaves )
441 int i, nCutsCut, nCutsTotal, nNodeTotal, nNodeOver;
449 nNodeTotal = nNodeOver = 0;
456 nCutsCut = pStore->
nCuts;
457 nCutsTotal += nCutsCut;
461 printf(
"Total cuts = %6d. Trivial = %6d. Nodes = %6d. Satur = %6d. ",
void Ivy_NodeComputeVolumeTrav1_rec(Ivy_Obj_t *pObj, int Depth)
static int Ivy_ObjTravId(Ivy_Obj_t *pObj)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
static void Vec_VecPush(Vec_Vec_t *p, int Level, void *Entry)
static Vec_Vec_t * Vec_VecAlloc(int nCap)
FUNCTION DEFINITIONS ///.
void Ivy_NodeComputeVolume2(Ivy_Obj_t *pObj, int nNodeLimit, Vec_Ptr_t *vNodes, Vec_Ptr_t *vFront)
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.
void Ivy_NodeComputeVolumeTrav2_rec(Ivy_Obj_t *pObj, Vec_Ptr_t *vNodes)
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
#define Vec_PtrForEachEntryReverse(Type, vVec, pEntry, i)
Ivy_Cut_t pCuts[IVY_CUT_LIMIT]
static void Vec_PtrSort(Vec_Ptr_t *p, int(*Vec_PtrSortCompare)()) ___unused
static void Vec_PtrPush(Vec_Ptr_t *p, void *Entry)
static void Ivy_NodeFindCutsMerge(Vec_Ptr_t *vCuts0, Vec_Ptr_t *vCuts1, Vec_Ptr_t *vCuts, int nLeaves, int nWords, Vec_Int_t *vStore)
static abctime Abc_Clock()
int Ivy_CompareNodesByLevel(Ivy_Obj_t **ppObj1, Ivy_Obj_t **ppObj2)
static unsigned * Vec_IntFetch(Vec_Int_t *p, int nWords)
static int Vec_PtrSize(Vec_Ptr_t *p)
static void Vec_VecFree(Vec_Vec_t *p)
static Ivy_Obj_t * Ivy_ObjFanin1(Ivy_Obj_t *pObj)
static void Vec_PtrRemove(Vec_Ptr_t *p, void *Entry)
static void Vec_VecClear(Vec_Vec_t *p)
static void Extra_TruthOrWords(unsigned *pOut, unsigned *pIn0, unsigned *pIn1, int nWords)
static void Vec_IntGrow(Vec_Int_t *p, int nCapMin)
static Ivy_Obj_t * Ivy_ObjFanin0(Ivy_Obj_t *pObj)
static int Extra_TruthIsImplyWords(unsigned *pIn1, unsigned *pIn2, int nWords)
static Vec_Int_t * Vec_IntAlloc(int nCap)
FUNCTION DEFINITIONS ///.
static void * Vec_PtrEntryLast(Vec_Ptr_t *p)
#define ABC_NAMESPACE_IMPL_END
int pArray[IVY_CUT_INPUT]
static int Ivy_ObjIsNode(Ivy_Obj_t *pObj)
static void Vec_PtrWriteEntry(Vec_Ptr_t *p, int i, void *Entry)
typedefABC_NAMESPACE_HEADER_START struct Ivy_Man_t_ Ivy_Man_t
INCLUDES ///.
static int Ivy_ManPiNum(Ivy_Man_t *p)
#define ABC_NAMESPACE_IMPL_START
static void * Vec_PtrEntry(Vec_Ptr_t *p, int i)
#define Vec_PtrForEachEntryStop(Type, vVec, pEntry, i, Stop)
static Vec_Ptr_t * Vec_PtrAlloc(int nCap)
FUNCTION DEFINITIONS ///.
static void Ivy_NodeComputeVolume(Ivy_Obj_t *pObj, int nNodeLimit, Vec_Ptr_t *vNodes, Vec_Ptr_t *vFront)
static void Vec_VecExpand(Vec_Vec_t *p, int Level)
Ivy_Store_t * Ivy_NodeFindCutsTravAll(Ivy_Man_t *p, Ivy_Obj_t *pObj, int nLeaves, int nNodeLimit, Vec_Ptr_t *vNodes, Vec_Ptr_t *vFront, Vec_Int_t *vStore, Vec_Vec_t *vBitCuts)
FUNCTION DEFINITIONS ///.
static void Vec_PtrClear(Vec_Ptr_t *p)
static int Ivy_ObjIsCi(Ivy_Obj_t *pObj)
static int Ivy_ManNodeNum(Ivy_Man_t *p)
static Vec_Ptr_t * Vec_VecEntry(Vec_Vec_t *p, int i)
#define Ivy_ManForEachObj(p, pObj, i)
static void Vec_IntFree(Vec_Int_t *p)
void Ivy_ManTestCutsTravAll(Ivy_Man_t *p)
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
static void Vec_IntClear(Vec_Int_t *p)
static void Vec_PtrShrink(Vec_Ptr_t *p, int nSizeNew)
static int Ivy_ObjId(Ivy_Obj_t *pObj)
static void Vec_PtrFree(Vec_Ptr_t *p)
static ABC_NAMESPACE_IMPL_START unsigned * Ivy_NodeCutElementary(Vec_Int_t *vStore, int nWords, int NodeId)
DECLARATIONS ///.