30static void If_ManImproveExpand(
If_Man_t *
p,
int nLimit );
56 If_ManImproveExpand(
p,
p->pPars->nLutSize );
58 if (
p->pPars->fVerbose )
60 Abc_Print( 1,
"E: Del = %7.2f. Ar = %9.1f. Edge = %8d. ",
61 p->RequiredGlo,
p->AreaGlo,
p->nNets );
63 Abc_Print( 1,
"Switch = %7.2f. ",
p->dPower );
64 Abc_Print( 1,
"Cut = %8d. ",
p->nCutsMerged );
65 Abc_PrintTime( 1,
"T", Abc_Clock() - clk );
80void If_ManImproveExpand(
If_Man_t *
p,
int nLimit )
82 Vec_Ptr_t * vFront, * vFrontOld, * vVisited;
85 vFront = Vec_PtrAlloc( nLimit );
86 vFrontOld = Vec_PtrAlloc( nLimit );
87 vVisited = Vec_PtrAlloc( 100 );
90 If_ManImproveNodeExpand(
p, pObj, nLimit, vFront, vFrontOld, vVisited );
91 Vec_PtrFree( vFront );
92 Vec_PtrFree( vFrontOld );
93 Vec_PtrFree( vVisited );
112 if ( pFanin->
nRefs == 0 )
132 int CostBef, CostAft, i;
133 float DelayOld, AreaBef, AreaAft;
134 pCut = If_ObjCutBest(pObj);
137 if ( pObj->
nRefs == 0 )
140 DelayOld = pCut->
Delay;
146 If_ManImproveNodePrepare(
p, pObj, nLimit, vFront, vFrontOld, vVisited );
150 If_ManImproveNodeFaninCompact(
p, pObj, nLimit, vFront, vVisited );
153 assert( CostBef >= CostAft );
158 If_ManImproveNodeUpdate(
p, pObj, vFront );
162 if ( AreaAft > AreaBef || pCut->
Delay > pObj->
Required +
p->fEpsilon )
164 If_ManImproveNodeUpdate(
p, pObj, vFrontOld );
166 assert( AreaAft == AreaBef );
167 pCut->
Delay = DelayOld;
186 assert( If_ObjIsAnd(pObj) );
189 Vec_PtrPush( vVisited, pObj );
209 Vec_PtrClear( vFront );
210 Vec_PtrClear( vFrontOld );
211 Vec_PtrClear( vVisited );
213 pCut = If_ObjCutBest(pObj);
216 Vec_PtrPush( vFront, pLeaf );
217 Vec_PtrPush( vFrontOld, pLeaf );
218 Vec_PtrPush( vVisited, pLeaf );
241 pCut = If_ObjCutBest(pObj);
245 pCut->
nLeaves = Vec_PtrSize(vFront);
249 pCut->
uSign = If_ObjCutSignCompute(pCut);
269 assert( If_ObjIsAnd(pObj) );
270 pFanin0 = If_ObjFanin0(pObj);
271 pFanin1 = If_ObjFanin1(pObj);
289 assert( If_ObjIsAnd(pObj) );
291 if ( pObj->
nRefs == 0 )
294 if ( !If_ObjFanin0(pObj)->fMark && If_ObjFanin0(pObj)->nRefs == 0 )
297 if ( !If_ObjFanin1(pObj)->fMark && If_ObjFanin1(pObj)->nRefs == 0 )
316 assert( If_ObjIsAnd(pObj) );
317 Vec_PtrRemove( vFront, pObj );
318 pFanin = If_ObjFanin0(pObj);
319 if ( !pFanin->
fMark )
321 Vec_PtrPush( vFront, pFanin );
322 Vec_PtrPush( vVisited, pFanin );
325 pFanin = If_ObjFanin1(pObj);
326 if ( !pFanin->
fMark )
328 Vec_PtrPush( vFront, pFanin );
329 Vec_PtrPush( vVisited, pFanin );
351 if ( If_ObjIsCi(pFanin) )
381 if ( If_ObjIsCi(pFanin) )
409 if ( If_ObjIsCi(pFanin) )
439 assert( Vec_PtrSize(vFront) <= nLimit );
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
int If_ManImproveNodeFaninCompact1(If_Man_t *p, If_Obj_t *pObj, int nLimit, Vec_Ptr_t *vFront, Vec_Ptr_t *vVisited)
int If_ManImproveNodeWillGrow(If_Man_t *p, If_Obj_t *pObj)
void If_ManImproveMark_rec(If_Man_t *p, If_Obj_t *pObj, Vec_Ptr_t *vVisited)
int If_ManImproveNodeFaninCost(If_Man_t *p, If_Obj_t *pObj)
int If_ManImproveNodeFaninCompact2(If_Man_t *p, If_Obj_t *pObj, int nLimit, Vec_Ptr_t *vFront, Vec_Ptr_t *vVisited)
int If_ManImproveNodeFaninCompact0(If_Man_t *p, If_Obj_t *pObj, int nLimit, Vec_Ptr_t *vFront, Vec_Ptr_t *vVisited)
void If_ManImproveNodeFaninUpdate(If_Man_t *p, If_Obj_t *pObj, Vec_Ptr_t *vFront, Vec_Ptr_t *vVisited)
int If_ManImproveCutCost(If_Man_t *p, Vec_Ptr_t *vFront)
void If_ManImproveMapping(If_Man_t *p)
FUNCTION DEFINITIONS ///.
int If_ManImproveNodeFaninCompact_int(If_Man_t *p, If_Obj_t *pObj, int nLimit, Vec_Ptr_t *vFront, Vec_Ptr_t *vVisited)
float If_CutAreaDeref(If_Man_t *p, If_Cut_t *pCut)
float If_CutDelay(If_Man_t *p, If_Obj_t *pObj, If_Cut_t *pCut)
struct If_Cut_t_ If_Cut_t
float If_CutAreaRef(If_Man_t *p, If_Cut_t *pCut)
#define If_CutForEachLeaf(p, pCut, pLeaf, i)
void If_ManComputeRequired(If_Man_t *p)
void If_CutOrder(If_Cut_t *pCut)
float If_CutAreaRefed(If_Man_t *p, If_Cut_t *pCut)
struct If_Man_t_ If_Man_t
BASIC TYPES ///.
#define If_ManForEachNode(p, pObj, i)
struct If_Obj_t_ If_Obj_t
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.