76static inline int Cec2_ObjSatId(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Gia_ObjCopy2Array(
p, Gia_ObjId(
p, pObj)); }
77static inline int Cec2_ObjSetSatId(
Gia_Man_t *
p,
Gia_Obj_t * pObj,
int Num ) {
assert(Cec2_ObjSatId(
p, pObj) == -1); Gia_ObjSetCopy2Array(
p, Gia_ObjId(
p, pObj), Num);
return Num; }
78static inline void Cec2_ObjCleanSatId(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
assert(Cec2_ObjSatId(
p, pObj) != -1); Gia_ObjSetCopy2Array(
p, Gia_ObjId(
p, pObj), -1); }
101 p->nConfLimit = 1000;
123 int pLits[4], RetValue, VarF, VarI, VarT, VarE, fCompT, fCompE;
125 assert( !Gia_IsComplement( pNode ) );
130 VarF = Cec2_ObjSatId(
p, pNode);
131 VarI = Cec2_ObjSatId(
p, pNodeI);
132 VarT = Cec2_ObjSatId(
p, Gia_Regular(pNodeT));
133 VarE = Cec2_ObjSatId(
p, Gia_Regular(pNodeE));
135 fCompT = Gia_IsComplement(pNodeT);
136 fCompE = Gia_IsComplement(pNodeE);
146 pLits[0] = Abc_Var2Lit(VarI, 1);
147 pLits[1] = Abc_Var2Lit(VarT, 1^fCompT);
148 pLits[2] = Abc_Var2Lit(VarF, 0);
151 if ( pNodeI->
fPhase ) pLits[0] = Abc_LitNot( pLits[0] );
152 if ( Gia_Regular(pNodeT)->fPhase ) pLits[1] = Abc_LitNot( pLits[1] );
153 if ( pNode->
fPhase ) pLits[2] = Abc_LitNot( pLits[2] );
157 pLits[0] = Abc_Var2Lit(VarI, 1);
158 pLits[1] = Abc_Var2Lit(VarT, 0^fCompT);
159 pLits[2] = Abc_Var2Lit(VarF, 1);
162 if ( pNodeI->
fPhase ) pLits[0] = Abc_LitNot( pLits[0] );
163 if ( Gia_Regular(pNodeT)->fPhase ) pLits[1] = Abc_LitNot( pLits[1] );
164 if ( pNode->
fPhase ) pLits[2] = Abc_LitNot( pLits[2] );
168 pLits[0] = Abc_Var2Lit(VarI, 0);
169 pLits[1] = Abc_Var2Lit(VarE, 1^fCompE);
170 pLits[2] = Abc_Var2Lit(VarF, 0);
173 if ( pNodeI->
fPhase ) pLits[0] = Abc_LitNot( pLits[0] );
174 if ( Gia_Regular(pNodeE)->fPhase ) pLits[1] = Abc_LitNot( pLits[1] );
175 if ( pNode->
fPhase ) pLits[2] = Abc_LitNot( pLits[2] );
179 pLits[0] = Abc_Var2Lit(VarI, 0);
180 pLits[1] = Abc_Var2Lit(VarE, 0^fCompE);
181 pLits[2] = Abc_Var2Lit(VarF, 1);
184 if ( pNodeI->
fPhase ) pLits[0] = Abc_LitNot( pLits[0] );
185 if ( Gia_Regular(pNodeE)->fPhase ) pLits[1] = Abc_LitNot( pLits[1] );
186 if ( pNode->
fPhase ) pLits[2] = Abc_LitNot( pLits[2] );
204 pLits[0] = Abc_Var2Lit(VarT, 0^fCompT);
205 pLits[1] = Abc_Var2Lit(VarE, 0^fCompE);
206 pLits[2] = Abc_Var2Lit(VarF, 1);
209 if ( Gia_Regular(pNodeT)->fPhase ) pLits[0] = Abc_LitNot( pLits[0] );
210 if ( Gia_Regular(pNodeE)->fPhase ) pLits[1] = Abc_LitNot( pLits[1] );
211 if ( pNode->
fPhase ) pLits[2] = Abc_LitNot( pLits[2] );
215 pLits[0] = Abc_Var2Lit(VarT, 1^fCompT);
216 pLits[1] = Abc_Var2Lit(VarE, 1^fCompE);
217 pLits[2] = Abc_Var2Lit(VarF, 0);
220 if ( Gia_Regular(pNodeT)->fPhase ) pLits[0] = Abc_LitNot( pLits[0] );
221 if ( Gia_Regular(pNodeE)->fPhase ) pLits[1] = Abc_LitNot( pLits[1] );
222 if ( pNode->
fPhase ) pLits[2] = Abc_LitNot( pLits[2] );
231 int * pLits, nLits, RetValue, i;
232 assert( !Gia_IsComplement(pNode) );
233 assert( Gia_ObjIsAnd( pNode ) );
235 nLits = Vec_PtrSize(vSuper) + 1;
241 pLits[0] = Abc_Var2Lit(Cec2_ObjSatId(
p, Gia_Regular(pFanin)), Gia_IsComplement(pFanin));
242 pLits[1] = Abc_Var2Lit(Cec2_ObjSatId(
p, pNode), 1);
245 if ( Gia_Regular(pFanin)->fPhase ) pLits[0] = Abc_LitNot( pLits[0] );
246 if ( pNode->
fPhase ) pLits[1] = Abc_LitNot( pLits[1] );
254 pLits[i] = Abc_Var2Lit(Cec2_ObjSatId(
p, Gia_Regular(pFanin)), !Gia_IsComplement(pFanin));
257 if ( Gia_Regular(pFanin)->fPhase ) pLits[i] = Abc_LitNot( pLits[i] );
260 pLits[nLits-1] = Abc_Var2Lit(Cec2_ObjSatId(
p, pNode), 0);
263 if ( pNode->
fPhase ) pLits[nLits-1] = Abc_LitNot( pLits[nLits-1] );
284 if ( Gia_IsComplement(pObj) || Gia_ObjIsCi(pObj) ||
285 (!fFirst && (
p->pRefs ? Gia_ObjRefNum(
p, pObj) : Gia_ObjValue(pObj)) > 1) ||
286 (fUseMuxes && pObj->
fMark0) )
288 Vec_PtrPushUnique( vSuper, pObj );
297 assert( !Gia_IsComplement(pObj) );
298 assert( !Gia_ObjIsCi(pObj) );
299 Vec_PtrClear( vSuper );
305 assert( !Gia_IsComplement(pObj) );
306 assert( !Gia_ObjIsConst0(pObj) );
307 if ( Cec2_ObjSatId(
p, pObj) >= 0 )
309 assert( Cec2_ObjSatId(
p, pObj) == -1 );
313 assert( Vec_IntSize(
p->vVar2Obj) == iVar );
314 Vec_IntPush(
p->vVar2Obj, Gia_ObjId(
p, pObj) );
316 Cec2_ObjSetSatId(
p, pObj, iVar );
317 if ( Gia_ObjIsAnd(pObj) )
318 Vec_PtrPush( vFrontier, pObj );
323 Gia_Obj_t * pObj = Gia_ManObj(pGia, iObj);
324 int i, k, fUseMuxes = 1;
325 if ( Vec_IntSize(&pGia->
vCopies2) < Gia_ManObjNum(pGia) )
326 Vec_IntFillExtra( &pGia->
vCopies2, Gia_ManObjNum(pGia), -1 );
328 if ( Cec2_ObjSatId(pGia,pObj) >= 0 )
329 return Cec2_ObjSatId(pGia,pObj);
331 if ( Gia_ObjIsCi(pObj) )
337 Vec_IntPush( pGia->
vVar2Obj, iObj );
339 return Cec2_ObjSetSatId( pGia, pObj, iVar );
341 assert( Gia_ObjIsAnd(pObj) );
343 Vec_PtrClear( vFrontier );
349 assert( Cec2_ObjSatId(pGia,pNode) >= 0 );
350 if ( fUseMuxes && pNode->
fMark0 )
352 Vec_PtrClear( vFanins );
353 Vec_PtrPushUnique( vFanins, Gia_ObjFanin0( Gia_ObjFanin0(pNode) ) );
354 Vec_PtrPushUnique( vFanins, Gia_ObjFanin0( Gia_ObjFanin1(pNode) ) );
355 Vec_PtrPushUnique( vFanins, Gia_ObjFanin1( Gia_ObjFanin0(pNode) ) );
356 Vec_PtrPushUnique( vFanins, Gia_ObjFanin1( Gia_ObjFanin1(pNode) ) );
369 assert( Vec_PtrSize(vFanins) > 1 );
371 return Cec2_ObjSatId(pGia,pObj);
392 return Vec_WrdEntryP(
p->vSims,
p->nSimWords * iObj );
394static inline void Cec2_ObjSimSetInputBit(
Gia_Man_t *
p,
int iObj,
int Bit )
396 word * pSim = Cec2_ObjSim(
p, iObj );
397 if ( Abc_InfoHasBit( (
unsigned*)pSim,
p->iPatsPi ) != Bit )
398 Abc_InfoXorBit( (
unsigned*)pSim,
p->iPatsPi );
400static inline void Cec2_ObjSimRo(
Gia_Man_t *
p,
int iObj )
403 word * pSimRo = Cec2_ObjSim(
p, iObj );
404 word * pSimRi = Cec2_ObjSim(
p, Gia_ObjRoToRiId(
p, iObj) );
405 for ( w = 0; w <
p->nSimWords; w++ )
406 pSimRo[w] = pSimRi[w];
408static inline void Cec2_ObjSimCo(
Gia_Man_t *
p,
int iObj )
412 word * pSimCo = Cec2_ObjSim(
p, iObj );
413 word * pSimDri = Cec2_ObjSim(
p, Gia_ObjFaninId0(pObj, iObj) );
414 if ( Gia_ObjFaninC0(pObj) )
415 for ( w = 0; w <
p->nSimWords; w++ )
416 pSimCo[w] = ~pSimDri[w];
418 for ( w = 0; w <
p->nSimWords; w++ )
419 pSimCo[w] = pSimDri[w];
421static inline void Cec2_ObjSimAnd(
Gia_Man_t *
p,
int iObj )
425 word * pSim = Cec2_ObjSim(
p, iObj );
426 word * pSim0 = Cec2_ObjSim(
p, Gia_ObjFaninId0(pObj, iObj) );
427 word * pSim1 = Cec2_ObjSim(
p, Gia_ObjFaninId1(pObj, iObj) );
428 if ( Gia_ObjFaninC0(pObj) && Gia_ObjFaninC1(pObj) )
429 for ( w = 0; w <
p->nSimWords; w++ )
430 pSim[w] = ~pSim0[w] & ~pSim1[w];
431 else if ( Gia_ObjFaninC0(pObj) && !Gia_ObjFaninC1(pObj) )
432 for ( w = 0; w <
p->nSimWords; w++ )
433 pSim[w] = ~pSim0[w] & pSim1[w];
434 else if ( !Gia_ObjFaninC0(pObj) && Gia_ObjFaninC1(pObj) )
435 for ( w = 0; w <
p->nSimWords; w++ )
436 pSim[w] = pSim0[w] & ~pSim1[w];
438 for ( w = 0; w <
p->nSimWords; w++ )
439 pSim[w] = pSim0[w] & pSim1[w];
441static inline int Cec2_ObjSimEqual(
Gia_Man_t *
p,
int iObj0,
int iObj1 )
444 word * pSim0 = Cec2_ObjSim(
p, iObj0 );
445 word * pSim1 = Cec2_ObjSim(
p, iObj1 );
446 if ( (pSim0[0] & 1) == (pSim1[0] & 1) )
448 for ( w = 0; w <
p->nSimWords; w++ )
449 if ( pSim0[w] != pSim1[w] )
455 for ( w = 0; w <
p->nSimWords; w++ )
456 if ( pSim0[w] != ~pSim1[w] )
461static inline void Cec2_ObjSimCi(
Gia_Man_t *
p,
int iObj )
464 word * pSim = Cec2_ObjSim(
p, iObj );
465 for ( w = 0; w <
p->nSimWords; w++ )
473 Cec2_ObjSimCi(
p, Id );
485 if ( Abc_InfoHasBit((
unsigned *)Cec2_ObjSim(
p, Id), iPat) )
486 Abc_InfoSetBit( pCex->pData, i );
495 Cec2_ObjSimCo(
p, Id );
496 if ( Cec2_ObjSimEqual(
p, Id, 0) )
507 for ( w = 0; w <
p->nSimWords; w++ )
509 Vec_WrdPush(
p->vSimsPi, Cec2_ObjSim(
p, Id)[w] );
516 int i, iRepr, iObj, Entry, Count = 0;
519 Cec2_ObjSimAnd(
p, i );
520 pMan->
timeSim += Abc_Clock() - clk;
521 if (
p->pReprs == NULL )
527 word * pSim0 = Cec2_ObjSim(
p, iRepr );
528 word * pSim1 = Cec2_ObjSim(
p, iObj );
529 int iPat = Abc_Lit2Var(Entry);
530 int fPhase = Abc_LitIsCompl(Entry);
531 if ( (fPhase ^ Abc_InfoHasBit((
unsigned *)pSim0, iPat)) == Abc_InfoHasBit((
unsigned *)pSim1, iPat) )
543 Vec_WrdFreeP( &
p->vSims );
544 Vec_WrdFreeP( &
p->vSimsPi );
545 p->vSims = Vec_WrdStart( Gia_ManObjNum(
p) *
nWords );
546 p->vSimsPi = Vec_WrdAlloc( Gia_ManCiNum(
p) *
nWords * 4 );
564 static int s_Primes[16] = {
565 1291, 1699, 1999, 2357, 2953, 3313, 3907, 4177,
566 4831, 5147, 5647, 6343, 6899, 7103, 7873, 8147 };
567 unsigned uHash = 0, * pSimU = (
unsigned *)pSim;
568 int i, nSimsU = 2 * nSims;
570 for ( i = 0; i < nSimsU; i++ )
571 uHash ^= ~pSimU[i] * s_Primes[i & 0xf];
573 for ( i = 0; i < nSimsU; i++ )
574 uHash ^= pSimU[i] * s_Primes[i & 0xf];
575 return (
int)(uHash % nTableSize);
592 int iObj, iPrev = iRepr, iPrev2, iRepr2;
594 if ( Cec2_ObjSimEqual(
p, iRepr, iRepr2) )
605 for ( iObj = Gia_ObjNext(
p, iRepr2); iObj > 0; iObj = Gia_ObjNext(
p, iObj) )
607 if ( Cec2_ObjSimEqual(
p, iRepr, iObj) )
609 Gia_ObjSetNext(
p, iPrev, iObj );
614 Gia_ObjSetRepr(
p, iObj, iRepr2 );
615 Gia_ObjSetNext(
p, iPrev2, iObj );
619 Gia_ObjSetNext(
p, iPrev, -1 );
620 Gia_ObjSetNext(
p, iPrev2, -1 );
627 int * pTable, nTableSize, i, Key;
634 nTableSize = Abc_PrimeCudd( Gia_ManObjNum(
p) );
639 if ( Gia_ObjIsCo(pObj) )
642 assert( Key >= 0 && Key < nTableSize );
643 if ( pTable[Key] == -1 )
646 Gia_ObjSetRepr(
p, i, pTable[Key] );
649 for ( i = Gia_ManObjNum(
p) - 1; i >= 0; i-- )
651 int iRepr = Gia_ObjRepr(
p, i);
654 Gia_ObjSetNext(
p, i, Gia_ObjNext(
p, iRepr) );
655 Gia_ObjSetNext(
p, iRepr, i );
684 p->timeStart = Abc_Clock();
690 Gia_ManConst0(pAig)->Value = 0;
692 pObj->
Value = Gia_ManAppendCi(
p->pNew );
694 Vec_IntFill( &
p->pNew->vCopies2, Gia_ManObjNum(
p->pNew), -1 );
698 p->vFrontier = Vec_PtrAlloc( 1000 );
699 p->vFanins = Vec_PtrAlloc( 100 );
700 p->vNodesNew = Vec_IntAlloc( 100 );
701 p->vSatVars = Vec_IntAlloc( 100 );
702 p->vObjSatPairs = Vec_IntAlloc( 100 );
703 p->vCexTriples = Vec_IntAlloc( 100 );
712 if (
p->pPars->fVerbose )
714 abctime timeTotal = Abc_Clock() -
p->timeStart;
719 ABC_PRTP(
" sat ",
p->timeSatSat, timeTotal );
720 ABC_PRTP(
" unsat ",
p->timeSatUnsat, timeTotal );
721 ABC_PRTP(
" fail ",
p->timeSatUndec, timeTotal );
722 ABC_PRTP(
"Simulation ",
p->timeSim, timeTotal );
723 ABC_PRTP(
"Refinement ",
p->timeRefine, timeTotal );
724 ABC_PRTP(
"Rollback ",
p->timeExtra, timeTotal );
726 ABC_PRTP(
"TOTAL ", timeTotal, timeTotal );
730 Vec_WrdFreeP( &
p->pAig->vSims );
735 Vec_PtrFreeP( &
p->vFrontier );
736 Vec_PtrFreeP( &
p->vFanins );
737 Vec_IntFreeP( &
p->vNodesNew );
738 Vec_IntFreeP( &
p->vSatVars );
739 Vec_IntFreeP( &
p->vObjSatPairs );
740 Vec_IntFreeP( &
p->vCexTriples );
760 if ( iObj == 0 )
return 0;
761 if ( Gia_ObjIsTravIdCurrentId(
p, iObj) )
763 Gia_ObjSetTravIdCurrentId(
p, iObj);
764 if ( Gia_ObjIsCi(pObj) )
766 assert( Gia_ObjIsAnd(pObj) );
767 Value0 =
Cec2_ManVerify_rec(
p, Gia_ObjFaninId0(pObj, iObj), pSat ) ^ Gia_ObjFaninC0(pObj);
768 Value1 =
Cec2_ManVerify_rec(
p, Gia_ObjFaninId1(pObj, iObj), pSat ) ^ Gia_ObjFaninC1(pObj);
769 return pObj->
fMark1 = Value0 & Value1;
777 if ( (Value0 ^ Value1) == fPhase )
778 printf(
"CEX verification FAILED for obj %d and obj %d.\n", iObj0, iObj1 );
797 if ( Gia_ObjIsTravIdCurrentId(
p->pNew, iObj) )
799 Gia_ObjSetTravIdCurrentId(
p->pNew, iObj);
800 pObj = Gia_ManObj(
p->pNew, iObj );
801 if ( Cec2_ObjSatId(
p->pNew, pObj) >= 0 )
803 Vec_IntPush(
p->vNodesNew, iObj );
804 Vec_IntPush(
p->vSatVars, Cec2_ObjSatId(
p->pNew, pObj) );
808 if ( Gia_ObjIsAnd(pObj) )
815 assert( Cec2_ObjSatId(
p->pNew, pObj) >= 0 );
816 Vec_IntPushTwo(
p->vObjSatPairs, Gia_ManCiIdToId(
p->pAig, Gia_ObjCioId(pObj)), Cec2_ObjSatId(
p->pNew, pObj) );
822 int status, i, iVar0, iVar1;
824 iObj1 ^= iObj0, iObj0 ^= iObj1, iObj1 ^= iObj0;
827 if ( !iObj0 && Cec2_ObjSatId(
p->pNew, Gia_ManConst0(
p->pNew)) == -1 )
832 Vec_IntClear(
p->vNodesNew );
833 Vec_IntClear(
p->vSatVars );
834 Vec_IntClear(
p->vObjSatPairs );
839 if (
p->pPars->fUseCones ) satoko_mark_cone(
p->pSat, Vec_IntArray(
p->vSatVars), Vec_IntSize(
p->vSatVars) );
854 if (
p->pPars->fUseCones ) satoko_unmark_cone(
p->pSat, Vec_IntArray(
p->vSatVars), Vec_IntSize(
p->vSatVars) );
857 if (
p->pPars->fUseCones )
860 Cec2_ObjCleanSatId(
p->pNew, pObj );
867 int i, IdAig, IdSat, status, RetValue = 1;
868 Gia_Obj_t * pObj = Gia_ManObj(
p->pAig, iObj );
869 Gia_Obj_t * pRepr = Gia_ObjReprObj(
p->pAig, iObj );
876 p->pAig->iPatsPi = (
p->pAig->iPatsPi == 64 *
p->pAig->nSimWords - 1) ? 1 :
p->pAig->iPatsPi + 1;
877 assert(
p->pAig->iPatsPi > 0 &&
p->pAig->iPatsPi < 64 *
p->pAig->nSimWords );
880 p->timeSatSat += Abc_Clock() - clk;
886 pObj->
Value = Abc_LitNotCond( pRepr->
Value, fCompl );
887 Gia_ObjSetProved(
p->pAig, iObj );
888 p->timeSatUnsat += Abc_Clock() - clk;
895 Gia_ObjSetFailed(
p->pAig, iObj );
896 p->timeSatUndec += Abc_Clock() - clk;
899 if (
p->pPars->fUseCones )
903 p->timeExtra += Abc_Clock() - clk;
909 if ( !pPars->fVerbose )
911 printf(
"S =%5d ", pMan ? pMan->
nSatSat : 0 );
912 printf(
"U =%5d ", pMan ? pMan->
nSatUnsat : 0 );
913 printf(
"F =%5d ", pMan ? pMan->
nSatUndec : 0 );
920 int i, Iter, fDisproved = 1;
925 if ( pPars->fIsMiter )
945 for ( i = 0; i < pPars->nSimRounds; i++ )
955 for ( Iter = 0; fDisproved && Iter < pPars->nItersMax; Iter++ )
963 if ( ~pObj->
Value || Gia_ObjFailed(
p, i) )
965 if ( !~Gia_ObjFanin0(pObj)->Value || !~Gia_ObjFanin1(pObj)->Value )
967 assert( !Gia_ObjProved(
p, i) && !Gia_ObjFailed(
p, i) );
972 pObjNew = Gia_ManObj( pMan->
pNew, Abc_Lit2Var(pObj->
Value) );
978 pRepr = Gia_ObjReprObj(
p, i );
979 if ( pRepr == NULL || !~pRepr->
Value )
981 if ( Abc_Lit2Var(pObj->
Value) == Abc_Lit2Var(pRepr->
Value) )
984 Gia_ObjSetProved(
p, i );
989 if ( Gia_ObjProved(
p, i) )
1000 if ( Fails && pPars->fVerbose )
1001 printf(
"Failed to resimulate %d times with pattern = %d (total = %d).\n", Fails, pMan->
nPatterns, pPars->nSimWords * 64 );
1011 if ( !~pObj->
Value )
1014 pObj->
Value = Gia_ManAppendCo( pMan->
pNew, Gia_ObjFanin0Copy(pObj) );
1016 (*ppNew)->pName = Abc_UtilStrsav(
p->pName );
1017 (*ppNew)->pSpec = Abc_UtilStrsav(
p->pSpec );
1022 return p->pCexSeq ? 0 : 1;
1034 pPars->nConfLimit = pPars0->
nBTLimit;
1036 pPars->fVerbose = pPars0->
fVerbose;
#define ABC_FALLOC(type, num)
#define ABC_ALLOC(type, num)
#define ABC_PRTP(a, t, T)
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
void Cec2_AddClausesSuper(Gia_Man_t *p, Gia_Obj_t *pNode, Vec_Ptr_t *vSuper, satoko_t *pSat)
void Cec2_ManCreateClasses(Gia_Man_t *p, Cec2_Man_t *pMan)
Abc_Cex_t * Cec2_ManDeriveCex(Gia_Man_t *p, int iOut, int iPat)
int Gia_ObjGetCnfVar(Gia_Man_t *pGia, int iObj, Vec_Ptr_t *vFrontier, Vec_Ptr_t *vFanins, satoko_t *pSat)
Gia_Man_t * Cec2_ManSimulateTest(Gia_Man_t *p, Cec_ParFra_t *pPars0)
int Cec2_ManSweepNode(Cec2_Man_t *p, int iObj)
void Cec2_AddClausesMux(Gia_Man_t *p, Gia_Obj_t *pNode, satoko_t *pSat)
int Cec2_ManPerformSweeping(Gia_Man_t *p, Cec2_Par_t *pPars, Gia_Man_t **ppNew)
int Cec2_ManSimulate(Gia_Man_t *p, Vec_Int_t *vTriples, Cec2_Man_t *pMan)
void Cec2_ManPrintStats(Gia_Man_t *p, Cec2_Par_t *pPars, Cec2_Man_t *pMan)
void Cec2_ObjAddToFrontier(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Ptr_t *vFrontier, satoko_t *pSat)
void Cec2_ManSimAlloc(Gia_Man_t *p, int nWords)
void Cec2_ManSimClassRefineOne(Gia_Man_t *p, int iRepr)
struct Cec2_Man_t_ Cec2_Man_t
int Cec2_ManSimulateCos(Gia_Man_t *p)
int Cec2_ManVerify_rec(Gia_Man_t *p, int iObj, satoko_t *pSat)
void Cec2_ManCollect_rec(Cec2_Man_t *p, int iObj)
int Cec2_ObjGetCnfVar(Cec2_Man_t *p, int iObj)
typedefABC_NAMESPACE_IMPL_START struct Cec2_Par_t_ Cec2_Par_t
DECLARATIONS ///.
void Cec2_ManSimulateCis(Gia_Man_t *p)
int Cec2_ManSolveTwo(Cec2_Man_t *p, int iObj0, int iObj1, int fPhase)
void Cec2_ManDestroy(Cec2_Man_t *p)
void Cec2_ManSaveCis(Gia_Man_t *p)
void Cec2_SetDefaultParams(Cec2_Par_t *p)
FUNCTION DEFINITIONS ///.
void Cec2_CollectSuper(Gia_Man_t *p, Gia_Obj_t *pObj, int fUseMuxes, Vec_Ptr_t *vSuper)
Cec2_Man_t * Cec2_ManCreate(Gia_Man_t *pAig, Cec2_Par_t *pPars)
void Cec2_CollectSuper_rec(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Ptr_t *vSuper, int fFirst, int fUseMuxes)
void Cec2_ManVerify(Gia_Man_t *p, int iObj0, int iObj1, int fPhase, satoko_t *pSat)
int Cec2_ManSimHashKey(word *pSim, int nSims, int nTableSize)
struct Cec_ParFra_t_ Cec_ParFra_t
struct Gia_Rpr_t_ Gia_Rpr_t
void Gia_ObjSetPhase(Gia_Man_t *p, Gia_Obj_t *pObj)
Gia_Obj_t * Gia_ObjRecognizeMux(Gia_Obj_t *pNode, Gia_Obj_t **ppNodeT, Gia_Obj_t **ppNodeE)
#define Gia_ManForEachAnd(p, pObj, i)
#define Gia_ManForEachCoId(p, Id, i)
word Gia_ManRandomW(int fReset)
void Gia_ManStopP(Gia_Man_t **p)
void Gia_ManHashAlloc(Gia_Man_t *p)
#define Gia_ClassForEachObj1(p, i, iObj)
Gia_Man_t * Gia_ManStart(int nObjsMax)
FUNCTION DEFINITIONS ///.
struct Gia_Obj_t_ Gia_Obj_t
void Gia_ManEquivPrintClasses(Gia_Man_t *p, int fVerbose, float Mem)
int Gia_ObjIsMuxType(Gia_Obj_t *pNode)
void Gia_ManFillValue(Gia_Man_t *p)
struct Gia_Man_t_ Gia_Man_t
#define Gia_ManForEachObjVec(vVec, p, pObj, i)
Gia_Man_t * Gia_ManCleanup(Gia_Man_t *p)
int Gia_ManHashAnd(Gia_Man_t *p, int iLit0, int iLit1)
void Gia_ManIncrementTravId(Gia_Man_t *p)
#define Gia_ManForEachObj(p, pObj, i)
MACRO DEFINITIONS ///.
#define Gia_ManForEachCo(p, pObj, i)
#define Gia_ManForEachCi(p, pObj, i)
void Gia_ManSetPhase(Gia_Man_t *p)
void Gia_ManCleanMark01(Gia_Man_t *p)
#define Gia_ManForEachClass0(p, i)
#define Gia_ManForEachCiId(p, Id, i)
unsigned __int64 word
DECLARATIONS ///.
int satoko_solve(satoko_t *)
char satoko_var_polarity(satoko_t *, unsigned)
int satoko_varnum(satoko_t *)
int satoko_add_variable(satoko_t *, char)
void satoko_rollback(satoko_t *)
struct satoko_opts satoko_opts_t
int satoko_add_clause(satoko_t *, int *, int)
struct solver_t_ satoko_t
void satoko_assump_push(satoko_t *s, int)
void satoko_assump_pop(satoko_t *s)
void satoko_destroy(satoko_t *)
satoko_t * satoko_create(void)
void satoko_configure(satoko_t *, satoko_opts_t *)
satoko_stats_t * satoko_stats(satoko_t *)
ABC_NAMESPACE_IMPL_START Abc_Cex_t * Abc_CexAlloc(int nRegs, int nRealPis, int nFrames)
DECLARATIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Abc_Cex_t_ Abc_Cex_t
INCLUDES ///.
#define Vec_IntForEachEntryDouble(vVec, Entry1, Entry2, i)
#define Vec_IntForEachEntryTriple(vVec, Entry1, Entry2, Entry3, i)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Wrd_t_ Vec_Wrd_t
INCLUDES ///.