47 float Power0 = 0.0, Power1 = 0.0;
52 if ( Aig_ObjIsCi(pNode) )
55 pFanin = Aig_ObjFanin0(pNode);
57 if ( --pFanin->
nRefs == 0 && (!LevelMin || pFanin->
Level > LevelMin) )
60 *pPower += Power0 + 2.0 * pProbs[pFanin->
Id] * (1.0 - pProbs[pFanin->
Id]);
62 if ( Aig_ObjIsBuf(pNode) )
64 assert( Aig_ObjIsNode(pNode) );
66 pFanin = Aig_ObjFanin1(pNode);
68 if ( --pFanin->
nRefs == 0 && (!LevelMin || pFanin->
Level > LevelMin) )
71 *pPower += Power1 + 2.0 * pProbs[pFanin->
Id] * (1.0 - pProbs[pFanin->
Id]);
90 if ( Aig_ObjIsCi(pNode) )
93 pFanin = Aig_ObjFanin0(pNode);
94 if ( pFanin->
nRefs++ == 0 && (!LevelMin || pFanin->
Level > LevelMin) )
97 if ( Aig_ObjIsBuf(pNode) )
99 assert( Aig_ObjIsNode(pNode) );
101 pFanin = Aig_ObjFanin1(pNode);
102 if ( pFanin->
nRefs++ == 0 && (!LevelMin || pFanin->
Level > LevelMin) )
122 if ( Aig_ObjIsCi(pNode) )
124 Aig_ObjSetTravIdCurrent(
p, pNode );
126 pFanin = Aig_ObjFanin0(pNode);
127 if ( pFanin->
nRefs++ == 0 && (!LevelMin || pFanin->
Level > LevelMin) )
129 if ( Aig_ObjIsBuf(pNode) )
131 assert( Aig_ObjIsNode(pNode) );
133 pFanin = Aig_ObjFanin1(pNode);
134 if ( pFanin->
nRefs++ == 0 && (!LevelMin || pFanin->
Level > LevelMin) )
153 if ( Aig_ObjIsTravIdCurrent(
p, pNode) )
155 Aig_ObjSetTravIdCurrent(
p, pNode);
157 if ( !fTopmost && pNode != pObjSkip && (Aig_ObjIsCi(pNode) || pNode->
nRefs > 0 || pNode->
Level <= LevelMin) )
159 if ( vSupp ) Vec_PtrPush( vSupp, pNode );
162 assert( Aig_ObjIsNode(pNode) );
181 int ConeSize1, ConeSize2;
182 if ( vSupp ) Vec_PtrClear( vSupp );
183 if ( !Aig_ObjIsNode(pNode) )
185 if ( Aig_ObjIsCi(pNode) && vSupp )
186 Vec_PtrPush( vSupp, pNode );
189 assert( !Aig_IsComplement(pNode) );
190 assert( Aig_ObjIsNode(pNode) );
195 assert( ConeSize1 == ConeSize2 );
213 int ConeSize1, ConeSize2;
214 assert( (pPower != NULL) == (
p->vProbs != NULL) );
215 assert( !Aig_IsComplement(pNode) );
216 assert( Aig_ObjIsNode(pNode) );
218 ConeSize1 =
Aig_NodeDeref_rec( pNode, 0, pPower,
p->vProbs? (
float *)
p->vProbs->pArray : NULL );
220 assert( ConeSize1 == ConeSize2 );
239 int i, ConeSize1, ConeSize2;
240 assert( !Aig_IsComplement(pNode) );
241 assert( Aig_ObjIsNode(pNode) );
249 assert( ConeSize1 == ConeSize2 );
268 int i, LevelMax, ConeSize1, ConeSize2, ConeCur1, ConeCur2, ConeBest;
272 LevelMax = Abc_MaxInt( LevelMax, (
int)pObj->
Level );
282 if ( (
int)pObj->
Level != LevelMax )
285 if ( ConeBest > ConeCur1 )
291 assert( ConeCur1 == ConeCur2 );
293 assert( pLeafBest != NULL );
294 assert( Aig_ObjIsNode(pLeafBest) );
298 Vec_PtrClear( vResult );
303 assert( ConeCur1 == ConeCur2 );
306 assert( ConeSize1 == ConeSize2 );
#define ABC_INFINITY
MACRO DEFINITIONS ///.
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Aig_NodeMffcSupp_rec(Aig_Man_t *p, Aig_Obj_t *pNode, unsigned LevelMin, Vec_Ptr_t *vSupp, int fTopmost, Aig_Obj_t *pObjSkip)
int Aig_NodeMffcExtendCut(Aig_Man_t *p, Aig_Obj_t *pNode, Vec_Ptr_t *vLeaves, Vec_Ptr_t *vResult)
int Aig_NodeRef_rec(Aig_Obj_t *pNode, unsigned LevelMin)
int Aig_NodeRefLabel_rec(Aig_Man_t *p, Aig_Obj_t *pNode, unsigned LevelMin)
ABC_NAMESPACE_IMPL_START int Aig_NodeDeref_rec(Aig_Obj_t *pNode, unsigned LevelMin, float *pPower, float *pProbs)
DECLARATIONS ///.
int Aig_NodeMffcLabel(Aig_Man_t *p, Aig_Obj_t *pNode, float *pPower)
int Aig_NodeMffcLabelCut(Aig_Man_t *p, Aig_Obj_t *pNode, Vec_Ptr_t *vLeaves)
int Aig_NodeMffcSupp(Aig_Man_t *p, Aig_Obj_t *pNode, int LevelMin, Vec_Ptr_t *vSupp)
void Aig_ManIncrementTravId(Aig_Man_t *p)
DECLARATIONS ///.
struct Aig_Obj_t_ Aig_Obj_t
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.