21#ifndef ABC__aig__gia__gia_h
22#define ABC__aig__gia__gia_h
45#define GIA_NONE 0x1FFFFFFF
46#define GIA_VOID 0x0FFFFFFF
394static inline unsigned Gia_ObjCutSign(
unsigned ObjId ) {
return (1 << (ObjId & 31)); }
395static inline int Gia_WordHasOneBit(
unsigned uWord ) {
return (uWord & (uWord-1)) == 0; }
396static inline int Gia_WordHasOnePair(
unsigned uWord ) {
return Gia_WordHasOneBit(uWord & (uWord>>1) & 0x55555555); }
397static inline int Gia_WordCountOnes(
unsigned uWord )
399 uWord = (uWord & 0x55555555) + ((uWord>>1) & 0x55555555);
400 uWord = (uWord & 0x33333333) + ((uWord>>2) & 0x33333333);
401 uWord = (uWord & 0x0F0F0F0F) + ((uWord>>4) & 0x0F0F0F0F);
402 uWord = (uWord & 0x00FF00FF) + ((uWord>>8) & 0x00FF00FF);
403 return (uWord & 0x0000FFFF) + (uWord>>16);
405static inline int Gia_WordFindFirstBit(
unsigned uWord )
408 for ( i = 0; i < 32; i++ )
409 if ( uWord & (1 << i) )
414static inline int Gia_ManTruthIsConst0(
unsigned * pIn,
int nVars )
417 for ( w = Abc_TruthWordNum(nVars)-1; w >= 0; w-- )
422static inline int Gia_ManTruthIsConst1(
unsigned * pIn,
int nVars )
425 for ( w = Abc_TruthWordNum(nVars)-1; w >= 0; w-- )
426 if ( pIn[w] != ~(
unsigned)0 )
430static inline void Gia_ManTruthCopy(
unsigned * pOut,
unsigned * pIn,
int nVars )
433 for ( w = Abc_TruthWordNum(nVars)-1; w >= 0; w-- )
436static inline void Gia_ManTruthClear(
unsigned * pOut,
int nVars )
439 for ( w = Abc_TruthWordNum(nVars)-1; w >= 0; w-- )
442static inline void Gia_ManTruthFill(
unsigned * pOut,
int nVars )
445 for ( w = Abc_TruthWordNum(nVars)-1; w >= 0; w-- )
446 pOut[w] = ~(
unsigned)0;
448static inline void Gia_ManTruthNot(
unsigned * pOut,
unsigned * pIn,
int nVars )
451 for ( w = Abc_TruthWordNum(nVars)-1; w >= 0; w-- )
455static inline int Gia_ManConst0Lit() {
return 0; }
456static inline int Gia_ManConst1Lit() {
return 1; }
457static inline int Gia_ManIsConst0Lit(
int iLit ) {
return (iLit == 0); }
458static inline int Gia_ManIsConst1Lit(
int iLit ) {
return (iLit == 1); }
459static inline int Gia_ManIsConstLit(
int iLit ) {
return (iLit <= 1); }
464static inline int Gia_IsComplement(
Gia_Obj_t *
p ) {
return (
int)((ABC_PTRUINT_T)(
p) & 01); }
466static inline char * Gia_ManName(
Gia_Man_t *
p ) {
return p->pName; }
467static inline int Gia_ManCiNum(
Gia_Man_t *
p ) {
return Vec_IntSize(
p->vCis); }
468static inline int Gia_ManCoNum(
Gia_Man_t *
p ) {
return Vec_IntSize(
p->vCos); }
469static inline int Gia_ManPiNum(
Gia_Man_t *
p ) {
return Vec_IntSize(
p->vCis) -
p->nRegs; }
470static inline int Gia_ManPoNum(
Gia_Man_t *
p ) {
return Vec_IntSize(
p->vCos) -
p->nRegs; }
471static inline int Gia_ManRegNum(
Gia_Man_t *
p ) {
return p->nRegs; }
472static inline int Gia_ManObjNum(
Gia_Man_t *
p ) {
return p->nObjs; }
473static inline int Gia_ManAndNum(
Gia_Man_t *
p ) {
return p->nObjs - Vec_IntSize(
p->vCis) - Vec_IntSize(
p->vCos) - 1; }
474static inline int Gia_ManXorNum(
Gia_Man_t *
p ) {
return p->nXors; }
475static inline int Gia_ManMuxNum(
Gia_Man_t *
p ) {
return p->nMuxes; }
476static inline int Gia_ManBufNum(
Gia_Man_t *
p ) {
return p->nBufs; }
477static inline int Gia_ManAndNotBufNum(
Gia_Man_t *
p ){
return Gia_ManAndNum(
p) - Gia_ManBufNum(
p); }
478static inline int Gia_ManCandNum(
Gia_Man_t *
p ) {
return Gia_ManCiNum(
p) + Gia_ManAndNum(
p); }
479static inline int Gia_ManConstrNum(
Gia_Man_t *
p ) {
return p->nConstrs; }
480static inline void Gia_ManFlipVerbose(
Gia_Man_t *
p ) {
p->fVerbose ^= 1; }
481static inline int Gia_ManHasChoices(
Gia_Man_t *
p ) {
return p->pSibls != NULL; }
482static inline int Gia_ManChoiceNum(
Gia_Man_t *
p ) {
int c = 0;
if (
p->pSibls) {
int i;
for (i = 0; i <
p->nObjs; i++) c += (
int)(
p->pSibls[i] > 0); }
return c; }
487static inline Gia_Obj_t * Gia_ManCi(
Gia_Man_t *
p,
int v ) {
return Gia_ManObj(
p, Vec_IntEntry(
p->vCis,v) ); }
488static inline Gia_Obj_t * Gia_ManCo(
Gia_Man_t *
p,
int v ) {
return Gia_ManObj(
p, Vec_IntEntry(
p->vCos,v) ); }
491static inline Gia_Obj_t * Gia_ManRo(
Gia_Man_t *
p,
int v ) {
assert( v < Gia_ManRegNum(
p) );
return Gia_ManCi(
p, Gia_ManPiNum(
p)+v ); }
492static inline Gia_Obj_t * Gia_ManRi(
Gia_Man_t *
p,
int v ) {
assert( v < Gia_ManRegNum(
p) );
return Gia_ManCo(
p, Gia_ManPoNum(
p)+v ); }
494static inline int Gia_ObjId(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
assert(
p->pObjs <= pObj && pObj < p->pObjs +
p->nObjs );
return pObj -
p->pObjs; }
497static inline int Gia_ObjValue(
Gia_Obj_t * pObj ) {
return pObj->
Value; }
498static inline void Gia_ObjSetValue(
Gia_Obj_t * pObj,
int i ) { pObj->
Value = i; }
499static inline int Gia_ObjPhase(
Gia_Obj_t * pObj ) {
return pObj->
fPhase; }
500static inline int Gia_ObjPhaseReal(
Gia_Obj_t * pObj ) {
return Gia_Regular(pObj)->fPhase ^ Gia_IsComplement(pObj); }
501static inline int Gia_ObjPhaseDiff(
Gia_Man_t *
p,
int i,
int k ) {
return Gia_ManObj(
p, i)->fPhase ^ Gia_ManObj(
p, k)->fPhase; }
502static inline char * Gia_ObjCiName(
Gia_Man_t *
p,
int i ) {
return p->vNamesIn ? (
char*)Vec_PtrEntry(
p->vNamesIn, i) : NULL; }
503static inline char * Gia_ObjCoName(
Gia_Man_t *
p,
int i ) {
return p->vNamesOut ? (
char*)Vec_PtrEntry(
p->vNamesOut, i) : NULL; }
504static inline char * Gia_ObjName(
Gia_Man_t *
p,
int i ) {
return p->vNamesNode ? (
char*)Vec_PtrEntry(
p->vNamesNode, i) : NULL; }
505static inline char * Gia_ObjNameObj(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return p->vNamesNode ? (
char*)Vec_PtrEntry(
p->vNamesNode, Gia_ObjId(
p, pObj)) : NULL; }
507static inline int Gia_ObjIsTerm(
Gia_Obj_t * pObj ) {
return pObj->
fTerm; }
508static inline int Gia_ObjIsAndOrConst0(
Gia_Obj_t * pObj ) {
return!pObj->
fTerm; }
512static inline int Gia_ObjIsXor(
Gia_Obj_t * pObj ) {
return Gia_ObjIsAnd(pObj) && pObj->
iDiff0 < pObj->
iDiff1; }
513static inline int Gia_ObjIsMuxId(
Gia_Man_t *
p,
int iObj ) {
return p->pMuxes &&
p->pMuxes[iObj] > 0; }
514static inline int Gia_ObjIsMux(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Gia_ObjIsMuxId(
p, Gia_ObjId(
p, pObj) ); }
515static inline int Gia_ObjIsAndReal(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Gia_ObjIsAnd(pObj) && pObj->
iDiff0 > pObj->
iDiff1 && !Gia_ObjIsMux(
p, pObj); }
517static inline int Gia_ObjIsAndNotBuf(
Gia_Obj_t * pObj ) {
return Gia_ObjIsAnd(pObj) && pObj->
iDiff0 != pObj->
iDiff1; }
518static inline int Gia_ObjIsCand(
Gia_Obj_t * pObj ) {
return Gia_ObjIsAnd(pObj) || Gia_ObjIsCi(pObj); }
520static inline int Gia_ManObjIsConst0(
Gia_Man_t *
p,
Gia_Obj_t * pObj){
return pObj ==
p->pObjs; }
522static inline int Gia_Obj2Lit(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Abc_Var2Lit(Gia_ObjId(
p, Gia_Regular(pObj)), Gia_IsComplement(pObj)); }
523static inline Gia_Obj_t * Gia_Lit2Obj(
Gia_Man_t *
p,
int iLit ) {
return Gia_NotCond(Gia_ManObj(
p, Abc_Lit2Var(iLit)), Abc_LitIsCompl(iLit)); }
524static inline int Gia_ManCiLit(
Gia_Man_t *
p,
int CiId ) {
return Gia_Obj2Lit(
p, Gia_ManCi(
p, CiId) ); }
526static inline int Gia_ManIdToCioId(
Gia_Man_t *
p,
int Id ) {
return Gia_ObjCioId( Gia_ManObj(
p, Id) ); }
527static inline int Gia_ManCiIdToId(
Gia_Man_t *
p,
int CiId ) {
return Gia_ObjId(
p, Gia_ManCi(
p, CiId) ); }
528static inline int Gia_ManCoIdToId(
Gia_Man_t *
p,
int CoId ) {
return Gia_ObjId(
p, Gia_ManCo(
p, CoId) ); }
530static inline int Gia_ObjIsPi(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Gia_ObjIsCi(pObj) && Gia_ObjCioId(pObj) < Gia_ManPiNum(
p); }
531static inline int Gia_ObjIsPo(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Gia_ObjIsCo(pObj) && Gia_ObjCioId(pObj) < Gia_ManPoNum(
p); }
532static inline int Gia_ObjIsRo(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Gia_ObjIsCi(pObj) && Gia_ObjCioId(pObj) >= Gia_ManPiNum(
p); }
533static inline int Gia_ObjIsRi(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Gia_ObjIsCo(pObj) && Gia_ObjCioId(pObj) >= Gia_ManPoNum(
p); }
535static inline Gia_Obj_t * Gia_ObjRoToRi(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
assert( Gia_ObjIsRo(
p, pObj) );
return Gia_ManCo(
p, Gia_ManCoNum(
p) - Gia_ManCiNum(
p) + Gia_ObjCioId(pObj)); }
536static inline Gia_Obj_t * Gia_ObjRiToRo(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
assert( Gia_ObjIsRi(
p, pObj) );
return Gia_ManCi(
p, Gia_ManCiNum(
p) - Gia_ManCoNum(
p) + Gia_ObjCioId(pObj)); }
537static inline int Gia_ObjRoToRiId(
Gia_Man_t *
p,
int ObjId ) {
return Gia_ObjId(
p, Gia_ObjRoToRi(
p, Gia_ManObj(
p, ObjId) ) ); }
538static inline int Gia_ObjRiToRoId(
Gia_Man_t *
p,
int ObjId ) {
return Gia_ObjId(
p, Gia_ObjRiToRo(
p, Gia_ManObj(
p, ObjId) ) ); }
540static inline int Gia_ObjDiff0(
Gia_Obj_t * pObj ) {
return pObj->
iDiff0; }
541static inline int Gia_ObjDiff1(
Gia_Obj_t * pObj ) {
return pObj->
iDiff1; }
542static inline int Gia_ObjFaninC0(
Gia_Obj_t * pObj ) {
return pObj->
fCompl0; }
543static inline int Gia_ObjFaninC1(
Gia_Obj_t * pObj ) {
return pObj->
fCompl1; }
544static inline int Gia_ObjFaninC2(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return p->pMuxes && Abc_LitIsCompl(
p->pMuxes[Gia_ObjId(
p, pObj)]); }
545static inline int Gia_ObjFaninC(
Gia_Obj_t * pObj,
int n ) {
return n ? Gia_ObjFaninC1(pObj) : Gia_ObjFaninC0(pObj); }
548static inline Gia_Obj_t * Gia_ObjFanin2(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return p->pMuxes ? Gia_ManObj(
p, Abc_Lit2Var(
p->pMuxes[Gia_ObjId(
p, pObj)])) : NULL; }
549static inline Gia_Obj_t * Gia_ObjFanin(
Gia_Obj_t * pObj,
int n ) {
return n ? Gia_ObjFanin1(pObj) : Gia_ObjFanin0(pObj); }
550static inline Gia_Obj_t * Gia_ObjChild0(
Gia_Obj_t * pObj ) {
return Gia_NotCond( Gia_ObjFanin0(pObj), Gia_ObjFaninC0(pObj) ); }
551static inline Gia_Obj_t * Gia_ObjChild1(
Gia_Obj_t * pObj ) {
return Gia_NotCond( Gia_ObjFanin1(pObj), Gia_ObjFaninC1(pObj) ); }
552static inline Gia_Obj_t * Gia_ObjChild2(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Gia_NotCond( Gia_ObjFanin2(
p, pObj), Gia_ObjFaninC2(
p, pObj) ); }
553static inline int Gia_ObjFaninId0(
Gia_Obj_t * pObj,
int ObjId ) {
return ObjId - pObj->
iDiff0; }
554static inline int Gia_ObjFaninId1(
Gia_Obj_t * pObj,
int ObjId ) {
return ObjId - pObj->
iDiff1; }
555static inline int Gia_ObjFaninId2(
Gia_Man_t *
p,
int ObjId ) {
return (
p->pMuxes &&
p->pMuxes[ObjId]) ? Abc_Lit2Var(
p->pMuxes[ObjId]) : -1; }
556static inline int Gia_ObjFaninId(
Gia_Obj_t * pObj,
int ObjId,
int n ){
return n ? Gia_ObjFaninId1(pObj, ObjId) : Gia_ObjFaninId0(pObj, ObjId); }
557static inline int Gia_ObjFaninId0p(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Gia_ObjFaninId0( pObj, Gia_ObjId(
p, pObj) ); }
558static inline int Gia_ObjFaninId1p(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Gia_ObjFaninId1( pObj, Gia_ObjId(
p, pObj) ); }
559static inline int Gia_ObjFaninId2p(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return (
p->pMuxes &&
p->pMuxes[Gia_ObjId(
p, pObj)]) ? Abc_Lit2Var(
p->pMuxes[Gia_ObjId(
p, pObj)]) : -1; }
560static inline int Gia_ObjFaninIdp(
Gia_Man_t *
p,
Gia_Obj_t * pObj,
int n){
return n ? Gia_ObjFaninId1p(
p, pObj) : Gia_ObjFaninId0p(
p, pObj); }
561static inline int Gia_ObjFaninLit0(
Gia_Obj_t * pObj,
int ObjId ) {
return Abc_Var2Lit( Gia_ObjFaninId0(pObj, ObjId), Gia_ObjFaninC0(pObj) ); }
562static inline int Gia_ObjFaninLit1(
Gia_Obj_t * pObj,
int ObjId ) {
return Abc_Var2Lit( Gia_ObjFaninId1(pObj, ObjId), Gia_ObjFaninC1(pObj) ); }
563static inline int Gia_ObjFaninLit2(
Gia_Man_t *
p,
int ObjId ) {
return (
p->pMuxes &&
p->pMuxes[ObjId]) ?
p->pMuxes[ObjId] : -1; }
564static inline int Gia_ObjFaninLit(
Gia_Obj_t * pObj,
int ObjId,
int n ){
return n ? Gia_ObjFaninLit1(pObj, ObjId) : Gia_ObjFaninLit0(pObj, ObjId);}
565static inline int Gia_ObjFaninLit0p(
Gia_Man_t *
p,
Gia_Obj_t * pObj) {
return Abc_Var2Lit( Gia_ObjFaninId0p(
p, pObj), Gia_ObjFaninC0(pObj) ); }
566static inline int Gia_ObjFaninLit1p(
Gia_Man_t *
p,
Gia_Obj_t * pObj) {
return Abc_Var2Lit( Gia_ObjFaninId1p(
p, pObj), Gia_ObjFaninC1(pObj) ); }
567static inline int Gia_ObjFaninLit2p(
Gia_Man_t *
p,
Gia_Obj_t * pObj) {
return (
p->pMuxes &&
p->pMuxes[Gia_ObjId(
p, pObj)]) ?
p->pMuxes[Gia_ObjId(
p, pObj)] : -1; }
568static inline int Gia_ObjFaninLitp(
Gia_Man_t *
p,
Gia_Obj_t * pObj,
int n ){
return n ? Gia_ObjFaninLit1p(
p, pObj) : Gia_ObjFaninLit0p(
p, pObj);}
569static inline void Gia_ObjFlipFaninC0(
Gia_Obj_t * pObj ) {
assert( Gia_ObjIsCo(pObj) ); pObj->
fCompl0 ^= 1; }
570static inline int Gia_ObjFaninNum(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
if ( Gia_ObjIsMux(
p, pObj) )
return 3;
if ( Gia_ObjIsAnd(pObj) )
return 2;
if ( Gia_ObjIsCo(pObj) )
return 1;
return 0; }
571static inline int Gia_ObjWhatFanin(
Gia_Man_t *
p,
Gia_Obj_t * pObj,
Gia_Obj_t * pFanin ) {
if ( Gia_ObjFanin0(pObj) == pFanin )
return 0;
if ( Gia_ObjFanin1(pObj) == pFanin )
return 1;
if ( Gia_ObjFanin2(
p, pObj) == pFanin )
return 2;
assert(0);
return -1; }
573static inline int Gia_ManCoDriverId(
Gia_Man_t *
p,
int iCoIndex ) {
return Gia_ObjFaninId0p(
p, Gia_ManCo(
p, iCoIndex)); }
574static inline int Gia_ManPoIsConst(
Gia_Man_t *
p,
int iPoIndex ) {
return Gia_ObjFaninId0p(
p, Gia_ManPo(
p, iPoIndex)) == 0; }
575static inline int Gia_ManPoIsConst0(
Gia_Man_t *
p,
int iPoIndex ) {
return Gia_ManIsConst0Lit( Gia_ObjFaninLit0p(
p, Gia_ManPo(
p, iPoIndex)) ); }
576static inline int Gia_ManPoIsConst1(
Gia_Man_t *
p,
int iPoIndex ) {
return Gia_ManIsConst1Lit( Gia_ObjFaninLit0p(
p, Gia_ManPo(
p, iPoIndex)) ); }
579static inline int Gia_ObjLitCopy(
Gia_Man_t *
p,
int iLit ) {
return Abc_LitNotCond( Gia_ManObj(
p, Abc_Lit2Var(iLit))->Value, Abc_LitIsCompl(iLit)); }
581static inline int Gia_ObjFanin0Copy(
Gia_Obj_t * pObj ) {
return Abc_LitNotCond( Gia_ObjFanin0(pObj)->Value, Gia_ObjFaninC0(pObj) ); }
582static inline int Gia_ObjFanin1Copy(
Gia_Obj_t * pObj ) {
return Abc_LitNotCond( Gia_ObjFanin1(pObj)->Value, Gia_ObjFaninC1(pObj) ); }
583static inline int Gia_ObjFanin2Copy(
Gia_Man_t *
p,
Gia_Obj_t * pObj ){
return Abc_LitNotCond(Gia_ObjFanin2(
p, pObj)->Value, Gia_ObjFaninC2(
p, pObj)); }
585static inline int Gia_ObjCopyF(
Gia_Man_t *
p,
int f,
Gia_Obj_t * pObj ) {
return Vec_IntEntry(&
p->vCopies, Gia_ManObjNum(
p) * f + Gia_ObjId(
p,pObj)); }
586static inline void Gia_ObjSetCopyF(
Gia_Man_t *
p,
int f,
Gia_Obj_t * pObj,
int iLit ) { Vec_IntWriteEntry(&
p->vCopies, Gia_ManObjNum(
p) * f + Gia_ObjId(
p,pObj), iLit); }
587static inline int Gia_ObjCopyArray(
Gia_Man_t *
p,
int iObj ) {
return Vec_IntEntry(&
p->vCopies, iObj); }
588static inline void Gia_ObjSetCopyArray(
Gia_Man_t *
p,
int iObj,
int iLit ) { Vec_IntWriteEntry(&
p->vCopies, iObj, iLit); }
589static inline void Gia_ManCleanCopyArray(
Gia_Man_t *
p ) { Vec_IntFill( &
p->vCopies, Gia_ManObjNum(
p), -1 ); }
591static inline int Gia_ObjCopy2Array(
Gia_Man_t *
p,
int iObj ) {
return Vec_IntEntry(&
p->vCopies2, iObj); }
592static inline void Gia_ObjSetCopy2Array(
Gia_Man_t *
p,
int iObj,
int iLit ) { Vec_IntWriteEntry(&
p->vCopies2, iObj, iLit); }
593static inline void Gia_ManCleanCopy2Array(
Gia_Man_t *
p ) { Vec_IntFill( &
p->vCopies2, Gia_ManObjNum(
p), -1 ); }
595static inline int Gia_ObjFanin0CopyF(
Gia_Man_t *
p,
int f,
Gia_Obj_t * pObj ) {
return Abc_LitNotCond(Gia_ObjCopyF(
p, f, Gia_ObjFanin0(pObj)), Gia_ObjFaninC0(pObj)); }
596static inline int Gia_ObjFanin1CopyF(
Gia_Man_t *
p,
int f,
Gia_Obj_t * pObj ) {
return Abc_LitNotCond(Gia_ObjCopyF(
p, f, Gia_ObjFanin1(pObj)), Gia_ObjFaninC1(pObj)); }
597static inline int Gia_ObjFanin0CopyArray(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Abc_LitNotCond(Gia_ObjCopyArray(
p, Gia_ObjFaninId0p(
p,pObj)), Gia_ObjFaninC0(pObj)); }
598static inline int Gia_ObjFanin1CopyArray(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Abc_LitNotCond(Gia_ObjCopyArray(
p, Gia_ObjFaninId1p(
p,pObj)), Gia_ObjFaninC1(pObj)); }
600static inline Gia_Obj_t * Gia_ObjFromLit(
Gia_Man_t *
p,
int iLit ) {
return Gia_NotCond( Gia_ManObj(
p, Abc_Lit2Var(iLit)), Abc_LitIsCompl(iLit) ); }
601static inline int Gia_ObjToLit(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Abc_Var2Lit( Gia_ObjId(
p, Gia_Regular(pObj)), Gia_IsComplement(pObj) ); }
602static inline int Gia_ObjPhaseRealLit(
Gia_Man_t *
p,
int iLit ) {
return Gia_ObjPhaseReal( Gia_ObjFromLit(
p, iLit) ); }
604static inline int Gia_ObjLevelId(
Gia_Man_t *
p,
int Id ) {
return Vec_IntGetEntry(
p->vLevels, Id); }
605static inline int Gia_ObjLevel(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Gia_ObjLevelId(
p, Gia_ObjId(
p,pObj) ); }
606static inline void Gia_ObjUpdateLevelId(
Gia_Man_t *
p,
int Id,
int l ) { Vec_IntSetEntry(
p->vLevels, Id, Abc_MaxInt(Vec_IntEntry(
p->vLevels, Id), l)); }
607static inline void Gia_ObjSetLevelId(
Gia_Man_t *
p,
int Id,
int l ) { Vec_IntSetEntry(
p->vLevels, Id, l); }
608static inline void Gia_ObjSetLevel(
Gia_Man_t *
p,
Gia_Obj_t * pObj,
int l ) { Gia_ObjSetLevelId(
p, Gia_ObjId(
p,pObj), l ); }
609static inline void Gia_ObjSetCoLevel(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
assert( Gia_ObjIsCo(pObj) ); Gia_ObjSetLevel(
p, pObj, Gia_ObjLevel(
p,Gia_ObjFanin0(pObj)) ); }
610static inline void Gia_ObjSetBufLevel(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
assert( Gia_ObjIsAnd(pObj) ); Gia_ObjSetLevel(
p, pObj, Gia_ObjLevel(
p,Gia_ObjFanin0(pObj)) ); }
611static inline void Gia_ObjSetAndLevel(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
assert( Gia_ObjIsAnd(pObj) ); Gia_ObjSetLevel(
p, pObj, 1+Abc_MaxInt(Gia_ObjLevel(
p,Gia_ObjFanin0(pObj)),Gia_ObjLevel(
p,Gia_ObjFanin1(pObj))) ); }
612static inline void Gia_ObjSetXorLevel(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
assert( Gia_ObjIsXor(pObj) ); Gia_ObjSetLevel(
p, pObj, 2+Abc_MaxInt(Gia_ObjLevel(
p,Gia_ObjFanin0(pObj)),Gia_ObjLevel(
p,Gia_ObjFanin1(pObj))) ); }
613static inline void Gia_ObjSetMuxLevel(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
assert( Gia_ObjIsMux(
p,pObj) ); Gia_ObjSetLevel(
p, pObj, 2+Abc_MaxInt( Abc_MaxInt(Gia_ObjLevel(
p,Gia_ObjFanin0(pObj)),Gia_ObjLevel(
p,Gia_ObjFanin1(pObj))), Gia_ObjLevel(
p,Gia_ObjFanin2(
p,pObj))) ); }
614static inline void Gia_ObjSetGateLevel(
Gia_Man_t *
p,
Gia_Obj_t * pObj ){
if ( !
p->fGiaSimple && Gia_ObjIsBuf(pObj) ) Gia_ObjSetBufLevel(
p, pObj);
else if ( Gia_ObjIsMux(
p,pObj) ) Gia_ObjSetMuxLevel(
p, pObj);
else if ( Gia_ObjIsXor(pObj) ) Gia_ObjSetXorLevel(
p, pObj);
else if ( Gia_ObjIsAnd(pObj) ) Gia_ObjSetAndLevel(
p, pObj); }
616static inline int Gia_ObjHasNumId(
Gia_Man_t *
p,
int Id ) {
return Vec_IntEntry(
p->vTtNums, Id) > -
ABC_INFINITY; }
617static inline int Gia_ObjNumId(
Gia_Man_t *
p,
int Id ) {
return Vec_IntEntry(
p->vTtNums, Id); }
618static inline int Gia_ObjNum(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Vec_IntEntry(
p->vTtNums, Gia_ObjId(
p,pObj)); }
619static inline void Gia_ObjSetNumId(
Gia_Man_t *
p,
int Id,
int n ) { Vec_IntWriteEntry(
p->vTtNums, Id, n); }
620static inline void Gia_ObjSetNum(
Gia_Man_t *
p,
Gia_Obj_t * pObj,
int n ) { Vec_IntWriteEntry(
p->vTtNums, Gia_ObjId(
p,pObj), n); }
621static inline void Gia_ObjResetNumId(
Gia_Man_t *
p,
int Id ) { Vec_IntWriteEntry(
p->vTtNums, Id, -
ABC_INFINITY); }
623static inline int Gia_ObjRefNumId(
Gia_Man_t *
p,
int Id ) {
return p->pRefs[Id]; }
624static inline int Gia_ObjRefIncId(
Gia_Man_t *
p,
int Id ) {
return p->pRefs[Id]++; }
625static inline int Gia_ObjRefDecId(
Gia_Man_t *
p,
int Id ) {
return --
p->pRefs[Id]; }
626static inline int Gia_ObjRefNum(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Gia_ObjRefNumId(
p, Gia_ObjId(
p, pObj) ); }
627static inline int Gia_ObjRefInc(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Gia_ObjRefIncId(
p, Gia_ObjId(
p, pObj) ); }
628static inline int Gia_ObjRefDec(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Gia_ObjRefDecId(
p, Gia_ObjId(
p, pObj) ); }
629static inline void Gia_ObjRefFanin0Inc(
Gia_Man_t *
p,
Gia_Obj_t * pObj) { Gia_ObjRefInc(
p, Gia_ObjFanin0(pObj)); }
630static inline void Gia_ObjRefFanin1Inc(
Gia_Man_t *
p,
Gia_Obj_t * pObj) { Gia_ObjRefInc(
p, Gia_ObjFanin1(pObj)); }
631static inline void Gia_ObjRefFanin2Inc(
Gia_Man_t *
p,
Gia_Obj_t * pObj) { Gia_ObjRefInc(
p, Gia_ObjFanin2(
p, pObj)); }
632static inline void Gia_ObjRefFanin0Dec(
Gia_Man_t *
p,
Gia_Obj_t * pObj) { Gia_ObjRefDec(
p, Gia_ObjFanin0(pObj)); }
633static inline void Gia_ObjRefFanin1Dec(
Gia_Man_t *
p,
Gia_Obj_t * pObj) { Gia_ObjRefDec(
p, Gia_ObjFanin1(pObj)); }
634static inline void Gia_ObjRefFanin2Dec(
Gia_Man_t *
p,
Gia_Obj_t * pObj) { Gia_ObjRefDec(
p, Gia_ObjFanin2(
p, pObj)); }
636static inline int Gia_ObjLutRefNumId(
Gia_Man_t *
p,
int Id ) {
assert(
p->pLutRefs);
return p->pLutRefs[Id]; }
637static inline int Gia_ObjLutRefIncId(
Gia_Man_t *
p,
int Id ) {
assert(
p->pLutRefs);
return p->pLutRefs[Id]++; }
638static inline int Gia_ObjLutRefDecId(
Gia_Man_t *
p,
int Id ) {
assert(
p->pLutRefs);
return --
p->pLutRefs[Id]; }
643static inline void Gia_ObjSetTravIdCurrent(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
assert( Gia_ObjId(
p, pObj) <
p->nTravIdsAlloc );
p->pTravIds[Gia_ObjId(
p, pObj)] =
p->nTravIds; }
644static inline void Gia_ObjSetTravIdPrevious(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
assert( Gia_ObjId(
p, pObj) <
p->nTravIdsAlloc );
p->pTravIds[Gia_ObjId(
p, pObj)] =
p->nTravIds - 1; }
645static inline int Gia_ObjIsTravIdCurrent(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
assert( Gia_ObjId(
p, pObj) <
p->nTravIdsAlloc );
return (
p->pTravIds[Gia_ObjId(
p, pObj)] ==
p->nTravIds); }
646static inline int Gia_ObjIsTravIdPrevious(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
assert( Gia_ObjId(
p, pObj) <
p->nTravIdsAlloc );
return (
p->pTravIds[Gia_ObjId(
p, pObj)] ==
p->nTravIds - 1); }
647static inline int Gia_ObjUpdateTravIdCurrent(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
if ( Gia_ObjIsTravIdCurrent(
p, pObj) )
return 1; Gia_ObjSetTravIdCurrent(
p, pObj);
return 0; }
648static inline int Gia_ObjUpdateTravIdPrevious(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
if ( Gia_ObjIsTravIdPrevious(
p, pObj) )
return 1; Gia_ObjSetTravIdPrevious(
p, pObj);
return 0; }
649static inline void Gia_ObjSetTravIdCurrentId(
Gia_Man_t *
p,
int Id ) {
assert( Id < p->nTravIdsAlloc );
p->pTravIds[Id] =
p->nTravIds; }
650static inline void Gia_ObjSetTravIdPreviousId(
Gia_Man_t *
p,
int Id ) {
assert( Id < p->nTravIdsAlloc );
p->pTravIds[Id] =
p->nTravIds - 1; }
651static inline int Gia_ObjIsTravIdCurrentId(
Gia_Man_t *
p,
int Id ) {
assert( Id < p->nTravIdsAlloc );
return (
p->pTravIds[Id] ==
p->nTravIds); }
652static inline int Gia_ObjIsTravIdPreviousId(
Gia_Man_t *
p,
int Id ) {
assert( Id < p->nTravIdsAlloc );
return (
p->pTravIds[Id] ==
p->nTravIds - 1); }
653static inline int Gia_ObjUpdateTravIdCurrentId(
Gia_Man_t *
p,
int Id ) {
if ( Gia_ObjIsTravIdCurrentId(
p, Id) )
return 1; Gia_ObjSetTravIdCurrentId(
p, Id);
return 0; }
654static inline int Gia_ObjUpdateTravIdPreviousId(
Gia_Man_t *
p,
int Id ) {
if ( Gia_ObjIsTravIdPreviousId(
p, Id) )
return 1; Gia_ObjSetTravIdPreviousId(
p, Id);
return 0; }
656static inline void Gia_ManTimeClean(
Gia_Man_t *
p ) {
int i;
assert(
p->vTiming != NULL ); Vec_FltFill(
p->vTiming, 3*Gia_ManObjNum(
p), 0);
for ( i = 0; i < Gia_ManObjNum(
p); i++ ) Vec_FltWriteEntry(
p->vTiming, 3*i+1, (
float)(
ABC_INFINITY) ); }
657static inline void Gia_ManTimeStart(
Gia_Man_t *
p ) {
assert(
p->vTiming == NULL );
p->vTiming = Vec_FltAlloc(0); Gia_ManTimeClean(
p ); }
658static inline void Gia_ManTimeStop(
Gia_Man_t *
p ) {
assert(
p->vTiming != NULL ); Vec_FltFreeP(&
p->vTiming); }
659static inline float Gia_ObjTimeArrival(
Gia_Man_t *
p,
int Id ) {
return Vec_FltEntry(
p->vTiming, 3*Id+0); }
660static inline float Gia_ObjTimeRequired(
Gia_Man_t *
p,
int Id ) {
return Vec_FltEntry(
p->vTiming, 3*Id+1); }
661static inline float Gia_ObjTimeSlack(
Gia_Man_t *
p,
int Id ) {
return Vec_FltEntry(
p->vTiming, 3*Id+2); }
662static inline float Gia_ObjTimeArrivalObj(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Gia_ObjTimeArrival(
p, Gia_ObjId(
p, pObj) ); }
663static inline float Gia_ObjTimeRequiredObj(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Gia_ObjTimeRequired(
p, Gia_ObjId(
p, pObj) ); }
664static inline float Gia_ObjTimeSlackObj(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Gia_ObjTimeSlack(
p, Gia_ObjId(
p, pObj) ); }
665static inline void Gia_ObjSetTimeArrival(
Gia_Man_t *
p,
int Id,
float t ) { Vec_FltWriteEntry(
p->vTiming, 3*Id+0, t ); }
666static inline void Gia_ObjSetTimeRequired(
Gia_Man_t *
p,
int Id,
float t ) { Vec_FltWriteEntry(
p->vTiming, 3*Id+1, t ); }
667static inline void Gia_ObjSetTimeSlack(
Gia_Man_t *
p,
int Id,
float t ) { Vec_FltWriteEntry(
p->vTiming, 3*Id+2, t ); }
668static inline void Gia_ObjSetTimeArrivalObj(
Gia_Man_t *
p,
Gia_Obj_t * pObj,
float t ) { Gia_ObjSetTimeArrival(
p, Gia_ObjId(
p, pObj), t ); }
669static inline void Gia_ObjSetTimeRequiredObj(
Gia_Man_t *
p,
Gia_Obj_t * pObj,
float t ) { Gia_ObjSetTimeRequired(
p, Gia_ObjId(
p, pObj), t ); }
670static inline void Gia_ObjSetTimeSlackObj(
Gia_Man_t *
p,
Gia_Obj_t * pObj,
float t ) { Gia_ObjSetTimeSlack(
p, Gia_ObjId(
p, pObj), t ); }
672static inline int Gia_ObjSimWords(
Gia_Man_t *
p ) {
return Vec_WrdSize(
p->vSimsPi ) / Gia_ManPiNum(
p ); }
673static inline word * Gia_ObjSimPi(
Gia_Man_t *
p,
int PiId ) {
return Vec_WrdEntryP(
p->vSimsPi, PiId * Gia_ObjSimWords(
p) ); }
674static inline word * Gia_ObjSim(
Gia_Man_t *
p,
int Id ) {
return Vec_WrdEntryP(
p->vSims, Id * Gia_ObjSimWords(
p) ); }
681 if (
p->nObjs ==
p->nObjsAlloc )
683 int nObjNew = Abc_MinInt( 2 *
p->nObjsAlloc, (1 << 29) );
684 if (
p->nObjs == (1 << 29) )
685 printf(
"Hard limit on the number of nodes (2^29) is reached. Quitting...\n" ),
exit(1);
688 printf(
"Extending GIA object storage: %d -> %d.\n",
p->nObjsAlloc, nObjNew );
695 memset(
p->pMuxes +
p->nObjsAlloc, 0,
sizeof(
unsigned) * (nObjNew -
p->nObjsAlloc) );
697 p->nObjsAlloc = nObjNew;
699 if ( Vec_IntSize(&
p->vHTable) ) Vec_IntPush( &
p->vHash, 0 );
700 return Gia_ManObj(
p,
p->nObjs++ );
702static inline int Gia_ManAppendCi(
Gia_Man_t *
p )
707 pObj->
iDiff1 = Vec_IntSize(
p->vCis );
708 Vec_IntPush(
p->vCis, Gia_ObjId(
p, pObj) );
709 return Gia_ObjId(
p, pObj ) << 1;
715static inline int Gia_ManAppendAnd(
Gia_Man_t *
p,
int iLit0,
int iLit1 )
718 assert( iLit0 >= 0 && Abc_Lit2Var(iLit0) < Gia_ManObjNum(
p) );
719 assert( iLit1 >= 0 && Abc_Lit2Var(iLit1) < Gia_ManObjNum(
p) );
720 assert(
p->fGiaSimple || Abc_Lit2Var(iLit0) != Abc_Lit2Var(iLit1) );
723 pObj->
iDiff0 = (unsigned)(Gia_ObjId(
p, pObj) - Abc_Lit2Var(iLit0));
724 pObj->
fCompl0 = (unsigned)(Abc_LitIsCompl(iLit0));
725 pObj->
iDiff1 = (unsigned)(Gia_ObjId(
p, pObj) - Abc_Lit2Var(iLit1));
726 pObj->
fCompl1 = (unsigned)(Abc_LitIsCompl(iLit1));
730 pObj->
iDiff1 = (unsigned)(Gia_ObjId(
p, pObj) - Abc_Lit2Var(iLit0));
731 pObj->
fCompl1 = (unsigned)(Abc_LitIsCompl(iLit0));
732 pObj->
iDiff0 = (unsigned)(Gia_ObjId(
p, pObj) - Abc_Lit2Var(iLit1));
733 pObj->
fCompl0 = (unsigned)(Abc_LitIsCompl(iLit1));
746 pObj->
fPhase = (Gia_ObjPhase(pFan0) ^ Gia_ObjFaninC0(pObj)) & (Gia_ObjPhase(pFan1) ^ Gia_ObjFaninC1(pObj));
748 if (
p->fBuiltInSim )
752 pObj->
fPhase = (Gia_ObjPhase(pFan0) ^ Gia_ObjFaninC0(pObj)) & (Gia_ObjPhase(pFan1) ^ Gia_ObjFaninC1(pObj));
757 return Gia_ObjId(
p, pObj ) << 1;
759static inline int Gia_ManAppendXorReal(
Gia_Man_t *
p,
int iLit0,
int iLit1 )
762 assert( iLit0 >= 0 && Abc_Lit2Var(iLit0) < Gia_ManObjNum(
p) );
763 assert( iLit1 >= 0 && Abc_Lit2Var(iLit1) < Gia_ManObjNum(
p) );
764 assert( Abc_Lit2Var(iLit0) != Abc_Lit2Var(iLit1) );
767 if ( Abc_Lit2Var(iLit0) > Abc_Lit2Var(iLit1) )
769 pObj->
iDiff0 = (unsigned)(Gia_ObjId(
p, pObj) - Abc_Lit2Var(iLit0));
770 pObj->
fCompl0 = (unsigned)(Abc_LitIsCompl(iLit0));
771 pObj->
iDiff1 = (unsigned)(Gia_ObjId(
p, pObj) - Abc_Lit2Var(iLit1));
772 pObj->
fCompl1 = (unsigned)(Abc_LitIsCompl(iLit1));
776 pObj->
iDiff1 = (unsigned)(Gia_ObjId(
p, pObj) - Abc_Lit2Var(iLit0));
777 pObj->
fCompl1 = (unsigned)(Abc_LitIsCompl(iLit0));
778 pObj->
iDiff0 = (unsigned)(Gia_ObjId(
p, pObj) - Abc_Lit2Var(iLit1));
779 pObj->
fCompl0 = (unsigned)(Abc_LitIsCompl(iLit1));
782 return Gia_ObjId(
p, pObj ) << 1;
784static inline int Gia_ManAppendMuxReal(
Gia_Man_t *
p,
int iLitC,
int iLit1,
int iLit0 )
788 assert( iLit0 >= 0 && Abc_Lit2Var(iLit0) < Gia_ManObjNum(
p) );
789 assert( iLit1 >= 0 && Abc_Lit2Var(iLit1) < Gia_ManObjNum(
p) );
790 assert( iLitC >= 0 && Abc_Lit2Var(iLitC) < Gia_ManObjNum(
p) );
791 assert( Abc_Lit2Var(iLit0) != Abc_Lit2Var(iLit1) );
792 assert( Abc_Lit2Var(iLitC) != Abc_Lit2Var(iLit0) );
793 assert( Abc_Lit2Var(iLitC) != Abc_Lit2Var(iLit1) );
794 assert( !Vec_IntSize(&
p->vHTable) || !Abc_LitIsCompl(iLit1) );
795 if ( Abc_Lit2Var(iLit0) < Abc_Lit2Var(iLit1) )
797 pObj->
iDiff0 = (unsigned)(Gia_ObjId(
p, pObj) - Abc_Lit2Var(iLit0));
798 pObj->
fCompl0 = (unsigned)(Abc_LitIsCompl(iLit0));
799 pObj->
iDiff1 = (unsigned)(Gia_ObjId(
p, pObj) - Abc_Lit2Var(iLit1));
800 pObj->
fCompl1 = (unsigned)(Abc_LitIsCompl(iLit1));
801 p->pMuxes[Gia_ObjId(
p, pObj)] = iLitC;
805 pObj->
iDiff1 = (unsigned)(Gia_ObjId(
p, pObj) - Abc_Lit2Var(iLit0));
806 pObj->
fCompl1 = (unsigned)(Abc_LitIsCompl(iLit0));
807 pObj->
iDiff0 = (unsigned)(Gia_ObjId(
p, pObj) - Abc_Lit2Var(iLit1));
808 pObj->
fCompl0 = (unsigned)(Abc_LitIsCompl(iLit1));
809 p->pMuxes[Gia_ObjId(
p, pObj)] = Abc_LitNot(iLitC);
812 return Gia_ObjId(
p, pObj ) << 1;
814static inline int Gia_ManAppendBuf(
Gia_Man_t *
p,
int iLit )
817 assert( iLit >= 0 && Abc_Lit2Var(iLit) < Gia_ManObjNum(
p) );
818 pObj->
iDiff0 = pObj->
iDiff1 = Gia_ObjId(
p, pObj) - Abc_Lit2Var(iLit);
821 return Gia_ObjId(
p, pObj ) << 1;
823static inline int Gia_ManAppendCo(
Gia_Man_t *
p,
int iLit0 )
826 assert( iLit0 >= 0 && Abc_Lit2Var(iLit0) < Gia_ManObjNum(
p) );
827 assert( !Gia_ObjIsCo(Gia_ManObj(
p, Abc_Lit2Var(iLit0))) );
828 pObj = Gia_ManAppendObj(
p );
830 pObj->
iDiff0 = Gia_ObjId(
p, pObj) - Abc_Lit2Var(iLit0);
831 pObj->
fCompl0 = Abc_LitIsCompl(iLit0);
832 pObj->
iDiff1 = Vec_IntSize(
p->vCos );
833 Vec_IntPush(
p->vCos, Gia_ObjId(
p, pObj) );
836 return Gia_ObjId(
p, pObj ) << 1;
838static inline int Gia_ManAppendOr(
Gia_Man_t *
p,
int iLit0,
int iLit1 )
840 return Abc_LitNot(Gia_ManAppendAnd(
p, Abc_LitNot(iLit0), Abc_LitNot(iLit1) ));
842static inline int Gia_ManAppendMux(
Gia_Man_t *
p,
int iCtrl,
int iData1,
int iData0 )
844 int iTemp0 = Gia_ManAppendAnd(
p, Abc_LitNot(iCtrl), iData0 );
845 int iTemp1 = Gia_ManAppendAnd(
p, iCtrl, iData1 );
846 return Abc_LitNotCond( Gia_ManAppendAnd(
p, Abc_LitNot(iTemp0), Abc_LitNot(iTemp1) ), 1 );
848static inline int Gia_ManAppendMaj(
Gia_Man_t *
p,
int iData0,
int iData1,
int iData2 )
850 int iTemp0 = Gia_ManAppendOr(
p, iData1, iData2 );
851 int iTemp1 = Gia_ManAppendAnd(
p, iData0, iTemp0 );
852 int iTemp2 = Gia_ManAppendAnd(
p, iData1, iData2 );
853 return Gia_ManAppendOr(
p, iTemp1, iTemp2 );
855static inline int Gia_ManAppendXor(
Gia_Man_t *
p,
int iLit0,
int iLit1 )
857 return Gia_ManAppendMux(
p, iLit0, Abc_LitNot(iLit1), iLit1 );
860static inline int Gia_ManAppendAnd2(
Gia_Man_t *
p,
int iLit0,
int iLit1 )
862 if ( !
p->fGiaSimple )
865 return iLit0 ? iLit1 : 0;
867 return iLit1 ? iLit0 : 0;
868 if ( iLit0 == iLit1 )
870 if ( iLit0 == Abc_LitNot(iLit1) )
873 return Gia_ManAppendAnd(
p, iLit0, iLit1 );
875static inline int Gia_ManAppendOr2(
Gia_Man_t *
p,
int iLit0,
int iLit1 )
877 return Abc_LitNot(Gia_ManAppendAnd2(
p, Abc_LitNot(iLit0), Abc_LitNot(iLit1) ));
879static inline int Gia_ManAppendMux2(
Gia_Man_t *
p,
int iCtrl,
int iData1,
int iData0 )
881 int iTemp0 = Gia_ManAppendAnd2(
p, Abc_LitNot(iCtrl), iData0 );
882 int iTemp1 = Gia_ManAppendAnd2(
p, iCtrl, iData1 );
883 return Abc_LitNotCond( Gia_ManAppendAnd2(
p, Abc_LitNot(iTemp0), Abc_LitNot(iTemp1) ), 1 );
885static inline int Gia_ManAppendMaj2(
Gia_Man_t *
p,
int iData0,
int iData1,
int iData2 )
887 int iTemp0 = Gia_ManAppendOr2(
p, iData1, iData2 );
888 int iTemp1 = Gia_ManAppendAnd2(
p, iData0, iTemp0 );
889 int iTemp2 = Gia_ManAppendAnd2(
p, iData1, iData2 );
890 return Gia_ManAppendOr2(
p, iTemp1, iTemp2 );
892static inline int Gia_ManAppendXor2(
Gia_Man_t *
p,
int iLit0,
int iLit1 )
894 return Gia_ManAppendMux2(
p, iLit0, Abc_LitNot(iLit1), iLit1 );
897static inline int Gia_ManAppendXorReal2(
Gia_Man_t *
p,
int iLit0,
int iLit1 )
899 if ( !
p->fGiaSimple )
902 return iLit0 ? Abc_LitNot(iLit1) : iLit1;
904 return iLit1 ? Abc_LitNot(iLit0) : iLit0;
905 if ( iLit0 == iLit1 )
907 if ( iLit0 == Abc_LitNot(iLit1) )
910 return Gia_ManAppendXorReal(
p, iLit0, iLit1 );
913static inline void Gia_ManPatchCoDriver(
Gia_Man_t *
p,
int iCoIndex,
int iLit0 )
915 Gia_Obj_t * pObjCo = Gia_ManCo(
p, iCoIndex );
916 assert( Gia_ObjId(
p, pObjCo) > Abc_Lit2Var(iLit0) );
917 pObjCo->
iDiff0 = Gia_ObjId(
p, pObjCo) - Abc_Lit2Var(iLit0);
918 pObjCo->
fCompl0 = Abc_LitIsCompl(iLit0);
925static inline int Gia_XsimNotCond(
int Value,
int fCompl )
929 if ( Value ==
GIA_ZER + fCompl )
933static inline int Gia_XsimAndCond(
int Value0,
int fCompl0,
int Value1,
int fCompl1 )
953static inline int Gia_ObjTerSimGet0Fanin0(
Gia_Obj_t * pObj ) {
return (Gia_ObjTerSimGet1(Gia_ObjFanin0(pObj)) && Gia_ObjFaninC0(pObj)) || (Gia_ObjTerSimGet0(Gia_ObjFanin0(pObj)) && !Gia_ObjFaninC0(pObj)); }
954static inline int Gia_ObjTerSimGet1Fanin0(
Gia_Obj_t * pObj ) {
return (Gia_ObjTerSimGet0(Gia_ObjFanin0(pObj)) && Gia_ObjFaninC0(pObj)) || (Gia_ObjTerSimGet1(Gia_ObjFanin0(pObj)) && !Gia_ObjFaninC0(pObj)); }
956static inline int Gia_ObjTerSimGet0Fanin1(
Gia_Obj_t * pObj ) {
return (Gia_ObjTerSimGet1(Gia_ObjFanin1(pObj)) && Gia_ObjFaninC1(pObj)) || (Gia_ObjTerSimGet0(Gia_ObjFanin1(pObj)) && !Gia_ObjFaninC1(pObj)); }
957static inline int Gia_ObjTerSimGet1Fanin1(
Gia_Obj_t * pObj ) {
return (Gia_ObjTerSimGet0(Gia_ObjFanin1(pObj)) && Gia_ObjFaninC1(pObj)) || (Gia_ObjTerSimGet1(Gia_ObjFanin1(pObj)) && !Gia_ObjFaninC1(pObj)); }
959static inline void Gia_ObjTerSimAnd(
Gia_Obj_t * pObj )
961 assert( Gia_ObjIsAnd(pObj) );
962 assert( !Gia_ObjTerSimGetC( Gia_ObjFanin0(pObj) ) );
963 assert( !Gia_ObjTerSimGetC( Gia_ObjFanin1(pObj) ) );
964 if ( Gia_ObjTerSimGet0Fanin0(pObj) || Gia_ObjTerSimGet0Fanin1(pObj) )
965 Gia_ObjTerSimSet0( pObj );
966 else if ( Gia_ObjTerSimGet1Fanin0(pObj) && Gia_ObjTerSimGet1Fanin1(pObj) )
967 Gia_ObjTerSimSet1( pObj );
969 Gia_ObjTerSimSetX( pObj );
971static inline void Gia_ObjTerSimCo(
Gia_Obj_t * pObj )
973 assert( Gia_ObjIsCo(pObj) );
974 assert( !Gia_ObjTerSimGetC( Gia_ObjFanin0(pObj) ) );
975 if ( Gia_ObjTerSimGet0Fanin0(pObj) )
976 Gia_ObjTerSimSet0( pObj );
977 else if ( Gia_ObjTerSimGet1Fanin0(pObj) )
978 Gia_ObjTerSimSet1( pObj );
980 Gia_ObjTerSimSetX( pObj );
985 assert( Gia_ObjIsRo(
p, pObj) );
986 assert( !Gia_ObjTerSimGetC( pTemp ) );
991static inline void Gia_ObjTerSimPrint(
Gia_Obj_t * pObj )
993 if ( Gia_ObjTerSimGet0(pObj) )
995 else if ( Gia_ObjTerSimGet1(pObj) )
997 else if ( Gia_ObjTerSimGetX(pObj) )
1001static inline int Gia_AigerReadInt(
unsigned char * pPos )
1004 for ( i = 0; i < 4; i++ )
1005 Value = (Value << 8) | *pPos++;
1008static inline void Gia_AigerWriteInt(
unsigned char * pPos,
int Value )
1011 for ( i = 3; i >= 0; i-- )
1012 *pPos++ = (Value >> (8*i)) & 255;
1014static inline unsigned Gia_AigerReadUnsigned(
unsigned char ** ppPos )
1016 unsigned x = 0, i = 0;
1018 while ((ch = *(*ppPos)++) & 0x80)
1019 x |= (ch & 0x7f) << (7 * i++);
1020 return x | (ch << (7 * i));
1022static inline void Gia_AigerWriteUnsigned(
Vec_Str_t * vStr,
unsigned x )
1027 ch = (x & 0x7f) | 0x80;
1028 Vec_StrPush( vStr, ch );
1032 Vec_StrPush( vStr, ch );
1034static inline void Gia_AigerWriteUnsignedFile( FILE * pFile,
unsigned x )
1039 ch = (x & 0x7f) | 0x80;
1046static inline int Gia_AigerWriteUnsignedBuffer(
unsigned char * pBuffer,
int Pos,
unsigned x )
1051 ch = (x & 0x7f) | 0x80;
1052 pBuffer[
Pos++] = ch;
1056 pBuffer[
Pos++] = ch;
1060static inline Gia_Obj_t * Gia_ObjReprObj(
Gia_Man_t *
p,
int Id ) {
return p->pReprs[Id].iRepr ==
GIA_VOID ? NULL : Gia_ManObj(
p,
p->pReprs[Id].iRepr ); }
1061static inline int Gia_ObjRepr(
Gia_Man_t *
p,
int Id ) {
return p->pReprs[Id].iRepr; }
1062static inline void Gia_ObjSetRepr(
Gia_Man_t *
p,
int Id,
int Num ) {
assert( Num ==
GIA_VOID || Num < Id );
p->pReprs[Id].iRepr = Num; }
1063static inline void Gia_ObjSetReprRev(
Gia_Man_t *
p,
int Id,
int Num ){
assert( Num ==
GIA_VOID || Num > Id );
p->pReprs[Id].iRepr = Num; }
1064static inline void Gia_ObjUnsetRepr(
Gia_Man_t *
p,
int Id ) {
p->pReprs[Id].iRepr =
GIA_VOID; }
1065static inline int Gia_ObjHasRepr(
Gia_Man_t *
p,
int Id ) {
return p->pReprs[Id].iRepr !=
GIA_VOID; }
1066static inline int Gia_ObjReprSelf(
Gia_Man_t *
p,
int Id ) {
return Gia_ObjHasRepr(
p, Id) ? Gia_ObjRepr(
p, Id) : Id; }
1067static inline int Gia_ObjSibl(
Gia_Man_t *
p,
int Id ) {
return p->pSibls ?
p->pSibls[Id] : 0; }
1068static inline Gia_Obj_t * Gia_ObjSiblObj(
Gia_Man_t *
p,
int Id ) {
return (
p->pSibls &&
p->pSibls[Id]) ? Gia_ManObj(
p,
p->pSibls[Id]) : NULL; }
1070static inline int Gia_ObjProved(
Gia_Man_t *
p,
int Id ) {
return p->pReprs[Id].fProved; }
1071static inline void Gia_ObjSetProved(
Gia_Man_t *
p,
int Id ) {
p->pReprs[Id].fProved = 1; }
1072static inline void Gia_ObjUnsetProved(
Gia_Man_t *
p,
int Id ) {
p->pReprs[Id].fProved = 0; }
1074static inline int Gia_ObjFailed(
Gia_Man_t *
p,
int Id ) {
return p->pReprs[Id].fFailed; }
1075static inline void Gia_ObjSetFailed(
Gia_Man_t *
p,
int Id ) {
p->pReprs[Id].fFailed = 1; }
1077static inline int Gia_ObjColor(
Gia_Man_t *
p,
int Id,
int c ) {
return c?
p->pReprs[Id].fColorB :
p->pReprs[Id].fColorA; }
1078static inline int Gia_ObjColors(
Gia_Man_t *
p,
int Id ) {
return p->pReprs[Id].fColorB * 2 +
p->pReprs[Id].fColorA; }
1079static inline void Gia_ObjSetColor(
Gia_Man_t *
p,
int Id,
int c ) {
if (c)
p->pReprs[Id].fColorB = 1;
else p->pReprs[Id].fColorA = 1; }
1080static inline void Gia_ObjSetColors(
Gia_Man_t *
p,
int Id ) {
p->pReprs[Id].fColorB =
p->pReprs[Id].fColorA = 1; }
1081static inline int Gia_ObjVisitColor(
Gia_Man_t *
p,
int Id,
int c ) {
int x;
if (c) { x =
p->pReprs[Id].fColorB;
p->pReprs[Id].fColorB = 1; }
else { x =
p->pReprs[Id].fColorA;
p->pReprs[Id].fColorA = 1; }
return x; }
1082static inline int Gia_ObjDiffColors(
Gia_Man_t *
p,
int i,
int j ) {
return (
p->pReprs[i].fColorA ^
p->pReprs[j].fColorA) && (
p->pReprs[i].fColorB ^
p->pReprs[j].fColorB); }
1083static inline int Gia_ObjDiffColors2(
Gia_Man_t *
p,
int i,
int j ) {
return (
p->pReprs[i].fColorA ^
p->pReprs[j].fColorA) || (
p->pReprs[i].fColorB ^
p->pReprs[j].fColorB); }
1085static inline Gia_Obj_t * Gia_ObjNextObj(
Gia_Man_t *
p,
int Id ) {
return p->pNexts[Id] == 0 ? NULL : Gia_ManObj(
p,
p->pNexts[Id] );}
1086static inline int Gia_ObjNext(
Gia_Man_t *
p,
int Id ) {
return p->pNexts[Id]; }
1087static inline void Gia_ObjSetNext(
Gia_Man_t *
p,
int Id,
int Num ) {
p->pNexts[Id] = Num; }
1089static inline int Gia_ObjIsConst(
Gia_Man_t *
p,
int Id ) {
return Gia_ObjRepr(
p, Id) == 0; }
1090static inline int Gia_ObjIsHead(
Gia_Man_t *
p,
int Id ) {
return Gia_ObjRepr(
p, Id) ==
GIA_VOID && Gia_ObjNext(
p, Id) > 0; }
1091static inline int Gia_ObjIsNone(
Gia_Man_t *
p,
int Id ) {
return Gia_ObjRepr(
p, Id) ==
GIA_VOID && Gia_ObjNext(
p, Id) <= 0; }
1092static inline int Gia_ObjIsTail(
Gia_Man_t *
p,
int Id ) {
return (Gia_ObjRepr(
p, Id) > 0 && Gia_ObjRepr(
p, Id) !=
GIA_VOID) && Gia_ObjNext(
p, Id) <= 0; }
1093static inline int Gia_ObjIsClass(
Gia_Man_t *
p,
int Id ) {
return (Gia_ObjRepr(
p, Id) > 0 && Gia_ObjRepr(
p, Id) !=
GIA_VOID) || Gia_ObjNext(
p, Id) > 0; }
1094static inline int Gia_ObjHasSameRepr(
Gia_Man_t *
p,
int i,
int k ) {
assert( k );
return i? (Gia_ObjRepr(
p, i) == Gia_ObjRepr(
p, k) && Gia_ObjRepr(
p, i) !=
GIA_VOID) : Gia_ObjRepr(
p, k) == 0; }
1095static inline int Gia_ObjIsFailedPair(
Gia_Man_t *
p,
int i,
int k ) {
assert( k );
return i? (Gia_ObjFailed(
p, i) || Gia_ObjFailed(
p, k)) : Gia_ObjFailed(
p, k); }
1096static inline int Gia_ClassIsPair(
Gia_Man_t *
p,
int i ) {
assert( Gia_ObjIsHead(
p, i) );
assert( Gia_ObjNext(
p, i) );
return Gia_ObjNext(
p, Gia_ObjNext(
p, i)) <= 0; }
1097static inline void Gia_ClassUndoPair(
Gia_Man_t *
p,
int i ) {
assert( Gia_ClassIsPair(
p,i) ); Gia_ObjSetRepr(
p, Gia_ObjNext(
p, i),
GIA_VOID); Gia_ObjSetNext(
p, i, 0); }
1099#define Gia_ManForEachConst( p, i ) \
1100 for ( i = 1; i < Gia_ManObjNum(p); i++ ) if ( !Gia_ObjIsConst(p, i) ) {} else
1101#define Gia_ManForEachClass( p, i ) \
1102 for ( i = 1; i < Gia_ManObjNum(p); i++ ) if ( !Gia_ObjIsHead(p, i) ) {} else
1103#define Gia_ManForEachClass0( p, i ) \
1104 for ( i = 0; i < Gia_ManObjNum(p); i++ ) if ( !Gia_ObjIsHead(p, i) ) {} else
1105#define Gia_ManForEachClassReverse( p, i ) \
1106 for ( i = Gia_ManObjNum(p) - 1; i > 0; i-- ) if ( !Gia_ObjIsHead(p, i) ) {} else
1107#define Gia_ClassForEachObj( p, i, iObj ) \
1108 for ( assert(Gia_ObjIsHead(p, i) && i), iObj = i; iObj > 0; iObj = Gia_ObjNext(p, iObj) )
1109#define Gia_ClassForEachObj1( p, i, iObj ) \
1110 for ( assert(Gia_ObjIsHead(p, i)), iObj = Gia_ObjNext(p, i); iObj > 0; iObj = Gia_ObjNext(p, iObj) )
1111#define Gia_ClassForEachObjStart( p, i, iObj, Start ) \
1112 for ( assert(Gia_ObjIsHead(p, i)), iObj = Gia_ObjNext(p, Start); iObj > 0; iObj = Gia_ObjNext(p, iObj) )
1115static inline int Gia_ObjFoffsetId(
Gia_Man_t *
p,
int Id ) {
return Vec_IntEntry(
p->vFanout, Id ); }
1116static inline int Gia_ObjFoffset(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Gia_ObjFoffsetId(
p, Gia_ObjId(
p, pObj) ); }
1117static inline int Gia_ObjFanoutNumId(
Gia_Man_t *
p,
int Id ) {
return Vec_IntEntry(
p->vFanoutNums, Id ); }
1118static inline int Gia_ObjFanoutNum(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Gia_ObjFanoutNumId(
p, Gia_ObjId(
p, pObj) ); }
1119static inline int Gia_ObjFanoutId(
Gia_Man_t *
p,
int Id,
int i ) {
return Vec_IntEntry(
p->vFanout, Gia_ObjFoffsetId(
p, Id) + i ); }
1121static inline Gia_Obj_t * Gia_ObjFanout(
Gia_Man_t *
p,
Gia_Obj_t * pObj,
int i ) {
return Gia_ManObj(
p, Gia_ObjFanoutId(
p, Gia_ObjId(
p, pObj), i) ); }
1122static inline void Gia_ObjSetFanout(
Gia_Man_t *
p,
Gia_Obj_t * pObj,
int i,
Gia_Obj_t * pFan ) { Vec_IntWriteEntry(
p->vFanout, Gia_ObjFoffset(
p, pObj) + i, Gia_ObjId(
p, pFan) ); }
1123static inline void Gia_ObjSetFanoutInt(
Gia_Man_t *
p,
Gia_Obj_t * pObj,
int i,
int x ) { Vec_IntWriteEntry(
p->vFanout, Gia_ObjFoffset(
p, pObj) + i, x ); }
1125#define Gia_ObjForEachFanoutStatic( p, pObj, pFanout, i ) \
1126 for ( i = 0; (i < Gia_ObjFanoutNum(p, pObj)) && (((pFanout) = Gia_ObjFanout(p, pObj, i)), 1); i++ )
1127#define Gia_ObjForEachFanoutStaticId( p, Id, FanId, i ) \
1128 for ( i = 0; (i < Gia_ObjFanoutNumId(p, Id)) && ((FanId = Gia_ObjFanoutId(p, Id, i)), 1); i++ )
1129#define Gia_ObjForEachFanoutStaticIndex( p, Id, FanId, i, Index ) \
1130 for ( i = 0; (i < Gia_ObjFanoutNumId(p, Id)) && (Index = Vec_IntEntry(p->vFanout, Id)+i) && ((FanId = Vec_IntEntry(p->vFanout, Index)), 1); i++ )
1132static inline int Gia_ManHasMapping(
Gia_Man_t *
p ) {
return p->vMapping != NULL; }
1133static inline int Gia_ObjIsLut(
Gia_Man_t *
p,
int Id ) {
return Vec_IntEntry(
p->vMapping, Id) != 0; }
1134static inline int Gia_ObjLutSize(
Gia_Man_t *
p,
int Id ) {
return Vec_IntEntry(
p->vMapping, Vec_IntEntry(
p->vMapping, Id)); }
1135static inline int * Gia_ObjLutFanins(
Gia_Man_t *
p,
int Id ) {
return Vec_IntEntryP(
p->vMapping, Vec_IntEntry(
p->vMapping, Id)) + 1; }
1136static inline int Gia_ObjLutFanin(
Gia_Man_t *
p,
int Id,
int i ) {
return Gia_ObjLutFanins(
p, Id)[i]; }
1137static inline int Gia_ObjLutMuxId(
Gia_Man_t *
p,
int Id ) {
return Gia_ObjLutFanins(
p, Id)[Gia_ObjLutSize(
p, Id)]; }
1138static inline int Gia_ObjLutIsMux(
Gia_Man_t *
p,
int Id ) {
return (
int)(Gia_ObjLutMuxId(
p, Id) < 0); }
1140static inline int Gia_ManHasMapping2(
Gia_Man_t *
p ) {
return p->vMapping2 != NULL; }
1141static inline int Gia_ObjIsLut2(
Gia_Man_t *
p,
int Id ) {
return Vec_IntSize(Vec_WecEntry(
p->vMapping2, Id)) != 0; }
1142static inline int Gia_ObjLutSize2(
Gia_Man_t *
p,
int Id ) {
return Vec_IntSize(Vec_WecEntry(
p->vMapping2, Id)); }
1143static inline Vec_Int_t * Gia_ObjLutFanins2(
Gia_Man_t *
p,
int Id ) {
return Vec_WecEntry(
p->vMapping2, Id); }
1144static inline int Gia_ObjLutFanin2(
Gia_Man_t *
p,
int Id,
int i ) {
return Vec_IntEntry(Vec_WecEntry(
p->vMapping2, Id), i); }
1145static inline int Gia_ObjLutFanoutNum2(
Gia_Man_t *
p,
int Id ) {
return Vec_IntSize(Vec_WecEntry(
p->vFanouts2, Id)); }
1146static inline int Gia_ObjLutFanout2(
Gia_Man_t *
p,
int Id,
int i ) {
return Vec_IntEntry(Vec_WecEntry(
p->vFanouts2, Id), i); }
1148static inline int Gia_ManHasCellMapping(
Gia_Man_t *
p ) {
return p->vCellMapping != NULL; }
1149static inline int Gia_ObjIsCell(
Gia_Man_t *
p,
int iLit ) {
return Vec_IntEntry(
p->vCellMapping, iLit) != 0; }
1150static inline int Gia_ObjIsCellInv(
Gia_Man_t *
p,
int iLit ) {
return Vec_IntEntry(
p->vCellMapping, iLit) == -1; }
1151static inline int Gia_ObjIsCellBuf(
Gia_Man_t *
p,
int iLit ) {
return Vec_IntEntry(
p->vCellMapping, iLit) == -2; }
1152static inline int Gia_ObjCellSize(
Gia_Man_t *
p,
int iLit ) {
return Vec_IntEntry(
p->vCellMapping, Vec_IntEntry(
p->vCellMapping, iLit)); }
1153static inline int * Gia_ObjCellFanins(
Gia_Man_t *
p,
int iLit ) {
return Vec_IntEntryP(
p->vCellMapping, Vec_IntEntry(
p->vCellMapping, iLit))+1; }
1154static inline int Gia_ObjCellFanin(
Gia_Man_t *
p,
int iLit,
int i ){
return Gia_ObjCellFanins(
p, iLit)[i]; }
1155static inline int Gia_ObjCellId(
Gia_Man_t *
p,
int iLit ) {
return Gia_ObjCellFanins(
p, iLit)[Gia_ObjCellSize(
p, iLit)]; }
1157#define Gia_ManForEachLut( p, i ) \
1158 for ( i = 1; i < Gia_ManObjNum(p); i++ ) if ( !Gia_ObjIsLut(p, i) ) {} else
1159#define Gia_ManForEachLutReverse( p, i ) \
1160 for ( i = Gia_ManObjNum(p) - 1; i > 0; i-- ) if ( !Gia_ObjIsLut(p, i) ) {} else
1161#define Gia_LutForEachFanin( p, i, iFan, k ) \
1162 for ( k = 0; k < Gia_ObjLutSize(p,i) && ((iFan = Gia_ObjLutFanins(p,i)[k]),1); k++ )
1163#define Gia_LutForEachFaninIndex( p, i, iFan, k, Index ) \
1164 for ( k = 0; k < Gia_ObjLutSize(p,i) && (Index = Vec_IntEntry(p->vMapping, i)+1+k) && ((iFan = Vec_IntEntry(p->vMapping, Index)),1); k++ )
1165#define Gia_LutForEachFaninObj( p, i, pFanin, k ) \
1166 for ( k = 0; k < Gia_ObjLutSize(p,i) && ((pFanin = Gia_ManObj(p, Gia_ObjLutFanins(p,i)[k])),1); k++ )
1168#define Gia_ManForEachLut2( p, i ) \
1169 for ( i = 1; i < Gia_ManObjNum(p); i++ ) if ( !Gia_ObjIsLut2(p, i) ) {} else
1170#define Gia_ManForEachLut2Reverse( p, i ) \
1171 for ( i = Gia_ManObjNum(p) - 1; i > 0; i-- ) if ( !Gia_ObjIsLut2(p, i) ) {} else
1172#define Gia_ManForEachLut2Vec( vIds, p, vVec, iObj, i ) \
1173 for ( i = 0; i < Vec_IntSize(vIds) && (vVec = Vec_WecEntry(p->vMapping2, (iObj = Vec_IntEntry(vIds, i)))); i++ )
1174#define Gia_ManForEachLut2VecReverse( vIds, p, vVec, iObj, i ) \
1175 for ( i = Vec_IntSize(vIds)-1; i >= 0 && (vVec = Vec_WecEntry(p->vMapping2, (iObj = Vec_IntEntry(vIds, i)))); i-- )
1176#define Gia_LutForEachFanin2( p, i, iFan, k ) \
1177 for ( k = 0; k < Gia_ObjLutSize2(p,i) && ((iFan = Gia_ObjLutFanin2(p,i,k)),1); k++ )
1178#define Gia_LutForEachFanout2( p, i, iFan, k ) \
1179 for ( k = 0; k < Gia_ObjLutFanoutNum2(p,i) && ((iFan = Gia_ObjLutFanout2(p,i,k)),1); k++ )
1181#define Gia_ManForEachCell( p, i ) \
1182 for ( i = 2; i < 2*Gia_ManObjNum(p); i++ ) if ( !Gia_ObjIsCell(p, i) ) {} else
1183#define Gia_CellForEachFanin( p, i, iFanLit, k ) \
1184 for ( k = 0; k < Gia_ObjCellSize(p,i) && ((iFanLit = Gia_ObjCellFanins(p,i)[k]),1); k++ )
1190#define Gia_ManForEachObj( p, pObj, i ) \
1191 for ( i = 0; (i < p->nObjs) && ((pObj) = Gia_ManObj(p, i)); i++ )
1192#define Gia_ManForEachObj1( p, pObj, i ) \
1193 for ( i = 1; (i < p->nObjs) && ((pObj) = Gia_ManObj(p, i)); i++ )
1194#define Gia_ManForEachObjVec( vVec, p, pObj, i ) \
1195 for ( i = 0; (i < Vec_IntSize(vVec)) && ((pObj) = Gia_ManObj(p, Vec_IntEntry(vVec,i))); i++ )
1196#define Gia_ManForEachObjVecStart( vVec, p, pObj, i, Start ) \
1197 for ( i = Start; (i < Vec_IntSize(vVec)) && ((pObj) = Gia_ManObj(p, Vec_IntEntry(vVec,i))); i++ )
1198#define Gia_ManForEachObjVecStop( vVec, p, pObj, i, Stop ) \
1199 for ( i = 0; (i < Stop) && ((pObj) = Gia_ManObj(p, Vec_IntEntry(vVec,i))); i++ )
1200#define Gia_ManForEachObjVecStartStop( vVec, p, pObj, i, Start, Stop ) \
1201 for ( i = Start; (i < Stop) && ((pObj) = Gia_ManObj(p, Vec_IntEntry(vVec,i))); i++ )
1202#define Gia_ManForEachObjVecReverse( vVec, p, pObj, i ) \
1203 for ( i = Vec_IntSize(vVec) - 1; (i >= 0) && ((pObj) = Gia_ManObj(p, Vec_IntEntry(vVec,i))); i-- )
1204#define Gia_ManForEachObjVecLit( vVec, p, pObj, fCompl, i ) \
1205 for ( i = 0; (i < Vec_IntSize(vVec)) && ((pObj) = Gia_ManObj(p, Abc_Lit2Var(Vec_IntEntry(vVec,i)))) && (((fCompl) = Abc_LitIsCompl(Vec_IntEntry(vVec,i))),1); i++ )
1206#define Gia_ManForEachObjReverse( p, pObj, i ) \
1207 for ( i = p->nObjs - 1; (i >= 0) && ((pObj) = Gia_ManObj(p, i)); i-- )
1208#define Gia_ManForEachObjReverse1( p, pObj, i ) \
1209 for ( i = p->nObjs - 1; (i > 0) && ((pObj) = Gia_ManObj(p, i)); i-- )
1210#define Gia_ManForEachBuf( p, pObj, i ) \
1211 for ( i = Gia_ManBufNum(p) ? 0 : p->nObjs; (i < p->nObjs) && ((pObj) = Gia_ManObj(p, i)); i++ ) if ( !Gia_ObjIsBuf(pObj) ) {} else
1212#define Gia_ManForEachBufId( p, i ) \
1213 for ( i = 0; (i < p->nObjs); i++ ) if ( !Gia_ObjIsBuf(Gia_ManObj(p, i)) ) {} else
1214#define Gia_ManForEachAnd( p, pObj, i ) \
1215 for ( i = 0; (i < p->nObjs) && ((pObj) = Gia_ManObj(p, i)); i++ ) if ( !Gia_ObjIsAnd(pObj) ) {} else
1216#define Gia_ManForEachAndId( p, i ) \
1217 for ( i = 0; (i < p->nObjs); i++ ) if ( !Gia_ObjIsAnd(Gia_ManObj(p, i)) ) {} else
1218#define Gia_ManForEachMuxId( p, i ) \
1219 for ( i = 0; (i < p->nObjs); i++ ) if ( !Gia_ObjIsMuxId(p, i) ) {} else
1220#define Gia_ManForEachCand( p, pObj, i ) \
1221 for ( i = 0; (i < p->nObjs) && ((pObj) = Gia_ManObj(p, i)); i++ ) if ( !Gia_ObjIsCand(pObj) ) {} else
1222#define Gia_ManForEachAndReverse( p, pObj, i ) \
1223 for ( i = p->nObjs - 1; (i > 0) && ((pObj) = Gia_ManObj(p, i)); i-- ) if ( !Gia_ObjIsAnd(pObj) ) {} else
1224#define Gia_ManForEachAndReverseId( p, i ) \
1225 for ( i = p->nObjs - 1; (i > 0); i-- ) if ( !Gia_ObjIsAnd(Gia_ManObj(p, i)) ) {} else
1226#define Gia_ManForEachMux( p, pObj, i ) \
1227 for ( i = 0; (i < p->nObjs) && ((pObj) = Gia_ManObj(p, i)); i++ ) if ( !Gia_ObjIsMuxId(p, i) ) {} else
1228#define Gia_ManForEachCi( p, pObj, i ) \
1229 for ( i = 0; (i < Vec_IntSize(p->vCis)) && ((pObj) = Gia_ManCi(p, i)); i++ )
1230#define Gia_ManForEachCiId( p, Id, i ) \
1231 for ( i = 0; (i < Vec_IntSize(p->vCis)) && ((Id) = Gia_ObjId(p, Gia_ManCi(p, i))); i++ )
1232#define Gia_ManForEachCiVec( vVec, p, pObj, i ) \
1233 for ( i = 0; (i < Vec_IntSize(vVec)) && ((pObj) = Gia_ManCi(p, Vec_IntEntry(vVec,i))); i++ )
1234#define Gia_ManForEachCiReverse( p, pObj, i ) \
1235 for ( i = Vec_IntSize(p->vCis) - 1; (i >= 0) && ((pObj) = Gia_ManCi(p, i)); i-- )
1236#define Gia_ManForEachCo( p, pObj, i ) \
1237 for ( i = 0; (i < Vec_IntSize(p->vCos)) && ((pObj) = Gia_ManCo(p, i)); i++ )
1238#define Gia_ManForEachCoVec( vVec, p, pObj, i ) \
1239 for ( i = 0; (i < Vec_IntSize(vVec)) && ((pObj) = Gia_ManCo(p, Vec_IntEntry(vVec,i))); i++ )
1240#define Gia_ManForEachCoId( p, Id, i ) \
1241 for ( i = 0; (i < Vec_IntSize(p->vCos)) && ((Id) = Gia_ObjId(p, Gia_ManCo(p, i))); i++ )
1242#define Gia_ManForEachCoReverse( p, pObj, i ) \
1243 for ( i = Vec_IntSize(p->vCos) - 1; (i >= 0) && ((pObj) = Gia_ManCo(p, i)); i-- )
1244#define Gia_ManForEachCoDriver( p, pObj, i ) \
1245 for ( i = 0; (i < Vec_IntSize(p->vCos)) && ((pObj) = Gia_ObjFanin0(Gia_ManCo(p, i))); i++ )
1246#define Gia_ManForEachCoDriverId( p, DriverId, i ) \
1247 for ( i = 0; (i < Vec_IntSize(p->vCos)) && (((DriverId) = Gia_ObjFaninId0p(p, Gia_ManCo(p, i))), 1); i++ )
1248#define Gia_ManForEachPi( p, pObj, i ) \
1249 for ( i = 0; (i < Gia_ManPiNum(p)) && ((pObj) = Gia_ManCi(p, i)); i++ )
1250#define Gia_ManForEachPo( p, pObj, i ) \
1251 for ( i = 0; (i < Gia_ManPoNum(p)) && ((pObj) = Gia_ManCo(p, i)); i++ )
1252#define Gia_ManForEachRo( p, pObj, i ) \
1253 for ( i = 0; (i < Gia_ManRegNum(p)) && ((pObj) = Gia_ManCi(p, Gia_ManPiNum(p)+i)); i++ )
1254#define Gia_ManForEachRi( p, pObj, i ) \
1255 for ( i = 0; (i < Gia_ManRegNum(p)) && ((pObj) = Gia_ManCo(p, Gia_ManPoNum(p)+i)); i++ )
1256#define Gia_ManForEachRiRo( p, pObjRi, pObjRo, i ) \
1257 for ( i = 0; (i < Gia_ManRegNum(p)) && ((pObjRi) = Gia_ManCo(p, Gia_ManPoNum(p)+i)) && ((pObjRo) = Gia_ManCi(p, Gia_ManPiNum(p)+i)); i++ )
1258#define Gia_ManForEachRoToRiVec( vRoIds, p, pObj, i ) \
1259 for ( i = 0; (i < Vec_IntSize(vRoIds)) && ((pObj) = Gia_ObjRoToRi(p, Gia_ManObj(p, Vec_IntEntry(vRoIds, i)))); i++ )
1261#define Gia_ManForEachObjWithBoxes( p, pObj, i ) \
1262 for ( i = p->iFirstAndObj; (i < p->iFirstPoObj) && ((pObj) = Gia_ManObj(p, i)); i++ )
1263#define Gia_ManForEachObjReverseWithBoxes( p, pObj, i ) \
1264 for ( i = p->iFirstPoObj - 1; (i >= p->iFirstAndObj) && ((pObj) = Gia_ManObj(p, i)); i-- )
1265#define Gia_ManForEachCiIdWithBoxes( p, Id, i ) \
1266 for ( i = 0; (i < p->iFirstNonPiId) && ((Id) = Gia_ObjId(p, Gia_ManCi(p, i))); i++ )
1267#define Gia_ManForEachCoWithBoxes( p, pObj, i ) \
1268 for ( i = p->iFirstPoId; (i < Vec_IntSize(p->vCos)) && ((pObj) = Gia_ManCo(p, i)); i++ )
1279extern void Gia_AigerWriteS(
Gia_Man_t *
p,
char * pFileName,
int fWriteSymbols,
int fCompact,
int fWriteNewLine,
int fSkipComment );
1623extern int *
Gia_SortFloats(
float * pArray,
int * pPerm,
int nSize );
1814extern Gia_Man_t *
Gia_ManTransductionBdd(
Gia_Man_t *
pGia,
int nType,
int fMspf,
int nRandom,
int nSortType,
int nPiShuffle,
int nParameter,
int fLevel,
Gia_Man_t * pExdc,
int fNewLine,
int nVerbose );
1815extern Gia_Man_t *
Gia_ManTransductionTt(
Gia_Man_t *
pGia,
int nType,
int fMspf,
int nRandom,
int nSortType,
int nPiShuffle,
int nParameter,
int fLevel,
Gia_Man_t * pExdc,
int fNewLine,
int nVerbose );
1818extern Gia_Man_t *
Gia_ManRrr(
Gia_Man_t *
pGia,
int iSeed,
int nWords,
int nTimeout,
int nSchedulerVerbose,
int nPartitionerVerbose,
int nOptimizerVerbose,
int nAnalyzerVerbose,
int nSimulatorVerbose,
int nSatSolverVerbose,
int fUseBddCspf,
int fUseBddMspf,
int nConflictLimit,
int nSortType,
int nOptimizerFlow,
int nSchedulerFlow,
int nPartitionType,
int nDistance,
int nJobs,
int nThreads,
int nPartitionSize,
int nPartitionSizeMin,
int fDeterministic,
int nParallelPartitions,
int fOptOnInsert,
int fGreedy );
1840extern void Bnd_ManMap(
int iLit,
int id,
int spec );
1841extern void Bnd_ManMerge(
int id1,
int id2,
int phaseDiff );
#define ABC_REALLOC(type, obj, num)
#define ABC_INFINITY
MACRO DEFINITIONS ///.
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
struct Vec_Str_t_ Vec_Str_t
Vec_Wec_t * Gia_ManLevelizeR(Gia_Man_t *p)
int Gia_ManCountPisWithFanout(Gia_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)
Vec_Ptr_t * Gia_ManPtrWrdReadBin(char *pFileName, int fVerbose)
Vec_Wrd_t * Gia_ManSimPatSimOut(Gia_Man_t *pGia, Vec_Wrd_t *vSimsPi, int fOuts)
int Gia_ManCombMarkUsed(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupMuxes(Gia_Man_t *p, int Limit)
Gia_Man_t * Gia_ManDupAppendCones(Gia_Man_t *p, Gia_Man_t **ppCones, int nCones, int fOnlyRegs)
void Gia_MmFixedRestart(Gia_MmFixed_t *p)
Gia_Man_t * Gia_ManPerformSopBalanceWin(Gia_Man_t *p, int LevelMax, int nTimeWindow, int nCutNum, int nRelaxRatio, int fVerbose)
void Jf_ManSetDefaultPars(Jf_Par_t *pPars)
int Gia_ManLutFaninCount(Gia_Man_t *p)
int Gia_ManEvalWindow(Gia_Man_t *p, Vec_Int_t *vLeaves, Vec_Int_t *vNodes, Vec_Wec_t *vWin, Vec_Int_t *vTemp, int fUseTwo)
struct Cbs_Man_t_ Cbs_Man_t
void Gia_ManReportImprovement(Gia_Man_t *p, Gia_Man_t *pNew)
word * Gia_ObjComputeTruthTableCut(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vLeaves)
void Gia_ManUnrollStop(void *pMan)
void Tas_ManSatPrintStats(Tas_Man_t *p)
void Gia_ManEquivImprove(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupCof(Gia_Man_t *p, int iVar)
void Gia_ManFanoutStart(Gia_Man_t *p)
FUNCTION DEFINITIONS ///.
void Gia_MmFixedEntryRecycle(Gia_MmFixed_t *p, char *pEntry)
int Gia_ManNonRegBoxNum(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupCycled(Gia_Man_t *pAig, Abc_Cex_t *pCex, int nFrames)
Gia_Man_t * Gia_SweeperStart(Gia_Man_t *p)
int * Gia_ManCreateMuxRefs(Gia_Man_t *p)
unsigned * Gia_ManConvertAigToTruth(Gia_Man_t *p, Gia_Obj_t *pRoot, Vec_Int_t *vLeaves, Vec_Int_t *vTruth, Vec_Int_t *vVisited)
void Gia_ManTestDistance(Gia_Man_t *p)
void Gia_ObjSetPhase(Gia_Man_t *p, Gia_Obj_t *pObj)
int Gia_SweeperCheckEquiv(Gia_Man_t *p, int ProbeId1, int ProbeId2)
Gia_Man_t * Gia_ManPerformFx(Gia_Man_t *p, int nNewNodesMax, int LitCountMax, int fReverse, int fVerbose, int fVeryVerbose)
void Gia_ManStaticFanoutStart(Gia_Man_t *p)
void Gia_ManHashStart(Gia_Man_t *p)
int Gia_FileSize(char *pFileName)
FUNCTION DECLARATIONS ///.
void Gia_ManFraSetDefaultParams(Gia_ParFra_t *p)
int Gia_ManSuppSize(Gia_Man_t *p, int *pNodes, int nNodes)
void Gia_ManSwapPos(Gia_Man_t *p, int i)
Gia_Man_t * Gia_ManPermuteInputs(Gia_Man_t *p, int nPpis, int nExtra)
int Gia_ManFindFailedPoCex(Gia_Man_t *pAig, Abc_Cex_t *p, int nOutputs)
void Gia_ManEquivFixOutputPairs(Gia_Man_t *p)
Gia_Man_t * Gia_SweeperExtractUserLogic(Gia_Man_t *p, Vec_Int_t *vProbeIds, Vec_Ptr_t *vInNames, Vec_Ptr_t *vOutNames)
void Gia_ManStaticFanoutStop(Gia_Man_t *p)
int Gia_NodeMffcSizeSupp(Gia_Man_t *p, Gia_Obj_t *pNode, Vec_Int_t *vSupp)
int Gia_ManCheckTopoOrder(Gia_Man_t *p)
void Gia_MmStepStop(Gia_MmStep_t *p, int fVerbose)
double Gia_ManMemory(Gia_Man_t *p)
void Gia_ManCreateLitRefs(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupFlopClass(Gia_Man_t *p, int iClass)
void Gia_ManDupChoicesAdd(Gia_ChMan_t *pMan, Gia_Man_t *pGia)
void Bnd_ManSetEqRes(int eq)
Gia_Man_t * Gia_ManDupDfsCiMap(Gia_Man_t *p, int *pCi2Lit, Vec_Int_t *vLits)
Gia_MmFlex_t * Gia_MmFlexStart()
int Gia_ObjCheckMffc(Gia_Man_t *p, Gia_Obj_t *pRoot, int Limit, Vec_Int_t *vNodes, Vec_Int_t *vLeaves, Vec_Int_t *vInners)
Gia_Man_t * Gia_ManDupDfsCone(Gia_Man_t *p, Gia_Obj_t *pObj)
int Gia_ManHasDangling(Gia_Man_t *p)
void Gia_ManPrintFanio(Gia_Man_t *pGia, int nNodes)
void Gia_ManPrintMappingStats(Gia_Man_t *p, char *pDumpFile)
int Gia_ManSupportAnd(Gia_ManMin_t *p, int iLit0, int iLit1)
void Gia_ManQuantSetSuppCi(Gia_Man_t *p, Gia_Obj_t *pObj)
int Gia_ManSeqMarkUsed(Gia_Man_t *p)
void Gia_ManPrintCone2(Gia_Man_t *p, Gia_Obj_t *pObj)
word Gia_ObjComputeTruthTable6(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vSupp, Vec_Wrd_t *vTruths)
int Gia_ManEquivCountLits(Gia_Man_t *p)
void Gia_ManConvertPackingToEdges(Gia_Man_t *p)
Gia_Obj_t * Gia_ObjRecognizeMux(Gia_Obj_t *pNode, Gia_Obj_t **ppNodeT, Gia_Obj_t **ppNodeE)
void Gia_ManSetPhasePattern(Gia_Man_t *p, Vec_Int_t *vCiValues)
int Gia_ManRegBoxNum(Gia_Man_t *p)
Vec_Int_t * Gia_ManComputeDistance(Gia_Man_t *p, int iObj, Vec_Int_t *vObjs, int fVerbose)
int Gia_ManIsNormalized(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupFlip(Gia_Man_t *p, int *pInitState)
Gia_Man_t * Gia_ManDupWithAttributes(Gia_Man_t *p)
int Gia_ManEquivCountLitsAll(Gia_Man_t *p)
void Gia_ManFrontTest(Gia_Man_t *p)
struct Tas_Man_t_ Tas_Man_t
void * Gia_ManUpdateTimMan(Gia_Man_t *p, Vec_Int_t *vBoxPres)
void Gia_ManStaticMappingFanoutStart(Gia_Man_t *p, Vec_Int_t **pvIndex)
Gia_MmStep_t * Gia_MmStepStart(int nSteps)
int Gia_ManDupConeBackObjs(Gia_Man_t *p, Gia_Man_t *pNew, Vec_Int_t *vObjs)
Gia_Man_t * Gia_ManUpdateExtraAig(void *pTime, Gia_Man_t *pAig, Vec_Int_t *vBoxPres)
Gia_Man_t * Gia_ManDupTrimmed(Gia_Man_t *p, int fTrimCis, int fTrimCos, int fDualOut, int OutValue)
word Gia_ResubToTruth6(Vec_Int_t *vResub)
void Gia_MmStepEntryRecycle(Gia_MmStep_t *p, char *pEntry, int nBytes)
Gia_Man_t * Gia_ManDupDfsClasses(Gia_Man_t *p)
Gia_Man_t * Gia_ManEquivReduce(Gia_Man_t *p, int fUseAll, int fDualOut, int fSkipPhase, int fVerbose)
void Gia_ManSetRefsMapped(Gia_Man_t *p)
int Gia_ManHashMuxReal(Gia_Man_t *p, int iLitC, int iLit1, int iLit0)
int Gia_SweeperCondCheckUnsat(Gia_Man_t *p)
Vec_Int_t * Gia_ManCollectPoIds(Gia_Man_t *p)
Gia_Man_t * Bnd_ManGenPatched1(Gia_Man_t *pOut, Gia_Man_t *pSpec)
void Gia_SweeperSetRuntimeLimit(Gia_Man_t *p, int nSeconds)
Vec_Int_t * Gia_ManDeriveSolutionOne(Gia_Man_t *p, Vec_Wrd_t *vSims, Vec_Wrd_t *vIsfs, Vec_Int_t *vCands, Vec_Int_t *vSet, int nWords, int Type)
int Gia_ManLutLevel(Gia_Man_t *p, int **ppLevels)
Gia_Man_t * Gia_ManDupAndConesLimit2(Gia_Man_t *p, int *pAnds, int nAnds, int Level)
int Gia_ManBoxCiNum(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupWithNewPo(Gia_Man_t *p1, Gia_Man_t *p2)
Gia_Man_t * Gia_ManPerformMapping(Gia_Man_t *p, void *pIfPars)
int Gia_ManDemiterTwoWords(Gia_Man_t *p, Gia_Man_t **pp0, Gia_Man_t **pp1)
int Gia_ManCountChoiceNodes(Gia_Man_t *p)
void Gia_ManSim2ArrayOne(Vec_Wrd_t *vSimsPi, Vec_Int_t *vRes)
Gia_Man_t * Gia_ManDupLastPis(Gia_Man_t *p, int nLastPis)
Vec_Str_t * Gia_AigerWriteIntoMemoryStr(Gia_Man_t *p)
int Gia_ManDemiterDual(Gia_Man_t *p, Gia_Man_t **pp0, Gia_Man_t **pp1)
int Gia_ResubVarNum(Vec_Int_t *vResub)
FUNCTION DEFINITIONS ///.
int Gia_ManHashLookup(Gia_Man_t *p, Gia_Obj_t *p0, Gia_Obj_t *p1)
Gia_Man_t * Gia_ManReadMiniAig(char *pFileName, int fGiaSimple)
Gia_Man_t * Gia_ManDupRemovePis(Gia_Man_t *p, int nRemPis)
Gia_Man_t * Gia_ManDupOutputGroup(Gia_Man_t *p, int iOutStart, int iOutStop)
Bnd_Man_t * Bnd_ManStart(Gia_Man_t *pSpec, Gia_Man_t *pImpl, int fVerbose)
void Gia_ManOrigIdsStart(Gia_Man_t *p)
Gia_Man_t * Gia_SweeperCleanup(Gia_Man_t *p, char *pCommLime)
Gia_Man_t * Gia_ManDupTimes(Gia_Man_t *p, int nTimes)
void Gia_ManDeriveReprsFromSibls(Gia_Man_t *p)
Vec_Int_t * Gia_ManRequiredLevel(Gia_Man_t *p)
int * Gia_SortFloats(float *pArray, int *pPerm, int nSize)
void Gia_ManBuiltInSimStart(Gia_Man_t *p, int nWords, int nObjs)
Cbs_Man_t * Cbs_ManAlloc(Gia_Man_t *pGia)
float Gia_ManDelayTraceLutPrint(Gia_Man_t *p, int fVerbose)
struct Gia_MmFlex_t_ Gia_MmFlex_t
Gia_Man_t * Gia_ManDupZero(Gia_Man_t *p)
Gia_Man_t * Gia_ManTransformMiter(Gia_Man_t *p)
void Gia_ManLutParams(Gia_Man_t *p, int *pnCurLuts, int *pnCurEdges, int *pnCurLevels)
Vec_Int_t * Gia_ManEdgeToArray(Gia_Man_t *p)
int Gia_ManComputeOneWin(Gia_Man_t *p, int iPivot, Vec_Int_t **pvRoots, Vec_Int_t **pvNodes, Vec_Int_t **pvLeaves, Vec_Int_t **pvAnds)
int Gia_SweeperIsRunning(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupUnshuffleInputs(Gia_Man_t *p)
void Gia_ManDeriveReprs(Gia_Man_t *p)
word Gia_ManRandomW(int fReset)
void Gia_ManStopP(Gia_Man_t **p)
Gia_Man_t * Gia_ManDupUniv(Gia_Man_t *p, int iVar)
void Gia_ManSetPhase1(Gia_Man_t *p)
void Gia_ManRandomInfo(Vec_Ptr_t *vInfo, int iInputStart, int iWordStart, int iWordStop)
void Gia_ManCreateValueRefs(Gia_Man_t *p)
void Gia_ManDetectSeqSignals(Gia_Man_t *p, int fSetReset, int fVerbose)
void Gia_ManSetMark1(Gia_Man_t *p)
void Gia_ManPrintStatsMiter(Gia_Man_t *p, int fVerbose)
int Gia_ManHashDualMiter(Gia_Man_t *p, Vec_Int_t *vOuts)
Vec_Wec_t * Gia_ManSim2Array(Vec_Ptr_t *vSims)
Vec_Str_t * Gia_ManComputeRange(Gia_Man_t *p)
Gia_Man_t * Gia_AigerRead(char *pFileName, int fGiaSimple, int fSkipStrash, int fCheck)
void Gia_ManSetRegNum(Gia_Man_t *p, int nRegs)
Vec_Int_t * Gia_ManGetCiLevels(Gia_Man_t *p)
int Gia_ManHashAndMulti(Gia_Man_t *p, Vec_Int_t *vLits)
float Gia_ManDelayTraceLut(Gia_Man_t *p)
int * Gia_ManDeriveNexts(Gia_Man_t *p)
void Gia_ManWriteMiniAig(Gia_Man_t *pGia, char *pFileName)
void Gia_ManCounterExampleValueStop(Gia_Man_t *pGia)
Gia_Man_t * Gia_ManDupOneHot(Gia_Man_t *p)
float Gia_ManComputeSwitching(Gia_Man_t *p, int nFrames, int nPref, int fProbOne)
Gia_Man_t * Gia_ManFraigSweepSimple(Gia_Man_t *p, void *pPars)
Tas_Man_t * Tas_ManAlloc(Gia_Man_t *pAig, int nBTLimit)
void Gia_ManCollectTfo(Gia_Man_t *p, Vec_Int_t *vRoots, Vec_Int_t *vNodes)
Gia_Man_t * Gia_ManAreaBalance(Gia_Man_t *p, int fSimpleAnd, int nNewNodesMax, int fVerbose, int fVeryVerbose)
Gia_Man_t * Gia_ManDup2(Gia_Man_t *p1, Gia_Man_t *p2)
int Gia_SweeperProbeUpdate(Gia_Man_t *p, int ProbeId, int iLitNew)
int Gia_ManEquivSetColors(Gia_Man_t *p, int fVerbose)
void Gia_ManHashProfile(Gia_Man_t *p)
struct Gia_Dat_t_ Gia_Dat_t
void Gia_ManIncrSimStart(Gia_Man_t *p, int nWords, int nObjs)
void Bnd_ManMap(int iLit, int id, int spec)
Gia_MmFixed_t * Gia_MmFixedStart(int nEntrySize, int nEntriesMax)
FUNCTION DEFINITIONS ///.
void Gia_ManPrintCo(Gia_Man_t *p, Gia_Obj_t *pObj)
int Gia_ManCounterExampleValueLookup(Gia_Man_t *pGia, int Id, int iFrame)
int Gia_ManHashAndMulti2(Gia_Man_t *p, Vec_Int_t *vLits)
void Gia_ManHashAlloc(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupCofactorVar(Gia_Man_t *p, int iVar, int Value)
void Gia_ManPrintMiterStatus(Gia_Man_t *p)
int Gia_ManMarkDangling(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupDfsNode(Gia_Man_t *p, Gia_Obj_t *pObj)
void Gia_ManDupRemapEquiv(Gia_Man_t *pNew, Gia_Man_t *p)
int Gia_ManLevelWithBoxes(Gia_Man_t *p)
void Gia_ManPrintStatsShort(Gia_Man_t *p)
void Gia_SweeperPrintStats(Gia_Man_t *p)
struct Gia_Plc_t_ Gia_Plc_t
void Gia_ManPrintNpnClasses(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupMux(int iVar, Gia_Man_t *pCof1, Gia_Man_t *pCof0)
int Gia_NodeMffcMapping(Gia_Man_t *p)
struct Gia_ParFra_t_ Gia_ParFra_t
void Gia_ManPrintPackingStats(Gia_Man_t *p)
int Gia_ManBuiltInSimCheckEqual(Gia_Man_t *p, int iLit0, int iLit1)
struct Gia_MmFixed_t_ Gia_MmFixed_t
BASIC TYPES ///.
char * Gia_MmFixedEntryFetch(Gia_MmFixed_t *p)
void Gia_SweeperCondPush(Gia_Man_t *p, int ProbeId)
Vec_Int_t * Tas_ManSolveMiterNc(Gia_Man_t *pGia, int nConfs, Vec_Str_t **pvStatus, int fVerbose)
Gia_Man_t * Gia_ManMiter2(Gia_Man_t *p, char *pInit, int fVerbose)
int Gia_ManCountPosWithNonZeroDrivers(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupPermFlop(Gia_Man_t *p, Vec_Int_t *vFfPerm)
Gia_Man_t * Bnd_ManGenImplOut(Gia_Man_t *p)
Vec_Int_t * Gia_SweeperCollectValidProbeIds(Gia_Man_t *p)
void Gia_ManPrintLutStats(Gia_Man_t *p)
Gia_Man_t * Gia_ManRehash(Gia_Man_t *p, int fAddStrash)
int Gia_ObjRecognizeMuxLits(Gia_Man_t *p, Gia_Obj_t *pNode, int *iLitT, int *iLitE)
unsigned * Gia_SimDataExt(Gia_ManSim_t *p, int i)
Vec_Ptr_t * Gia_ManUnrollAbs(Gia_Man_t *p, int nFrames)
int Gia_ManLevelRNum(Gia_Man_t *p)
Gia_Man_t * Gia_ManStart(int nObjsMax)
FUNCTION DEFINITIONS ///.
int Gia_ManHashOr(Gia_Man_t *p, int iLit0, int iLit1)
Gia_Man_t * Gia_ManChoiceMiter(Vec_Ptr_t *vGias)
void Gia_ManUpdateCopy(Vec_Int_t *vCopy, Gia_Man_t *p)
Gia_Man_t * Gia_ManDupBlock(Gia_Man_t *p, int nBlock)
int Gia_ManIsSeqWithBoxes(Gia_Man_t *p)
int Gia_ManBoxNum(Gia_Man_t *p)
DECLARATIONS ///.
struct Gia_Obj_t_ Gia_Obj_t
int Gia_ManCompare(Gia_Man_t *p1, Gia_Man_t *p2)
int Sat_ManTest(Gia_Man_t *pGia, Gia_Obj_t *pObj, int nConfsMax)
int Cbs_ManSolve2(Cbs_Man_t *p, Gia_Obj_t *pObj, Gia_Obj_t *pObj2)
Gia_Man2Min_t * Gia_Man2SuppStart(Gia_Man_t *pGia)
Gia_Man_t * Gia_AigerReadFromMemory(char *pContents, int nFileSize, int fGiaSimple, int fSkipStrash, int fCheck)
void For_ManExperiment(Gia_Man_t *pGia, int nIters, int fClustered, int fVerbose)
void Gia_ManPrint(Gia_Man_t *p)
int Gia_ManEvalEdgeCount(Gia_Man_t *p)
Vec_Int_t * Tas_ReadModel(Tas_Man_t *p)
void Gia_ManDumpVerilogNand(Gia_Man_t *p, char *pFileName)
void Gia_ManEquivPrintClasses(Gia_Man_t *p, int fVerbose, float Mem)
Gia_Man_t * Gia_ManDupPerm(Gia_Man_t *p, Vec_Int_t *vPiPerm)
Vec_Int_t * Gia_SweeperGetCex(Gia_Man_t *p)
void Gia_ManLoadValue(Gia_Man_t *p, Vec_Int_t *vValues)
Gia_Man_t * Mf_ManPerformMapping(Gia_Man_t *pGia, Jf_Par_t *pPars)
Gia_Man_t * Gia_ManDupNoMuxes(Gia_Man_t *p, int fSkipBufs)
void * Gia_ManUnrollAdd(void *pMan, int fMax)
void Gia_ManCheckMark0(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupExist(Gia_Man_t *p, int iVar)
Gia_Man_t * Gia_ManDupPermFlopGap(Gia_Man_t *p, Vec_Int_t *vFfPerm)
int Gia_SweeperProbeCreate(Gia_Man_t *p, int iLit)
int Tas_ManSolveArray(Tas_Man_t *p, Vec_Ptr_t *vObjs)
Gia_Man_t * Gia_ManDupMarked(Gia_Man_t *p)
void * Gia_ManUpdateTimMan2(Gia_Man_t *p, Vec_Int_t *vBoxesLeft, int nTermsDiff)
struct Gia_ManSim_t_ Gia_ManSim_t
Gia_Man_t * Gia_ManRrr(Gia_Man_t *pGia, int iSeed, int nWords, int nTimeout, int nSchedulerVerbose, int nPartitionerVerbose, int nOptimizerVerbose, int nAnalyzerVerbose, int nSimulatorVerbose, int nSatSolverVerbose, int fUseBddCspf, int fUseBddMspf, int nConflictLimit, int nSortType, int nOptimizerFlow, int nSchedulerFlow, int nPartitionType, int nDistance, int nJobs, int nThreads, int nPartitionSize, int nPartitionSizeMin, int fDeterministic, int nParallelPartitions, int fOptOnInsert, int fGreedy)
int Gia_ManHashXor(Gia_Man_t *p, int iLit0, int iLit1)
void Gia_ManSimSetDefaultParams(Gia_ParSim_t *p)
Gia_Man_t * Gia_ManDupDfsSkip(Gia_Man_t *p)
Abc_Cex_t * Gia_ManCexExtendToIncludeAllObjects(Gia_Man_t *p, Abc_Cex_t *pCex)
Gia_Man_t * Gia_ManDupCofactorObj(Gia_Man_t *p, int iObj, int Value)
Gia_Man_t * Gia_ManDupCollapse(Gia_Man_t *p, Gia_Man_t *pBoxes, Vec_Int_t *vBoxPres, int fSeq)
void Gia_ManInvertPos(Gia_Man_t *pAig)
Gia_Man_t * Gia_ManDupAndConesLimit(Gia_Man_t *p, int *pAnds, int nAnds, int Level)
void Gia_ManBuiltInSimPerform(Gia_Man_t *p, int iObj)
int Gia_ManComputeEdgeDelay(Gia_Man_t *p, int fUseTwo)
void Gia_ManDupRemapLiterals(Vec_Int_t *vLits, Gia_Man_t *p)
FUNCTION DEFINITIONS ///.
int Gia_ObjIsMuxType(Gia_Obj_t *pNode)
Gia_Man_t * Gia_ManRemoveEnables(Gia_Man_t *p)
Abc_Cex_t * Gia_ManCexExtendToIncludeCurrentStates(Gia_Man_t *p, Abc_Cex_t *pCex)
void Gia_ObjPrint(Gia_Man_t *p, Gia_Obj_t *pObj)
void Gia_ManFillValue(Gia_Man_t *p)
struct Gia_Man_t_ Gia_Man_t
void Gia_ManEquivPrintOne(Gia_Man_t *p, int i, int Counter)
word Gia_LutComputeTruth6(Gia_Man_t *p, int iObj, Vec_Wrd_t *vTruths)
void Gia_ManCounterExampleValueStart(Gia_Man_t *pGia, Abc_Cex_t *pCex)
Gia_Man_t * Gia_ManPerformBidec(Gia_Man_t *p, int fVerbose)
Gia_Man_t * Gia_ManUnrollAndCofactor(Gia_Man_t *p, int nFrames, int nFanMax, int fVerbose)
#define GIA_NONE
INCLUDES ///.
int Gia_ManCheckCoPhase(Gia_Man_t *p)
Vec_Wrd_t * Gia_ManSimPatSim(Gia_Man_t *p)
Gia_Man_t * Lf_ManPerformMapping(Gia_Man_t *pGia, Jf_Par_t *pPars)
Gia_Man_t * Gia_ManDupMap(Gia_Man_t *p, Vec_Int_t *vMap)
Gia_Man_t * Jf_ManPerformMapping(Gia_Man_t *pGia, Jf_Par_t *pPars)
Gia_Man_t * Gia_ManDupFromVecs(Gia_Man_t *p, Vec_Int_t *vCis, Vec_Int_t *vAnds, Vec_Int_t *vCos, int nRegs)
struct Gps_Par_t_ Gps_Par_t
void Gia_ManDupAppend(Gia_Man_t *p, Gia_Man_t *pTwo)
Gia_Man_t * Gia_ManTransformTwoWord2DualOutput(Gia_Man_t *p)
int Gia_MmStepReadMemUsage(Gia_MmStep_t *p)
void Gia_ManPrintOutputLutStats(Gia_Man_t *p)
Vec_Int_t * Cbs_ManSolveMiterNc(Gia_Man_t *pGia, int nConfs, Vec_Str_t **pvStatus, int f0Proved, int fVerbose)
Vec_Int_t * Gia_SweeperGraft(Gia_Man_t *pDst, Vec_Int_t *vProbes, Gia_Man_t *pSrc)
Gia_Man_t * Gia_ManDupCofAllInt(Gia_Man_t *p, Vec_Int_t *vSigs, int fVerbose)
Gia_Man_t * Gia_ManPerformDsdBalanceWin(Gia_Man_t *p, int LevelMax, int nTimeWindow, int nLutSize, int nCutNum, int nRelaxRatio, int fVerbose)
int Gia_NodeMffcSize(Gia_Man_t *p, Gia_Obj_t *pNode)
void Gia_AigerWriteSimple(Gia_Man_t *pInit, char *pFileName)
Gia_Man_t * Gia_ManTransductionTt(Gia_Man_t *pGia, int nType, int fMspf, int nRandom, int nSortType, int nPiShuffle, int nParameter, int fLevel, Gia_Man_t *pExdc, int fNewLine, int nVerbose)
int Gia_ManIncrSimCheckEqual(Gia_Man_t *p, int iLit0, int iLit1)
Vec_Int_t * Cbs_ReadModel(Cbs_Man_t *p)
void Gia_ManPrintMuxStats(Gia_Man_t *p)
int Gia_ManHashMux(Gia_Man_t *p, int iCtrl, int iData1, int iData0)
int Gia_ManEvalSolutionOne(Gia_Man_t *p, Vec_Wrd_t *vSims, Vec_Wrd_t *vIsfs, Vec_Int_t *vCands, Vec_Int_t *vSet, int nWords, int fVerbose)
Gia_Man_t * Gia_ManTransductionBdd(Gia_Man_t *pGia, int nType, int fMspf, int nRandom, int nSortType, int nPiShuffle, int nParameter, int fLevel, Gia_Man_t *pExdc, int fNewLine, int nVerbose)
void Gia_ManOrigIdsInit(Gia_Man_t *p)
DECLARATIONS ///.
Gia_Man_t * Gia_ManDupCones(Gia_Man_t *p, int *pPos, int nPos, int fTrimPis)
void Gia_ManComputeOneWinStart(Gia_Man_t *p, int nAnds, int fReverse)
void Gia_ManQuantSetSuppAnd(Gia_Man_t *p, Gia_Obj_t *pObj)
Gia_Man_t * Bnd_ManGenPatched(Gia_Man_t *pOut, Gia_Man_t *pSpec, Gia_Man_t *pPatch)
Vec_Int_t * Gia_SweeperCondVector(Gia_Man_t *p)
int Gia_ManBuiltInSimCheckOver(Gia_Man_t *p, int iLit0, int iLit1)
int Gia_ManEquivCountClasses(Gia_Man_t *p)
void Gia_ManCleanValue(Gia_Man_t *p)
Gia_Man_t * Gia_ManCleanup(Gia_Man_t *p)
Gia_Man_t * Gia_ManSpeedup(Gia_Man_t *p, int Percentage, int Degree, int fVerbose, int fVeryVerbose)
Gia_ManMin_t * Gia_ManSuppStart(Gia_Man_t *pGia)
DECLARATIONS ///.
void Gia_ObjRemoveFanout(Gia_Man_t *p, Gia_Obj_t *pObj, Gia_Obj_t *pFanout)
Vec_Int_t * Gia_ManOrderReverse(Gia_Man_t *p)
void Gia_ManCleanPhase(Gia_Man_t *p)
Gia_Man_t * Gia_ManTtopt(Gia_Man_t *p, int nIns, int nOuts, int nRounds)
int Gia_ManCheckSuppOverlap(Gia_Man_t *p, int iNode1, int iNode2)
char * Gia_MmStepEntryFetch(Gia_MmStep_t *p, int nBytes)
Gia_Man_t * Gia_ManDupNoBuf(Gia_Man_t *p)
Gia_Man_t * Gia_ManTransformMiter2(Gia_Man_t *p)
unsigned * Gia_SimDataCiExt(Gia_ManSim_t *p, int i)
Gia_Man_t * Gia_ManComputeGiaEquivs(Gia_Man_t *pGia, int nConfs, int fVerbose)
void Bnd_ManSetEqOut(int eq)
FUNCTION DEFINITIONS ///.
int Bnd_ManCheckCoMerged(Gia_Man_t *p)
void Gia_MmFlexStop(Gia_MmFlex_t *p, int fVerbose)
Gia_Man_t * Gia_ManMapShrink4(Gia_Man_t *p, int fKeepLevel, int fVerbose)
FUNCTION DEFINITIONS ///.
Gia_Man_t * Gia_ManDupDfs(Gia_Man_t *p)
void Gia_ManSimInfoTransfer(Gia_ManSim_t *p)
Gia_Man_t * Gia_ManPerformDsdBalance(Gia_Man_t *p, int nLutSize, int nCutNum, int nRelaxRatio, int fVerbose)
void Gia_SweeperStop(Gia_Man_t *p)
void Gia_ManCleanMark0(Gia_Man_t *p)
int Gia_ManCountChoices(Gia_Man_t *p)
Vec_Vec_t * Gia_ManLevelize(Gia_Man_t *p)
void Gia_DumpAiger(Gia_Man_t *p, char *pFilePrefix, int iFileNum, int nFileNumDigits)
void Gia_ManCollectAnds_rec(Gia_Man_t *p, int iObj, Vec_Int_t *vNodes)
void Gia_ManCleanTruth(Gia_Man_t *p)
int Gia_ManCrossCut(Gia_Man_t *p, int fReverse)
Gia_Man_t * Gia_ManPerformLfMapping(Gia_Man_t *p, Jf_Par_t *pPars, int fNormalized)
int Gia_SweeperProbeLit(Gia_Man_t *p, int ProbeId)
void Gia_ObjComputeTruthTableStart(Gia_Man_t *p, int nVarsMax)
void Gia_ManUpdateMapping(Gia_Man_t *p, Vec_Int_t *vNodes, Vec_Wec_t *vWin)
Gia_Man_t * Gia_ManDupChoicesFinish(Gia_ChMan_t *pMan)
int Gia_ManLutSizeMax(Gia_Man_t *p)
void Gia_ManFanoutStop(Gia_Man_t *p)
int Bnd_ManCheckBound(Gia_Man_t *p, int fVerbose)
void Gia_ManWriteMiniLut(Gia_Man_t *pGia, char *pFileName)
int Gia_ManEvalEdgeDelay(Gia_Man_t *p)
void Gia_ManEquivTransform(Gia_Man_t *p, int fVerbose)
int Cbs_ManSolve(Cbs_Man_t *p, Gia_Obj_t *pObj)
void * Gia_ManUnrollStart(Gia_Man_t *pAig, Gia_ParFra_t *pPars)
Gia_Man_t * Gia_ManSeqStructSweep(Gia_Man_t *p, int fConst, int fEquiv, int fVerbose)
void Mf_ManSetDefaultPars(Jf_Par_t *pPars)
char * Gia_MmFlexEntryFetch(Gia_MmFlex_t *p, int nBytes)
struct Bnd_Man_t_ Bnd_Man_t
Gia_Man_t * Gia_ManSpecReduce(Gia_Man_t *p, int fDualOut, int fSynthesis, int fReduce, int fSkipSome, int fVerbose)
int Gia_SweeperProbeDelete(Gia_Man_t *p, int ProbeId)
Gia_Man_t * Gia_ManEquivToChoices(Gia_Man_t *p, int nSnapshots)
void Gia_ManPtrWrdDumpBin(char *pFileName, Vec_Ptr_t *p, int fVerbose)
Vec_Int_t * Gia_ManCollectSuppNew(Gia_Man_t *p, int iOut, int nOuts)
int Gia_ManVerifyCex(Gia_Man_t *pAig, Abc_Cex_t *p, int fDualOut)
DECLARATIONS ///.
void Gia_ManStgPrint(FILE *pFile, Vec_Int_t *vLines, int nIns, int nOuts, int nStates)
void Gia_ManTransferTiming(Gia_Man_t *p, Gia_Man_t *pGia)
Gia_Man_t * Bnd_ManCutBoundary(Gia_Man_t *p, Vec_Int_t *vEI, Vec_Int_t *vEO, Vec_Bit_t *vEI_phase, Vec_Bit_t *vEO_phase)
void Gia_ManSetIfParsDefault(void *pIfPars)
FUNCTION DEFINITIONS ///.
Gia_Man_t * Gia_ManFront(Gia_Man_t *p)
Gia_Man_t * Gia_ManAigSyn3(Gia_Man_t *p, int fVerbose, int fVeryVerbose)
int Gia_ManLutNum(Gia_Man_t *p)
Gia_Man_t * Gia_ManIsoReduce(Gia_Man_t *p, Vec_Ptr_t **pvPosEquivs, Vec_Ptr_t **pvPiPerms, int fEstimate, int fDualOut, int fVerbose, int fVeryVerbose)
void Gia_ManMappingVerify(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupAndOr(Gia_Man_t *p, int nOuts, int fUseOr, int fCompl)
void Lf_ManSetDefaultPars(Jf_Par_t *pPars)
unsigned * Gia_SimDataCoExt(Gia_ManSim_t *p, int i)
void Gia_ManSimInfoInit(Gia_ManSim_t *p)
void Gia_ManQuantSetSuppZero(Gia_Man_t *p)
int Gia_ManSetLevels(Gia_Man_t *p, Vec_Int_t *vCiLevels)
void Gia_ManCollectTfi(Gia_Man_t *p, Vec_Int_t *vRoots, Vec_Int_t *vNodes)
Gia_Man_t * Gia_ManTtoptCare(Gia_Man_t *p, int nIns, int nOuts, int nRounds, char *pFileName, int nRarity)
void Gia_ManSolveProblem(Gia_Man_t *pGia, Emb_Par_t *pPars)
Vec_Ptr_t * Gia_ManArray2Sim(Vec_Wec_t *vRes)
struct Gia_Man2Min_t_ Gia_Man2Min_t
Gia_Man_t * Gia_ManDupOntop(Gia_Man_t *p, Gia_Man_t *p2)
int Gia_ManVerifyWithBoxes(Gia_Man_t *pGia, int nBTLimit, int nTimeLim, int fSeq, int fDumpFiles, int fVerbose, char *pFileSpec)
Gia_Man_t * Gia_ManDupTopAnd(Gia_Man_t *p, int fVerbose)
int Gia_SweeperRun(Gia_Man_t *p, Vec_Int_t *vProbeIds, char *pCommLime, int fVerbose)
Gia_Man_t * Gia_ManExtractWindow(Gia_Man_t *p, int LevelMax, int nTimeWindow, int fVerbose)
int Gia_ManFilterEquivsUsingParts(Gia_Man_t *pGia, char *pName1, char *pName2)
Vec_Flt_t * Gia_ManPrintOutputProb(Gia_Man_t *p)
int Gia_ManLutLevelWithBoxes(Gia_Man_t *p)
Gia_Man_t * Gia_ManStgRead(char *pFileName, int kHot, int fVerbose)
void Gia_ObjComputeTruthTableStop(Gia_Man_t *p)
int Gia_ObjRecognizeExor(Gia_Obj_t *pObj, Gia_Obj_t **ppFan0, Gia_Obj_t **ppFan1)
Vec_Int_t * Gia_ManGetDangling(Gia_Man_t *p)
void Gia_ManCreateRefs(Gia_Man_t *p)
void Gia_ManCleanLevels(Gia_Man_t *p, int Size)
struct Gia_ChMan_t_ Gia_ChMan_t
void Gia_SweeperSetConflictLimit(Gia_Man_t *p, int nConfMax)
void Tas_ManStop(Tas_Man_t *p)
void Gia_ManQuantSetSuppStart(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupNormalize(Gia_Man_t *p, int fHashMapping)
int Gia_ObjCheckEdge(Gia_Man_t *p, int iObj, int iNext)
Vec_Wrd_t * Gia_ManArray2SimOne(Vec_Int_t *vRes)
void Gia_Man2SuppStop(Gia_Man2Min_t *p)
Gia_Man_t * Gia_ManDupSelf(Gia_Man_t *p)
int Gia_ManHashAnd(Gia_Man_t *p, int iLit0, int iLit1)
Gia_Man_t * Gia_ManDupDemiter(Gia_Man_t *p, int fVerbose)
struct Gia_MmStep_t_ Gia_MmStep_t
Gia_Man_t * Gia_ManDupWithConstraints(Gia_Man_t *p, Vec_Int_t *vPoTypes)
int Gia_ManSetFailedPoCex(Gia_Man_t *pAig, Abc_Cex_t *p)
Gia_Man_t * Gia_ManDupSelectedOutputs(Gia_Man_t *p, Vec_Int_t *vOutsLeft)
Gia_Man_t * Gia_ManDupOrderDfsChoices(Gia_Man_t *p)
Gia_Man_t * Bnd_ManStackGias(Gia_Man_t *pSpec, Gia_Man_t *pImpl)
Gia_Man_t * Gia_ManDupLevelized(Gia_Man_t *p)
Gia_Man_t * Gia_ManAigSyn2(Gia_Man_t *p, int fOldAlgo, int fCoarsen, int fCutMin, int nRelaxRatio, int fDelayMin, int fVerbose, int fVeryVerbose)
void Gia_ManIncrementTravId(Gia_Man_t *p)
Gia_Man_t * Gia_ManCleanupOutputs(Gia_Man_t *p, int nOutputs)
void Gia_ManProdAdderGen(int nArgA, int nArgB, int Seed, int fSigned, int fCla)
word Gia_ObjComputeTruth6Cis(Gia_Man_t *p, int iLit, Vec_Int_t *vSupp, Vec_Wrd_t *vTemp)
void Gia_ObjAddFanout(Gia_Man_t *p, Gia_Obj_t *pObj, Gia_Obj_t *pFanout)
void Gia_ManCheckMark1(Gia_Man_t *p)
void Gia_ObjCollectInternal(Gia_Man_t *p, Gia_Obj_t *pObj)
struct Jf_Par_t_ Jf_Par_t
Gia_Man_t * Gia_ManMiterInverse(Gia_Man_t *pBot, Gia_Man_t *pTop, int fDualOut, int fVerbose)
Gia_Man_t * Gia_ManAigSyn4(Gia_Man_t *p, int fVerbose, int fVeryVerbose)
Gia_Man_t * Gia_ManTransformToDual(Gia_Man_t *p)
int Gia_ManConeSize(Gia_Man_t *p, int *pNodes, int nNodes)
Vec_Int_t * Gia_ManReverseLevel(Gia_Man_t *p)
float Gia_ManEvaluateSwitching(Gia_Man_t *p)
Gia_Man_t * Gia_ManMiter(Gia_Man_t *pAig0, Gia_Man_t *pAig1, int nInsDup, int fDualOut, int fSeq, int fImplic, int fVerbose)
void Bnd_ManFinalizeMappings()
Gia_Man_t * Bnd_ManGenPatched2(Gia_Man_t *pImpl, Gia_Man_t *pPatch, int fSkiptStrash, int fVerbose)
Gia_Man_t * Gia_ManDupConeSupp(Gia_Man_t *p, int iLit, Vec_Int_t *vCiIds)
int Gia_MmFixedReadMaxEntriesUsed(Gia_MmFixed_t *p)
int Gia_ManHashAndTry(Gia_Man_t *p, int iLit0, int iLit1)
struct Gia_ManMin_t_ Gia_ManMin_t
int Gia_ManHashXorReal(Gia_Man_t *p, int iLit0, int iLit1)
void Gia_MmFixedStop(Gia_MmFixed_t *p, int fVerbose)
int Gia_ManUnrollLastLit(void *pMan)
int Gia_ManClockDomainNum(Gia_Man_t *p)
int Gia_ManHashLookupInt(Gia_Man_t *p, int iLit0, int iLit1)
word * Gia_ManCountFraction(Gia_Man_t *p, Vec_Wrd_t *vSimI, Vec_Int_t *vSupp, int Thresh, int fVerbose, int *pCare)
Gia_Man_t * Gia_ManFrames(Gia_Man_t *pAig, Gia_ParFra_t *pPars)
Gia_Man_t * Gia_ManDupOutputVec(Gia_Man_t *p, Vec_Int_t *vOutPres)
void Bnd_ManPrintMappings()
Gia_Man_t * Bnd_ManGenSpecOut(Gia_Man_t *p)
int Gia_SweeperFraig(Gia_Man_t *p, Vec_Int_t *vProbeIds, char *pCommLime, int nWords, int nConfs, int fVerify, int fVerbose)
void Gia_ManCheckIntegrityWithBoxes(Gia_Man_t *p)
Vec_Int_t * Gia_ManOrderWithBoxes(Gia_Man_t *p)
void Gia_ManEdgeFromArray(Gia_Man_t *p, Vec_Int_t *vArray)
FUNCTION DEFINITIONS ///.
void Gia_ManSimulateRound(Gia_ManSim_t *p)
void Bnd_ManMerge(int id1, int id2, int phaseDiff)
void Cbs_ManSetConflictNum(Cbs_Man_t *p, int Num)
Gia_Man_t * Gia_ManDupCofAll(Gia_Man_t *p, int nFanLim, int fVerbose)
int Gia_ManBlackBoxNum(Gia_Man_t *p)
void Gia_ManIncrSimSet(Gia_Man_t *p, Vec_Int_t *vObjLits)
void Gia_ManSetLutRefs(Gia_Man_t *p)
Gia_Man_t * Gia_ManReadMiniLut(char *pFileName)
int Tas_ManSolve(Tas_Man_t *p, Gia_Obj_t *pObj, Gia_Obj_t *pObj2)
Gia_Man_t * Gia_ManBalance(Gia_Man_t *p, int fSimpleAnd, int fStrict, int fVerbose)
int Gia_ManIncrSimCheckOver(Gia_Man_t *p, int iLit0, int iLit1)
Gia_Man_t * Gia_ManDupHashMapping(Gia_Man_t *p)
struct Emb_Par_t_ Emb_Par_t
int Gia_ManBuiltInSimAddPat(Gia_Man_t *p, Vec_Int_t *vPat)
void Gia_ManFilterEquivsUsingLatches(Gia_Man_t *pGia, int fFlopsOnly, int fFlopsWith, int fUseRiDrivers)
Gia_Man_t * Gia_ManRetimeForward(Gia_Man_t *p, int nMaxIters, int fVerbose)
void Gia_ManQuantUpdateCiSupp(Gia_Man_t *p, int iObj)
Gia_Man_t * Gia_ManUnrollDup(Gia_Man_t *p, Vec_Int_t *vLimit)
void Gia_ManBuiltInSimResimulate(Gia_Man_t *p)
word * Gia_ObjComputeTruthTable(Gia_Man_t *p, Gia_Obj_t *pObj)
void Gia_ManInvertConstraints(Gia_Man_t *pAig)
void Gia_ManSetPhase(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupZeroUndc(Gia_Man_t *p, char *pInit, int nNewPis, int fGiaSimple, int fVerbose)
Vec_Int_t * Gia_ManFirstFanouts(Gia_Man_t *p)
int Gia_ManFilterEquivsForSpeculation(Gia_Man_t *pGia, char *pName1, char *pName2, int fLatchA, int fLatchB)
Vec_Int_t * Gia_ManComputeSwitchProbs(Gia_Man_t *pGia, int nFrames, int nPref, int fProbOne)
void Gia_ManHashStop(Gia_Man_t *p)
void Gia_ManDumpVerilog(Gia_Man_t *p, char *pFileName, Vec_Int_t *vObjs, int fVerBufs, int fInter, int fInterComb, int fAssign, int fReverse)
Gia_Man_t * Gia_ManIsoCanonicize(Gia_Man_t *p, int fVerbose)
int Gia_MmFlexReadMemUsage(Gia_MmFlex_t *p)
Gia_Man_t * Gia_ManDupOrderAiger(Gia_Man_t *p)
Vec_Int_t * Gia_ManCollectNodesCis(Gia_Man_t *p, int *pNodes, int nNodes)
void Gia_ManPrintStats(Gia_Man_t *p, Gps_Par_t *pPars)
Gia_Man_t * Gia_ManDupUnnormalize(Gia_Man_t *p)
Vec_Int_t * Gia_ManComputeSwitchProbs2(Gia_Man_t *pGia, int nFrames, int nPref, int fProbOne, int nRandPiFactor)
Gia_Man_t * Gia_ManDemiterToDual(Gia_Man_t *p)
word Gia_ObjComputeTruthTable6Lut(Gia_Man_t *p, int iObj, Vec_Wrd_t *vTemp)
int Gia_ManSimSimulate(Gia_Man_t *pAig, Gia_ParSim_t *pPars)
Gia_Man_t * Gia_ManDupAppendNew(Gia_Man_t *pOne, Gia_Man_t *pTwo)
int Gia_MmFixedReadMemUsage(Gia_MmFixed_t *p)
struct Gia_ParSim_t_ Gia_ParSim_t
void Gia_ManCollectCis(Gia_Man_t *p, int *pNodes, int nNodes, Vec_Int_t *vSupp)
int Gia_ManHashMaj(Gia_Man_t *p, int iData0, int iData1, int iData2)
void Gia_ManPrintCone(Gia_Man_t *p, Gia_Obj_t *pObj, int *pLeaves, int nLeaves, Vec_Int_t *vNodes)
Gia_Man_t * Gia_ManDupDfsOnePo(Gia_Man_t *p, int iPo)
Gia_Man_t * Gia_ManReduceConst(Gia_Man_t *pAig, int fVerbose)
void Gia_ManCleanMark01(Gia_Man_t *p)
Gia_Man_t * Gia_ManSweepWithBoxes(Gia_Man_t *p, void *pParsC, void *pParsS, int fConst, int fEquiv, int fVerbose, int fVerbEquivs)
int Gia_ManLevelNum(Gia_Man_t *p)
Gia_Man_t * Gia_ManMapShrink6(Gia_Man_t *p, int nFanoutMax, int fKeepLevel, int fVerbose)
Vec_Int_t * Cbs_ManSolveMiter(Gia_Man_t *pGia, int nConfs, Vec_Str_t **pvStatus, int fVerbose)
char * Gia_FileNameGenericAppend(char *pBase, char *pSuffix)
int Gia_ManDupConeBack(Gia_Man_t *p, Gia_Man_t *pNew, Vec_Int_t *vCiIds)
void Gia_ManTransferMapping(Gia_Man_t *p, Gia_Man_t *pGia)
Vec_Str_t * Gia_AigerWriteIntoMemoryStrPart(Gia_Man_t *p, Vec_Int_t *vCis, Vec_Int_t *vAnds, Vec_Int_t *vCos, int nRegs)
void Gia_ManPrintConeMulti(Gia_Man_t *p, Vec_Int_t *vObjs, Vec_Int_t *vLeaves, Vec_Int_t *vNodes)
int Gia_ManComputeEdgeDelay2(Gia_Man_t *p)
int Gia_ManBoxCoNum(Gia_Man_t *p)
int Gia_SweeperCondPop(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupOrderDfsReverse(Gia_Man_t *p, int fRevFans, int fRevOuts)
void Bnd_ManFindBound(Gia_Man_t *p, Gia_Man_t *pImpl)
void Gia_ManOrigIdsRemap(Gia_Man_t *p, Gia_Man_t *pNew)
Gia_Man_t * Gia_ManDupDfsLitArray(Gia_Man_t *p, Vec_Int_t *vLits)
void Gia_SatVerifyPattern(Gia_Man_t *p, Gia_Obj_t *pRoot, Vec_Int_t *vCex, Vec_Int_t *vVisit)
void Gia_SweeperLogicDump(Gia_Man_t *p, Vec_Int_t *vProbeIds, int fDumpConds, char *pFileName)
unsigned Gia_ManRandom(int fReset)
FUNCTION DEFINITIONS ///.
int Bnd_ManGetNInternal()
Vec_Ptr_t * Gia_GetFakeNames(int nNames, int fCaps)
void Gia_ManSetMark0(Gia_Man_t *p)
int Gia_NodeMffcSizeMark(Gia_Man_t *p, Gia_Obj_t *pNode)
Gia_Man_t * Gia_ManPerformSopBalance(Gia_Man_t *p, int nCutNum, int nRelaxRatio, int fVerbose)
Gia_Man_t * Gia_ManUpdateExtraAig2(void *pTime, Gia_Man_t *pAig, Vec_Int_t *vBoxesLeft)
void Gia_ManMarkFanoutDrivers(Gia_Man_t *p)
void Gia_ManTransferPacking(Gia_Man_t *p, Gia_Man_t *pGia)
Gia_Man_t * Gia_ManSpecReduceInitFrames(Gia_Man_t *p, Abc_Cex_t *pInit, int nFramesMax, int *pnFrames, int fDualOut, int nMinOutputs)
Gia_Man_t * Gia_ManDupOrderDfs(Gia_Man_t *p)
Gia_Man_t * Gia_ManSeqCleanup(Gia_Man_t *p)
void Gia_AigerWriteS(Gia_Man_t *p, char *pFileName, int fWriteSymbols, int fCompact, int fWriteNewLine, int fSkipComment)
void Gia_ManBuiltInSimResimulateCone(Gia_Man_t *p, int iLit0, int iLit1)
void Cbs_ManStop(Cbs_Man_t *p)
Gia_Man_t * Gia_ManDupAndCones(Gia_Man_t *p, int *pAnds, int nAnds, int fTrimPis)
Gia_Man_t * Gia_ManFramesInitSpecial(Gia_Man_t *pAig, int nFrames, int fVerbose)
Gia_Man_t * Gia_ManDupSliced(Gia_Man_t *p, int nSuppMax)
void Gia_ManDupAppendShare(Gia_Man_t *p, Gia_Man_t *pTwo)
void Gia_ManShow(Gia_Man_t *pMan, Vec_Int_t *vBold, int fAdders, int fFadds, int fPath)
Vec_Int_t * Gia_ManCollectAndsAll(Gia_Man_t *p)
Gia_Man_t * Jf_ManDeriveCnf(Gia_Man_t *p, int fCnfObjIds)
void Gia_ManCountMuxXor(Gia_Man_t *p, int *pnMuxes, int *pnXors)
DECLARATIONS ///.
int Gia_Man2SupportAnd(Gia_Man2Min_t *p, int iLit0, int iLit1)
void * Mf_ManGenerateCnf(Gia_Man_t *pGia, int nLutSize, int fCnfObjIds, int fAddOrCla, int fMapping, int fVerbose)
Gia_Man_t * Gia_ManOrigIdsReduce(Gia_Man_t *p, Vec_Int_t *vPairs)
void Gia_ManSuppStop(Gia_ManMin_t *p)
void Gia_AigerWrite(Gia_Man_t *p, char *pFileName, int fWriteSymbols, int fCompact, int fWriteNewLine)
Gia_Man_t * Gia_ManEquivReduceAndRemap(Gia_Man_t *p, int fSeq, int fMiterPairs)
void Gia_ManCollectAnds(Gia_Man_t *p, int *pNodes, int nNodes, Vec_Int_t *vNodes, Vec_Int_t *vLeaves)
Gia_Man_t * Gia_ManSpecReduceInit(Gia_Man_t *p, Abc_Cex_t *pInit, int nFrames, int fDualOut)
Gia_ChMan_t * Gia_ManDupChoicesStart(Gia_Man_t *pGia)
void Gia_MmFlexRestart(Gia_MmFlex_t *p)
Gia_Man_t * Gia_ManIsoReduce2(Gia_Man_t *p, Vec_Ptr_t **pvPosEquivs, Vec_Ptr_t **pvPiPerms, int fEstimate, int fBetterQual, int fDualOut, int fVerbose, int fVeryVerbose)
Vec_Int_t * Gia_ManSaveValue(Gia_Man_t *p)
void Gia_ManCleanMark1(Gia_Man_t *p)
int Gia_ManQuantExist(Gia_Man_t *p, int iLit, int(*pFuncCiToKeep)(void *, int), void *pData)
Gia_Man_t * Gia_ManDupDfsRehash(Gia_Man_t *p)
unsigned __int64 word
DECLARATIONS ///.
Vec_Ptr_t * vLutsRankings
unsigned char * pSwitching
typedefABC_NAMESPACE_HEADER_START struct Abc_Cex_t_ Abc_Cex_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Bit_t_ Vec_Bit_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Flt_t_ Vec_Flt_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Wec_t_ Vec_Wec_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Wrd_t_ Vec_Wrd_t
INCLUDES ///.