49 int i, k, iBox, iTerm1, nTerms;
54 if ( Aig_ObjIsNode(pObj) )
56 pNext = Aig_ObjFanin0(pObj);
57 if ( !Aig_ObjIsTravIdCurrent(
p,pNext) )
59 printf(
"Node %d has fanin %d that is not in a topological order.\n", pObj->
Id, pNext->
Id );
62 pNext = Aig_ObjFanin1(pObj);
63 if ( !Aig_ObjIsTravIdCurrent(
p,pNext) )
65 printf(
"Node %d has fanin %d that is not in a topological order.\n", pObj->
Id, pNext->
Id );
69 else if ( Aig_ObjIsCo(pObj) || Aig_ObjIsBuf(pObj) )
71 pNext = Aig_ObjFanin0(pObj);
72 if ( !Aig_ObjIsTravIdCurrent(
p,pNext) )
74 printf(
"Node %d has fanin %d that is not in a topological order.\n", pObj->
Id, pNext->
Id );
78 else if ( Aig_ObjIsCi(pObj) )
87 for ( k = 0; k < nTerms; k++ )
89 pNext = Aig_ManCo(
p, iTerm1 + k );
91 if ( !Aig_ObjIsTravIdCurrent(
p,pNext) )
93 printf(
"Box %d has input %d that is not in a topological order.\n", iBox, pNext->
Id );
100 else if ( !Aig_ObjIsConst1(pObj) )
102 Aig_ObjSetTravIdCurrent(
p, pObj );
123 assert( !Aig_IsComplement(pObj) );
124 if ( Aig_ObjIsTravIdCurrent(
p, pObj) )
126 Aig_ObjSetTravIdCurrent(
p, pObj);
127 if (
p->pEquivs && Aig_ObjEquiv(
p, pObj) )
131 Vec_PtrPush( vNodes, pObj );
151 Aig_ObjSetTravIdCurrent(
p, Aig_ManConst1(
p) );
153 vNodes = Vec_PtrAlloc( Aig_ManObjNumMax(
p) );
157 Aig_ObjSetTravIdCurrent(
p, pObj );
159 Vec_PtrPush( vNodes, Aig_ManConst1(
p) );
164 assert( Vec_PtrSize(vNodes) == Aig_ManNodeNum(
p) );
166 assert( Vec_PtrSize(vNodes) == Aig_ManObjNum(
p) );
183 if ( Aig_ObjIsTravIdCurrent(
p, pObj) )
185 Aig_ObjSetTravIdCurrent(
p, pObj);
186 if ( Aig_ObjIsCi(pObj) )
188 Vec_PtrPush( vNodes, pObj );
191 if ( Aig_ObjIsCo(pObj) )
194 Vec_PtrPush( vNodes, pObj );
197 assert( Aig_ObjIsNode(pObj) );
200 Vec_PtrPush( vNodes, pObj );
207 vNodes = Vec_PtrAlloc( Aig_ManObjNumMax(
p) );
209 Aig_ObjSetTravIdCurrent(
p, Aig_ManConst1(
p) );
210 Vec_PtrPush( vNodes, Aig_ManConst1(
p) );
212 for ( i = 0; i < nNodes; i++ )
234 vNodes = Vec_PtrAlloc( Aig_ManObjNumMax(
p) );
236 Aig_ObjSetTravIdCurrent(
p, Aig_ManConst1(
p) );
237 Vec_PtrPush( vNodes, Aig_ManConst1(
p) );
242 if ( !Aig_ObjIsTravIdCurrent(
p, pObj) )
243 Vec_PtrPush( vNodes, pObj );
244 assert( Vec_PtrSize(vNodes) == Aig_ManObjNum(
p) );
263 assert( !Aig_IsComplement(pObj) );
264 if ( Aig_ObjIsTravIdCurrent(
p, pObj) )
266 Aig_ObjSetTravIdCurrent(
p, pObj);
267 Vec_PtrPush( vNodes, pObj );
268 if (
p->pEquivs && Aig_ObjEquiv(
p, pObj) )
291 Aig_ObjSetTravIdCurrent(
p, Aig_ManConst1(
p) );
293 vNodes = Vec_PtrAlloc( Aig_ManObjNumMax(
p) );
297 Aig_ObjSetTravIdCurrent(
p, pObj );
299 Vec_PtrPush( vNodes, Aig_ManConst1(
p) );
304 assert( Vec_PtrSize(vNodes) == Aig_ManNodeNum(
p) );
306 assert( Vec_PtrSize(vNodes) == Aig_ManObjNum(
p) );
327 vLevels = Vec_VecStart( nLevels + 1 );
331 Vec_VecPush( vLevels, pObj->
Level, pObj );
354 Aig_ObjSetTravIdCurrent(
p, Aig_ManConst1(
p) );
358 vNodes = Vec_PtrAlloc( Aig_ManNodeNum(
p) );
359 for ( i = 0; i < nNodes; i++ )
360 if ( Aig_ObjIsCo(ppNodes[i]) )
382 assert( !Aig_IsComplement(pObj) );
383 if ( Aig_ObjIsTravIdCurrent(
p, pObj) )
385 assert( Aig_ObjIsNode(pObj) );
389 assert( !Aig_ObjIsTravIdCurrent(
p, pObj) );
390 Aig_ObjSetTravIdCurrent(
p, pObj);
391 Vec_PtrPush( vNodes, pObj );
413 if ( Aig_ObjEquiv(
p, pObj) == NULL )
416 for ( pObj = Aig_ObjEquiv(
p, pObj) ; pObj; pObj = Aig_ObjEquiv(
p, pObj) )
425 Aig_ObjSetTravIdCurrent(
p, Aig_ManConst1(
p) );
427 Aig_ObjSetTravIdCurrent(
p, pObj );
429 vNodes = Vec_PtrAlloc( Aig_ManNodeNum(
p) );
450 assert( !Aig_IsComplement(pObj) );
451 if ( Aig_ObjIsTravIdCurrent(
p, pObj) )
453 assert( Aig_ObjIsNode(pObj) || Aig_ObjIsBuf(pObj) );
456 assert( !Aig_ObjIsTravIdCurrent(
p, pObj) );
457 Aig_ObjSetTravIdCurrent(
p, pObj);
458 Vec_PtrPush( vNodes, pObj );
480 Aig_ObjSetTravIdCurrent(
p, pObj );
482 vNodes = Vec_PtrAlloc( Aig_ManNodeNum(
p) );
484 if ( Aig_ObjIsNode(pObj) || Aig_ObjIsBuf(pObj) )
506 LevelsMax = Abc_MaxInt( LevelsMax, (
int)Aig_ObjFanin0(pObj)->Level );
526 int i, iBox, iTerm1, nTerms, LevelMax = 0;
527 if ( Aig_ObjIsTravIdCurrent(
p, pObj ) )
529 Aig_ObjSetTravIdCurrent(
p, pObj );
530 if ( Aig_ObjIsCi(pObj) )
539 for ( i = 0; i < nTerms; i++ )
541 pNext = Aig_ManCo(
p, iTerm1 + i);
543 if ( LevelMax < Aig_ObjLevel(pNext) )
544 LevelMax = Aig_ObjLevel(pNext);
551 else if ( Aig_ObjIsCo(pObj) )
553 pNext = Aig_ObjFanin0(pObj);
555 if ( LevelMax < Aig_ObjLevel(pNext) )
556 LevelMax = Aig_ObjLevel(pNext);
558 else if ( Aig_ObjIsNode(pObj) )
561 pNext = Aig_ObjFanin0(pObj);
563 if ( LevelMax < Aig_ObjLevel(pNext) )
564 LevelMax = Aig_ObjLevel(pNext);
565 pNext = Aig_ObjFanin1(pObj);
567 if ( LevelMax < Aig_ObjLevel(pNext) )
568 LevelMax = Aig_ObjLevel(pNext);
572 if (
p->pEquivs && (pNext = Aig_ObjEquiv(
p, pObj)) )
575 if ( LevelMax < Aig_ObjLevel(pNext) )
576 LevelMax = Aig_ObjLevel(pNext);
579 else if ( !Aig_ObjIsConst1(pObj) )
581 Aig_ObjSetLevel( pObj, LevelMax );
600 Aig_ObjSetLevel( pObj, 0 );
606 if ( LevelMax < Aig_ObjLevel(pObj) )
607 LevelMax = Aig_ObjLevel(pObj);
613 if ( LevelMax < Aig_ObjLevel(pObj) )
614 LevelMax = Aig_ObjLevel(pObj);
637 assert( !Aig_IsComplement(pObj) );
638 if ( !Aig_ObjIsNode(pObj) || Aig_ObjIsMarkA(pObj) )
642 assert( !Aig_ObjIsMarkA(pObj) );
643 Aig_ObjSetMarkA( pObj );
659 assert( !Aig_IsComplement(pObj) );
660 if ( !Aig_ObjIsNode(pObj) || Aig_ObjIsMarkA(pObj) )
664 assert( !Aig_ObjIsMarkA(pObj) );
665 Aig_ObjSetMarkA( pObj );
683 assert( !Aig_IsComplement(pObj) );
684 if ( !Aig_ObjIsNode(pObj) || Aig_ObjIsMarkA(pObj) )
688 assert( !Aig_ObjIsMarkA(pObj) );
689 Aig_ObjSetMarkA( pObj );
706 assert( !Aig_IsComplement(pObj) );
707 if ( !Aig_ObjIsNode(pObj) || !Aig_ObjIsMarkA(pObj) )
711 assert( Aig_ObjIsMarkA(pObj) );
712 Aig_ObjClearMarkA( pObj );
747 if ( Aig_ObjIsTravIdCurrent(
p, pObj) )
749 Aig_ObjSetTravIdCurrent(
p, pObj);
750 if ( Aig_ObjIsCi(pObj) )
755 assert( Aig_ObjIsNode(pObj) || Aig_ObjIsBuf(pObj) );
757 if ( Aig_ObjFanin1(pObj) )
775 assert( !Aig_IsComplement(pObj) );
776 assert( !Aig_ObjIsCo(pObj) );
799 if ( Aig_ObjIsNode(pObj) )
801 printf(
"Nodes with small support %d (out of %d)\n", Counter, Aig_ManNodeNum(
p) );
802 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
819 if ( Aig_ObjIsTravIdCurrent(
p, pObj) )
821 Aig_ObjSetTravIdCurrent(
p, pObj);
822 if ( Aig_ObjIsConst1(pObj) )
824 if ( Aig_ObjIsCi(pObj) )
826 Vec_PtrPush( vSupp, pObj );
829 assert( Aig_ObjIsNode(pObj) || Aig_ObjIsBuf(pObj) );
831 if ( Aig_ObjFanin1(pObj) )
849 assert( !Aig_IsComplement(pObj) );
850 assert( !Aig_ObjIsCo(pObj) );
852 vSupp = Vec_PtrAlloc( 100 );
871 Vec_PtrClear( vSupp );
873 Aig_ObjSetTravIdCurrent(
p, Aig_ManConst1(
p) );
874 for ( i = 0; i < nObjs; i++ )
876 assert( !Aig_IsComplement(ppObjs[i]) );
877 if ( Aig_ObjIsCo(ppObjs[i]) )
897 assert( !Aig_IsComplement(pObj) );
898 if ( !Aig_ObjIsNode(pObj) || Aig_ObjIsMarkA(pObj) )
902 pObj->
pData =
Aig_And( pDest, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj) );
903 assert( !Aig_ObjIsMarkA(pObj) );
904 Aig_ObjSetMarkA( pObj );
923 if ( pSour == pDest )
925 if ( Aig_ObjIsConst1( Aig_Regular(pRoot) ) )
926 return Aig_NotCond( Aig_ManConst1(pDest), Aig_IsComplement(pRoot) );
938 return Aig_NotCond( (
Aig_Obj_t *)Aig_Regular(pRoot)->pData, Aig_IsComplement(pRoot) );
954 assert( !Aig_IsComplement(pObj) );
955 if ( Aig_ObjIsMarkA(pObj) )
957 if ( Aig_ObjIsConst1(pObj) || Aig_ObjIsCi(pObj) )
959 pObj->
pData = pObj == pVar ? pFunc : pObj;
964 pObj->
pData =
Aig_And(
p, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj) );
965 assert( !Aig_ObjIsMarkA(pObj) );
966 Aig_ObjSetMarkA( pObj );
983 if ( iVar >= Aig_ManCiNum(
p) )
985 printf(
"Aig_Compose(): The PI variable %d is not defined.\n", iVar );
992 return Aig_NotCond( (
Aig_Obj_t *)Aig_Regular(pRoot)->pData, Aig_IsComplement(pRoot) );
1013 assert( Aig_ObjIsNode(pNode) );
1016 Vec_PtrPush( vNodes, pNode );
1036 Vec_PtrClear( vNodes );
1067 int RetValue1, RetValue2, i;
1069 if ( Aig_Regular(pObj)->fMarkA )
1072 for ( i = 0; i < vSuper->nSize; i++ )
1073 if ( vSuper->pArray[i] == pObj )
1076 for ( i = 0; i < vSuper->nSize; i++ )
1077 if ( vSuper->pArray[i] == Aig_Not(pObj) )
1083 if ( pObj != pRoot && (Aig_IsComplement(pObj) || Aig_ObjType(pObj) != Aig_ObjType(pRoot) || Aig_ObjRefs(pObj) > 1) )
1085 Vec_PtrPush( vSuper, pObj );
1086 Aig_Regular(pObj)->fMarkA = 1;
1089 assert( !Aig_IsComplement(pObj) );
1090 assert( Aig_ObjIsNode(pObj) );
1094 if ( RetValue1 == -1 || RetValue2 == -1 )
1097 return RetValue1 || RetValue2;
1114 assert( !Aig_IsComplement(pObj) );
1115 assert( Aig_ObjIsNode(pObj) );
1117 Vec_PtrClear( vSuper );
1119 assert( Vec_PtrSize(vSuper) > 1 );
1122 Aig_Regular(pObj)->fMarkA = 0;
1125 if ( RetValue == -1 )
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Aig_ObjCollectCut_rec(Aig_Obj_t *pNode, Vec_Ptr_t *vNodes)
void Aig_ObjCollectCut(Aig_Obj_t *pRoot, Vec_Ptr_t *vLeaves, Vec_Ptr_t *vNodes)
void Aig_ManDfsChoices_rec(Aig_Man_t *p, Aig_Obj_t *pObj, Vec_Ptr_t *vNodes)
Vec_Ptr_t * Aig_ManDfsReverse(Aig_Man_t *p)
Vec_Ptr_t * Aig_ManDfsChoices(Aig_Man_t *p)
void Aig_ManDfs_rec(Aig_Man_t *p, Aig_Obj_t *pObj, Vec_Ptr_t *vNodes)
int Aig_ManLevelNum(Aig_Man_t *p)
void Aig_ConeCleanAndMark_rec(Aig_Obj_t *pObj)
void Aig_SupportNodes(Aig_Man_t *p, Aig_Obj_t **ppObjs, int nObjs, Vec_Ptr_t *vSupp)
int Aig_SupportSizeTest(Aig_Man_t *p)
int Aig_ConeCountAndMark_rec(Aig_Obj_t *pObj)
void Aig_ConeUnmark_rec(Aig_Obj_t *pObj)
int Aig_ObjCollectSuper(Aig_Obj_t *pObj, Vec_Ptr_t *vSuper)
int Aig_SupportSize(Aig_Man_t *p, Aig_Obj_t *pObj)
void Aig_Support_rec(Aig_Man_t *p, Aig_Obj_t *pObj, Vec_Ptr_t *vSupp)
void Aig_ManDfsAll_rec(Aig_Man_t *p, Aig_Obj_t *pObj, Vec_Ptr_t *vNodes)
ABC_NAMESPACE_IMPL_START int Aig_ManVerifyTopoOrder(Aig_Man_t *p)
DECLARATIONS ///.
Aig_Obj_t * Aig_Compose(Aig_Man_t *p, Aig_Obj_t *pRoot, Aig_Obj_t *pFunc, int iVar)
Vec_Vec_t * Aig_ManLevelize(Aig_Man_t *p)
void Aig_ManDfsPreorder_rec(Aig_Man_t *p, Aig_Obj_t *pObj, Vec_Ptr_t *vNodes)
void Aig_ManDfsReverse_rec(Aig_Man_t *p, Aig_Obj_t *pObj, Vec_Ptr_t *vNodes)
Aig_Obj_t * Aig_Transfer(Aig_Man_t *pSour, Aig_Man_t *pDest, Aig_Obj_t *pRoot, int nVars)
Vec_Ptr_t * Aig_ManDfs(Aig_Man_t *p, int fNodesOnly)
Vec_Ptr_t * Aig_ManDfsNodes(Aig_Man_t *p, Aig_Obj_t **ppNodes, int nNodes)
void Aig_ManChoiceLevel_rec(Aig_Man_t *p, Aig_Obj_t *pObj)
void Aig_SupportSize_rec(Aig_Man_t *p, Aig_Obj_t *pObj, int *pCounter)
int Aig_ObjCollectSuper_rec(Aig_Obj_t *pRoot, Aig_Obj_t *pObj, Vec_Ptr_t *vSuper)
Vec_Ptr_t * Aig_ManDfsArray(Aig_Man_t *p, Aig_Obj_t **pNodes, int nNodes)
int Aig_DagSize(Aig_Obj_t *pObj)
Vec_Ptr_t * Aig_Support(Aig_Man_t *p, Aig_Obj_t *pObj)
void Aig_ConeMark_rec(Aig_Obj_t *pObj)
void Aig_Transfer_rec(Aig_Man_t *pDest, Aig_Obj_t *pObj)
Vec_Ptr_t * Aig_ManDfsPreorder(Aig_Man_t *p, int fNodesOnly)
int Aig_ManChoiceLevel(Aig_Man_t *p)
Vec_Ptr_t * Aig_ManDfsAll(Aig_Man_t *p)
void Aig_Compose_rec(Aig_Man_t *p, Aig_Obj_t *pObj, Aig_Obj_t *pFunc, Aig_Obj_t *pVar)
void Aig_ManSetCioIds(Aig_Man_t *p)
#define Aig_ManForEachObj(p, pObj, i)
#define Aig_ObjForEachFanout(p, pObj, pFanout, iFan, i)
void Aig_ManIncrementTravId(Aig_Man_t *p)
DECLARATIONS ///.
#define Aig_ManForEachCi(p, pObj, i)
ITERATORS ///.
Aig_Obj_t * Aig_And(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
void Aig_ManCleanCioIds(Aig_Man_t *p)
struct Aig_Obj_t_ Aig_Obj_t
#define Aig_ManForEachNode(p, pObj, i)
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
#define Aig_ManForEachCo(p, pObj, i)
Aig_Obj_t * Aig_ObjReal_rec(Aig_Obj_t *pObj)
Aig_Obj_t * Aig_IthVar(Aig_Man_t *p, int i)
FUNCTION DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Tim_Man_t_ Tim_Man_t
INCLUDES ///.
int Tim_ManBoxForCi(Tim_Man_t *p, int iCo)
int Tim_ManBoxForCo(Tim_Man_t *p, int iCi)
int Tim_ManBoxInputFirst(Tim_Man_t *p, int iBox)
int Tim_ManBoxInputNum(Tim_Man_t *p, int iBox)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.