36static inline int Gia_ObjChild0Copy(
Aig_Obj_t * pObj ) {
return Abc_LitNotCond( Aig_ObjFanin0(pObj)->iData, Aig_ObjFaninC0(pObj) ); }
37static inline int Gia_ObjChild1Copy(
Aig_Obj_t * pObj ) {
return Abc_LitNotCond( Aig_ObjFanin1(pObj)->iData, Aig_ObjFaninC1(pObj) ); }
39static inline Aig_Obj_t * Gia_ObjChild0Copy2(
Aig_Obj_t ** ppNodes,
Gia_Obj_t * pObj,
int Id ) {
return Aig_NotCond( ppNodes[Gia_ObjFaninId0(pObj, Id)], Gia_ObjFaninC0(pObj) ); }
40static inline Aig_Obj_t * Gia_ObjChild1Copy2(
Aig_Obj_t ** ppNodes,
Gia_Obj_t * pObj,
int Id ) {
return Aig_NotCond( ppNodes[Gia_ObjFaninId1(pObj, Id)], Gia_ObjFaninC1(pObj) ); }
62 assert( Aig_ObjIsNode(pObj) );
65 pObj->
iData = Gia_ManAppendAnd( pNew, Gia_ObjChild0Copy(pObj), Gia_ObjChild1Copy(pObj) );
66 if (
p->pEquivs && (pNext = Aig_ObjEquiv(
p, pObj)) )
68 int iObjNew, iNextNew;
70 iObjNew = Abc_Lit2Var(pObj->
iData);
71 iNextNew = Abc_Lit2Var(pNext->
iData);
73 pNew->
pNexts[iObjNew] = iNextNew;
83 pNew->
pName = Abc_UtilStrsav(
p->pName );
84 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
91 Aig_ManConst1(
p)->iData = 1;
93 pObj->
iData = Gia_ManAppendCi( pNew );
98 Gia_ManAppendCo( pNew, Gia_ObjChild0Copy(pObj) );
118 if ( !pObj || !Gia_ObjIsAnd(pObj) || pObj->
fPhase )
134 printf(
"Object %d is dangling.\n", i ), fFound = 1;
136 printf(
"There are no dangling objects.\n" );
153 if ( pObj == NULL || pObj->
iData )
155 assert( Aig_ObjIsNode(pObj) );
159 pObj->
iData = Gia_ManAppendAnd( pNew, Gia_ObjChild0Copy(pObj), Gia_ObjChild1Copy(pObj) );
160 if ( Aig_ObjEquiv(
p, pObj) )
162 int iObjNew, iNextNew;
163 iObjNew = Abc_Lit2Var(pObj->
iData);
164 iNextNew = Abc_Lit2Var(Aig_ObjEquiv(
p, pObj)->iData);
165 assert( iObjNew > iNextNew );
166 assert( Gia_ObjIsAnd(Gia_ManObj(pNew, iNextNew)) );
167 pNew->
pSibls[iObjNew] = iNextNew;
178 pNew->
pName = Abc_UtilStrsav(
p->pName );
179 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
185 Aig_ManConst1(
p)->iData = 1;
187 pObj->
iData = Gia_ManAppendCi( pNew );
192 Gia_ManAppendCo( pNew, Gia_ObjChild0Copy(pObj) );
219 pNew->
pName = Abc_UtilStrsav(
p->pName );
220 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
226 if ( Aig_ObjIsAnd(pObj) )
227 pObj->
iData = Gia_ManAppendAnd( pNew, Gia_ObjChild0Copy(pObj), Gia_ObjChild1Copy(pObj) );
228 else if ( Aig_ObjIsCi(pObj) )
229 pObj->
iData = Gia_ManAppendCi( pNew );
230 else if ( Aig_ObjIsCo(pObj) )
231 pObj->
iData = Gia_ManAppendCo( pNew, Gia_ObjChild0Copy(pObj) );
232 else if ( Aig_ObjIsConst1(pObj) )
259 pNew->
pName = Abc_UtilStrsav(
p->pName );
260 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
264 Aig_ManConst1(
p)->iData = 1;
266 pObj->
iData = Gia_ManAppendCi( pNew );
269 if ( Aig_ObjRefs(pObj) == 0 )
272 Gia_ManAppendCo( pNew, pObj->
iData );
278 pObj->
iData = Gia_ManAppendCo( pNew, Gia_ObjChild0Copy(pObj) );
297 if ( ppNodes[Gia_ObjId(
p, pObj)] )
299 if ( Gia_ObjIsCi(pObj) )
303 assert( Gia_ObjIsAnd(pObj) );
306 ppNodes[Gia_ObjId(
p, pObj)] =
Aig_And( pNew, Gia_ObjChild0Copy2(ppNodes, pObj, Gia_ObjId(
p, pObj)), Gia_ObjChild1Copy2(ppNodes, pObj, Gia_ObjId(
p, pObj)) );
308 if ( pNew->pEquivs && (pNext = Gia_ObjNextObj(
p, Gia_ObjId(
p, pObj))) )
312 pObjNew = ppNodes[Gia_ObjId(
p, pObj)];
313 pNextNew = ppNodes[Gia_ObjId(
p, pNext)];
315 pNew->pEquivs[Aig_Regular(pObjNew)->Id] = Aig_Regular(pNextNew);
324 assert( !fChoices || (
p->pNexts &&
p->pReprs) );
327 pNew->pName = Abc_UtilStrsav(
p->pName );
328 pNew->pSpec = Abc_UtilStrsav(
p->pSpec );
329 pNew->nConstrs =
p->nConstrs;
336 ppNodes[0] = Aig_ManConst0(pNew);
342 Aig_ObjSetLevel( ppNodes[Gia_ObjId(
p, pObj)], Gia_ObjLevel(
p, pObj) );
347 ppNodes[Gia_ObjId(
p, pObj)] =
Aig_ObjCreateCo( pNew, Gia_ObjChild0Copy2(ppNodes, pObj, Gia_ObjId(
p, pObj)) );
371 assert(
p->pNexts == NULL &&
p->pReprs == NULL );
372 assert( nOutDelta > 0 && Gia_ManCoNum(
p) % nOutDelta == 0 );
375 pNew->pName = Abc_UtilStrsav(
p->pName );
376 pNew->pSpec = Abc_UtilStrsav(
p->pSpec );
377 pNew->nConstrs =
p->nConstrs;
381 ppNodes[0] = Aig_ManConst0(pNew);
388 if ( i % nOutDelta != 0 )
390 ppNodes[Gia_ObjId(
p, pObj)] =
Aig_ObjCreateCo( pNew, Gia_ObjChild0Copy2(ppNodes, pObj, Gia_ObjId(
p, pObj)) );
417 pNew->pName = Abc_UtilStrsav(
p->pName );
418 pNew->pSpec = Abc_UtilStrsav(
p->pSpec );
419 pNew->nConstrs =
p->nConstrs;
423 if ( Gia_ObjIsAnd(pObj) )
424 ppNodes[i] =
Aig_And( pNew, Gia_ObjChild0Copy2(ppNodes, pObj, Gia_ObjId(
p, pObj)), Gia_ObjChild1Copy2(ppNodes, pObj, Gia_ObjId(
p, pObj)) );
425 else if ( Gia_ObjIsCi(pObj) )
427 else if ( Gia_ObjIsCo(pObj) )
428 ppNodes[i] =
Aig_ObjCreateCo( pNew, Gia_ObjChild0Copy2(ppNodes, pObj, Gia_ObjId(
p, pObj)) );
429 else if ( Gia_ObjIsConst0(pObj) )
430 ppNodes[i] = Aig_ManConst0(pNew);
433 pObj->
Value = Abc_Var2Lit( Aig_ObjId(Aig_Regular(ppNodes[i])), Aig_IsComplement(ppNodes[i]) );
434 assert( i == 0 || Aig_ObjId(ppNodes[i]) == i );
481 assert( pAig->pReprs == NULL );
487 pGiaObj = Gia_ManObj( pGia, Abc_Lit2Var(pObj->
iData) );
494 pGiaRepr = Gia_ObjReprObj( pGia, i );
495 if ( pGiaRepr == NULL )
504 assert( pAig->pReprs == NULL );
510 pGiaRepr = Gia_ObjReprObj( pGia, i );
511 if ( pGiaRepr == NULL )
533 assert( pAig->pReprs != NULL );
535 assert( Gia_ManObjNum(pGia) - Gia_ManCoNum(pGia) == Aig_ManObjNum(pAig) - Aig_ManCoNum(pAig) );
537 for ( i = 0; i < Gia_ManObjNum(pGia); i++ )
538 Gia_ObjSetRepr( pGia, i,
GIA_VOID );
542 if ( Gia_ObjIsCo(pObjGia) )
544 assert( i == 0 || !Abc_LitIsCompl(Gia_ObjValue(pObjGia)) );
545 pObjAig = Aig_ManObj( pAig, Abc_Lit2Var(Gia_ObjValue(pObjGia)) );
550 if ( Aig_ObjIsCo(pObjAig) )
552 if ( pAig->pReprs[i] == NULL )
554 pReprAig = pAig->pReprs[i];
555 Gia_ObjSetRepr( pGia, pObjAig->
iData, pReprAig->
iData );
563 assert( pAig->pReprs != NULL );
565 assert( Gia_ManObjNum(pGia) - Gia_ManCoNum(pGia) == Aig_ManObjNum(pAig) - Aig_ManCoNum(pAig) );
567 for ( i = 0; i < Gia_ManObjNum(pGia); i++ )
568 Gia_ObjSetRepr( pGia, i,
GIA_VOID );
571 if ( Aig_ObjIsCo(pObjAig) )
573 if ( pAig->pReprs[i] == NULL )
575 pReprAig = pAig->pReprs[i];
576 Gia_ObjSetRepr( pGia, Abc_Lit2Var(pObjAig->
iData), Abc_Lit2Var(pReprAig->
iData) );
596 if (
p->pManTime &&
p->vLevels == NULL )
621 Vec_Int_t * vPointed = Vec_IntStart( Gia_ManObjNum(
p) );
623 if ( Gia_ObjSibl(
p, i) )
624 Vec_IntWriteEntry( vPointed, Gia_ObjSibl(
p, i), 1 );
627 if ( Vec_IntEntry(vPointed, i) && Gia_ObjRefNumId(
p, i) > 0 )
629 printf(
"Gia_ManCheckChoices: Member %d", i );
630 printf(
" of a choice node has %d fanouts.\n", Gia_ObjRefNumId(
p, i) );
632 Vec_IntFree( vPointed );
636 Vec_IntFree( vPointed );
644 if (
p->pManTime &&
p->vLevels == NULL )
646 if ( fUseMapping && Gia_ManHasMapping(
p) )
680 pTemp =
Aig_ManScl( pNew, fConst, fEquiv, 0, -1, -1, fVerbose, 0 );
703 RetValue =
Fra_FraigSat( pNew, 10000000, 0, 0, 0, 0, 1, 1, 0, 0 );
707 int i, * pInit = (
int *)pNew->pData;
708 Gia_ManConst0(
p)->fMark0 = 0;
712 pObj->
fMark0 = (Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj)) &
713 (Gia_ObjFanin1(pObj)->fMark0 ^ Gia_ObjFaninC1(pObj));
715 pObj->
fMark0 = (Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj));
719 if ( i != Gia_ManPoNum(
p) )
720 Abc_Print( 1,
"Counter-example verification has failed. " );
#define ABC_FALLOC(type, num)
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Aig_ManSetRegNum(Aig_Man_t *p, int nRegs)
void Aig_ManReprStart(Aig_Man_t *p, int nIdMax)
DECLARATIONS ///.
void Aig_ObjCreateRepr(Aig_Man_t *p, Aig_Obj_t *pNode1, Aig_Obj_t *pNode2)
#define Aig_ManForEachObj(p, pObj, i)
void Aig_ManStop(Aig_Man_t *p)
#define Aig_ManForEachCi(p, pObj, i)
ITERATORS ///.
Aig_Obj_t * Aig_And(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
Aig_Obj_t * Aig_ObjCreateCo(Aig_Man_t *p, Aig_Obj_t *pDriver)
struct Aig_Obj_t_ Aig_Obj_t
Aig_Man_t * Aig_ManStart(int nNodesMax)
DECLARATIONS ///.
#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_ObjCreateCi(Aig_Man_t *p)
DECLARATIONS ///.
Aig_Man_t * Aig_ManScl(Aig_Man_t *pAig, int fLatchConst, int fLatchEqual, int fUseMvSweep, int nFramesSymb, int nFramesSatur, int fVerbose, int fVeryVerbose)
void Aig_ManCleanData(Aig_Man_t *p)
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Aig_Man_t * Dar_ManChoiceNew(Aig_Man_t *pAig, Dch_Pars_t *pPars)
Aig_Man_t * Dar_ManCompress2(Aig_Man_t *pAig, int fBalance, int fUpdateLevel, int fFanout, int fPower, int fVerbose)
void * Dsm_ManDeriveGia(void *p, int fUseMuxes)
typedefABC_NAMESPACE_HEADER_START struct Dch_Pars_t_ Dch_Pars_t
INCLUDES ///.
int Fra_FraigSat(Aig_Man_t *pMan, ABC_INT64_T nConfLimit, ABC_INT64_T nInsLimit, int nLearnedStart, int nLearnedDelta, int nLearnedPerce, int fFlipBits, int fAndOuts, int fNewSolver, int fVerbose)
ITERATORS ///.
void Gia_ManReprToAigRepr(Aig_Man_t *pAig, Gia_Man_t *pGia)
void Gia_ManCheckChoices(Gia_Man_t *p)
void Gia_ManReprFromAigRepr2(Aig_Man_t *pAig, Gia_Man_t *pGia)
void Gia_ManFromAigChoices_rec(Gia_Man_t *pNew, Aig_Man_t *p, Aig_Obj_t *pObj)
int Gia_ManTestChoices(Gia_Man_t *p)
Gia_Man_t * Gia_ManFromAigChoices(Aig_Man_t *p)
Gia_Man_t * Gia_ManFromAigSwitch(Aig_Man_t *p)
Gia_Man_t * Gia_ManCompress2(Gia_Man_t *p, int fUpdateLevel, int fVerbose)
Gia_Man_t * Gia_ManPerformDch(Gia_Man_t *p, void *pPars)
void Gia_ManSeqCleanupClasses(Gia_Man_t *p, int fConst, int fEquiv, int fVerbose)
Aig_Man_t * Gia_ManToAigSimple(Gia_Man_t *p)
Gia_Man_t * Gia_ManFromAig(Aig_Man_t *p)
INCLUDES ///.
void Gia_ManToAig_rec(Aig_Man_t *pNew, Aig_Obj_t **ppNodes, Gia_Man_t *p, Gia_Obj_t *pObj)
Aig_Man_t * Gia_ManToAig(Gia_Man_t *p, int fChoices)
Aig_Man_t * Gia_ManToAigSkip(Gia_Man_t *p, int nOutDelta)
void Gia_ManReprFromAigRepr(Aig_Man_t *pAig, Gia_Man_t *pGia)
Aig_Man_t * Gia_ManCofactorAig(Aig_Man_t *p, int nFrames, int nCofFanLit)
void Gia_ManFromAig_rec(Gia_Man_t *pNew, Aig_Man_t *p, Aig_Obj_t *pObj)
FUNCTION DEFINITIONS ///.
int Gia_ManSolveSat(Gia_Man_t *p)
void Gia_ManReprToAigRepr2(Aig_Man_t *pAig, Gia_Man_t *pGia)
void Gia_ManCheckChoices_rec(Gia_Man_t *p, Gia_Obj_t *pObj)
Gia_Man_t * Gia_ManFromAigSimple(Aig_Man_t *p)
struct Gia_Rpr_t_ Gia_Rpr_t
void Gia_ManStop(Gia_Man_t *p)
Gia_Man_t * Gia_ManDup(Gia_Man_t *p)
#define Gia_ManForEachPo(p, pObj, i)
#define Gia_ManForEachAnd(p, pObj, i)
void Gia_ManDeriveReprsFromSibls(Gia_Man_t *p)
void Gia_ManDeriveReprs(Gia_Man_t *p)
void Gia_ManSetRegNum(Gia_Man_t *p, int nRegs)
int * Gia_ManDeriveNexts(Gia_Man_t *p)
int Gia_ManLevelWithBoxes(Gia_Man_t *p)
#define Gia_ManForEachPi(p, pObj, i)
Gia_Man_t * Gia_ManStart(int nObjsMax)
FUNCTION DEFINITIONS ///.
struct Gia_Obj_t_ Gia_Obj_t
struct Gia_Man_t_ Gia_Man_t
Gia_Man_t * Gia_ManUnrollAndCofactor(Gia_Man_t *p, int nFrames, int nFanMax, int fVerbose)
void Gia_ManCleanPhase(Gia_Man_t *p)
void Gia_ManTransferTiming(Gia_Man_t *p, Gia_Man_t *pGia)
void Gia_ManCreateRefs(Gia_Man_t *p)
#define Gia_ManForEachObj(p, pObj, i)
MACRO DEFINITIONS ///.
#define Gia_ManForEachCo(p, pObj, i)
#define Gia_ManForEachCi(p, pObj, i)