48 pObj = Aig_ManFetchMemory(
p );
50 Vec_PtrPush(
p->vCis, pObj );
69 pObj = Aig_ManFetchMemory(
p );
71 Vec_PtrPush(
p->vCos, pObj );
92 assert( !Aig_IsComplement(pGhost) );
93 assert( Aig_ObjIsHash(pGhost) );
96 pObj = Aig_ManFetchMemory(
p );
101 p->nObjs[Aig_ObjType(pObj)]++;
106 float Prob0 = Abc_Int2Float( Vec_IntEntry(
p->vProbs, Aig_ObjFaninId0(pObj) ) );
107 float Prob1 = Abc_Int2Float( Vec_IntEntry(
p->vProbs, Aig_ObjFaninId1(pObj) ) );
108 Prob0 = Aig_ObjFaninC0(pObj)? 1.0 - Prob0 : Prob0;
109 Prob1 = Aig_ObjFaninC1(pObj)? 1.0 - Prob1 : Prob1;
110 Vec_IntSetEntry(
p->vProbs, pObj->
Id, Abc_Float2Int(Prob0 * Prob1) );
128 assert( !Aig_IsComplement(pObj) );
129 assert( !Aig_ObjIsCi(pObj) );
136 assert( Aig_ObjFanin0(pObj)->Type > 0 );
137 Aig_ObjRef( Aig_ObjFanin0(pObj) );
143 assert( Aig_ObjFanin1(pObj)->Type > 0 );
144 Aig_ObjRef( Aig_ObjFanin1(pObj) );
149 pObj->
Level = Aig_ObjLevelNew( pObj );
150 pObj->
fPhase = Aig_ObjPhaseReal(pFan0) & Aig_ObjPhaseReal(pFan1);
152 if (
p->pTable && Aig_ObjIsHash(pObj) )
173 assert( !Aig_IsComplement(pObj) );
179 Aig_ObjDeref(Aig_ObjFanin0(pObj));
185 Aig_ObjDeref(Aig_ObjFanin1(pObj));
188 if (
p->pTable && Aig_ObjIsHash(pObj) )
211 assert( !Aig_IsComplement(pObj) );
212 assert( !Aig_ObjIsTerm(pObj) );
213 assert( Aig_ObjRefs(pObj) == 0 );
214 if (
p->pFanData && Aig_ObjIsBuf(pObj) )
215 Vec_PtrRemove(
p->vBufs, pObj );
216 p->nObjs[pObj->
Type]--;
217 Vec_PtrWriteEntry(
p->vObjs, pObj->
Id, NULL );
218 Aig_ManRecycleMemory(
p, pObj );
235 assert( !Aig_IsComplement(pObj) );
236 if ( Aig_ObjIsConst1(pObj) || Aig_ObjIsCi(pObj) )
238 assert( !Aig_ObjIsCo(pObj) );
239 pFanin0 = Aig_ObjFanin0(pObj);
240 pFanin1 = Aig_ObjFanin1(pObj);
244 if ( pFanin0 && !Aig_ObjIsNone(pFanin0) && Aig_ObjRefs(pFanin0) == 0 )
246 if ( pFanin1 && !Aig_ObjIsNone(pFanin1) && Aig_ObjRefs(pFanin1) == 0 )
263 assert( Aig_ObjIsCo(pObj) );
264 Aig_ObjDeref(Aig_ObjFanin0(pObj));
266 p->nObjs[pObj->
Type]--;
267 Vec_PtrWriteEntry(
p->vObjs, pObj->
Id, NULL );
268 Aig_ManRecycleMemory(
p, pObj );
285 assert( !Aig_IsComplement(pObj) );
286 assert( Aig_ObjIsCo(pObj) );
287 pFaninOld = Aig_ObjFanin0(pObj);
291 Aig_ObjDeref( pFaninOld );
294 pObj->
Level = Aig_ObjLevelNew( pObj );
299 Aig_ObjRef( Aig_ObjFanin0(pObj) );
301 if ( !Aig_ObjIsCi(pFaninOld) && !Aig_ObjIsConst1(pFaninOld) && Aig_ObjRefs(pFaninOld) == 0 )
318 int fShowFanouts = 0;
322 printf(
"Object is NULL." );
325 if ( Aig_IsComplement(pObj) )
328 pObj = Aig_Not(pObj);
330 assert( !Aig_IsComplement(pObj) );
331 printf(
"Node %4d : ", Aig_ObjId(pObj) );
332 if ( Aig_ObjIsConst1(pObj) )
333 printf(
"constant 1" );
334 else if ( Aig_ObjIsCi(pObj) )
336 else if ( Aig_ObjIsCo(pObj) )
337 printf(
"PO( %4d%s )", Aig_ObjFanin0(pObj)->Id, (Aig_ObjFaninC0(pObj)?
"\'" :
" ") );
338 else if ( Aig_ObjIsBuf(pObj) )
339 printf(
"BUF( %d%s )", Aig_ObjFanin0(pObj)->Id, (Aig_ObjFaninC0(pObj)?
"\'" :
" ") );
341 printf(
"AND( %4d%s, %4d%s )",
342 Aig_ObjFanin0(pObj)->Id, (Aig_ObjFaninC0(pObj)?
"\'" :
" "),
343 Aig_ObjFanin1(pObj)->Id, (Aig_ObjFaninC1(pObj)?
"\'" :
" ") );
344 printf(
" (refs = %3d)", Aig_ObjRefs(pObj) );
345 if ( fShowFanouts &&
p->pFanData )
350 printf(
"\nFanouts:\n" );
354 printf(
"Node %4d : ", Aig_ObjId(pFanout) );
355 if ( Aig_ObjIsCo(pFanout) )
356 printf(
"PO( %4d%s )", Aig_ObjFanin0(pFanout)->Id, (Aig_ObjFaninC0(pFanout)?
"\'" :
" ") );
357 else if ( Aig_ObjIsBuf(pFanout) )
358 printf(
"BUF( %d%s )", Aig_ObjFanin0(pFanout)->Id, (Aig_ObjFaninC0(pFanout)?
"\'" :
" ") );
360 printf(
"AND( %4d%s, %4d%s )",
361 Aig_ObjFanin0(pFanout)->Id, (Aig_ObjFaninC0(pFanout)?
"\'" :
" "),
362 Aig_ObjFanin1(pFanout)->Id, (Aig_ObjFaninC1(pFanout)?
"\'" :
" ") );
368 if (
p->pEquivs &&
p->pEquivs[pObj->
Id] )
371 printf(
" { %4d ", pObj->
Id );
372 for ( pTemp =
p->pEquivs[pObj->
Id]; pTemp; pTemp =
p->pEquivs[pTemp->
Id] )
373 printf(
" %4d%s", pTemp->
Id, (pTemp->
fPhase != pObj->
fPhase)?
"\'" :
" " );
378 if (
p->pReprs &&
p->pReprs[pObj->
Id] )
379 printf(
" class of %d", pObj->
Id );
395 Aig_Obj_t * pFanReal0, * pFanReal1, * pResult = NULL;
397 if ( Aig_ObjIsCo(pObj) )
399 assert( Aig_ObjIsBuf(Aig_ObjFanin0(pObj)) );
401 assert( Aig_ObjPhaseReal(Aig_ObjChild0(pObj)) == Aig_ObjPhaseReal(pFanReal0) );
405 assert( Aig_ObjIsNode(pObj) );
406 assert( Aig_ObjIsBuf(Aig_ObjFanin0(pObj)) || Aig_ObjIsBuf(Aig_ObjFanin1(pObj)) );
411 if ( Aig_ObjIsNode(pObj) )
412 pResult =
Aig_Oper(
p, pFanReal0, pFanReal1, Aig_ObjType(pObj) );
437 for ( nSteps = 0; Vec_PtrSize(
p->vBufs) > 0; nSteps++ )
440 for ( pObj = (
Aig_Obj_t *)Vec_PtrEntryLast(
p->vBufs); Aig_ObjIsBuf(pObj); pObj = Aig_ObjFanout0(
p, pObj) );
444 if ( nSteps > 1000000 )
446 printf(
"Error: A cycle is encountered while propagating buffers.\n" );
469 Aig_Obj_t * pObjNewR = Aig_Regular(pObjNew);
471 assert( !Aig_IsComplement(pObjOld) );
473 assert( !Aig_ObjIsCi(pObjOld) && !Aig_ObjIsCo(pObjOld) );
475 assert( !Aig_ObjIsBuf(pObjNewR) && !Aig_ObjIsCo(pObjNewR) );
477 assert( pObjOld != pObjNewR );
479 assert( pObjOld != Aig_ObjFanin0(pObjNewR) );
480 assert( pObjOld != Aig_ObjFanin1(pObjNewR) );
481 if ( pObjOld == Aig_ObjFanin0(pObjNewR) || pObjOld == Aig_ObjFanin1(pObjNewR) )
483 printf(
"Aig_ObjReplace(): Internal error!\n" );
491 p->nObjs[pObjOld->
Type]--;
492 if ( Aig_IsComplement(pObjNew) || Aig_ObjRefs(pObjNew) > 0 || !Aig_ObjIsNode(pObjNew) )
502 int LevelOld = pObjOld->
Level;
511 pObjOld->
Level = LevelOld;
520 p->nObjs[pObjOld->
Type]++;
522 if (
p->pFanData && Aig_ObjIsBuf(pObjOld) )
524 Vec_PtrPush(
p->vBufs, pObjOld );
525 p->nBufMax = Abc_MaxInt(
p->nBufMax, Vec_PtrSize(
p->vBufs) );
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
Aig_Obj_t * Aig_ObjCreate(Aig_Man_t *p, Aig_Obj_t *pGhost)
void Aig_ObjDeletePo(Aig_Man_t *p, Aig_Obj_t *pObj)
void Aig_ObjDisconnect(Aig_Man_t *p, Aig_Obj_t *pObj)
void Aig_ObjConnect(Aig_Man_t *p, Aig_Obj_t *pObj, Aig_Obj_t *pFan0, Aig_Obj_t *pFan1)
Aig_Obj_t * Aig_ObjCreateCo(Aig_Man_t *p, Aig_Obj_t *pDriver)
void Aig_NodeFixBufferFanins(Aig_Man_t *p, Aig_Obj_t *pObj, int fUpdateLevel)
void Aig_ObjDelete_rec(Aig_Man_t *p, Aig_Obj_t *pObj, int fFreeTop)
ABC_NAMESPACE_IMPL_START Aig_Obj_t * Aig_ObjCreateCi(Aig_Man_t *p)
DECLARATIONS ///.
void Aig_ObjPatchFanin0(Aig_Man_t *p, Aig_Obj_t *pObj, Aig_Obj_t *pFaninNew)
void Aig_ObjReplace(Aig_Man_t *p, Aig_Obj_t *pObjOld, Aig_Obj_t *pObjNew, int fUpdateLevel)
void Aig_ObjDelete(Aig_Man_t *p, Aig_Obj_t *pObj)
int Aig_ManPropagateBuffers(Aig_Man_t *p, int fUpdateLevel)
void Aig_ObjPrint(Aig_Man_t *p, Aig_Obj_t *pObj)
#define Aig_ObjForEachFanout(p, pObj, pFanout, iFan, i)
Aig_Obj_t * Aig_Oper(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1, Aig_Type_t Type)
struct Aig_Obj_t_ Aig_Obj_t
void Aig_TableInsert(Aig_Man_t *p, Aig_Obj_t *pObj)
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
void Aig_ObjClearReverseLevel(Aig_Man_t *p, Aig_Obj_t *pObj)
void Aig_ObjAddFanout(Aig_Man_t *p, Aig_Obj_t *pObj, Aig_Obj_t *pFanout)
Aig_Obj_t * Aig_ObjReal_rec(Aig_Obj_t *pObj)
void Aig_ManUpdateReverseLevel(Aig_Man_t *p, Aig_Obj_t *pObjNew)
void Aig_ManUpdateLevel(Aig_Man_t *p, Aig_Obj_t *pObjNew)
void Aig_ObjRemoveFanout(Aig_Man_t *p, Aig_Obj_t *pObj, Aig_Obj_t *pFanout)
void Aig_TableDelete(Aig_Man_t *p, Aig_Obj_t *pObj)