76static inline int Cec3_ObjSatId(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
return Gia_ObjCopy2Array(
p, Gia_ObjId(
p, pObj)); }
77static inline int Cec3_ObjSetSatId(
Gia_Man_t *
p,
Gia_Obj_t * pObj,
int Num ) {
assert(Cec3_ObjSatId(
p, pObj) == -1); Gia_ObjSetCopy2Array(
p, Gia_ObjId(
p, pObj), Num);
return Num; }
78static inline void Cec3_ObjCleanSatId(
Gia_Man_t *
p,
Gia_Obj_t * pObj ) {
assert(Cec3_ObjSatId(
p, pObj) != -1); Gia_ObjSetCopy2Array(
p, Gia_ObjId(
p, pObj), -1); }
80static inline void satoko_mark_cone(
bmcg_sat_solver *
p,
int * pVars,
int nVars ) {}
81static inline void satoko_unmark_cone(
bmcg_sat_solver *
p,
int * pVars,
int nVars ) {}
104 p->nConfLimit = 1000;
126 int pLits[4], RetValue, VarF, VarI, VarT, VarE, fCompT, fCompE;
128 assert( !Gia_IsComplement( pNode ) );
133 VarF = Cec3_ObjSatId(
p, pNode);
134 VarI = Cec3_ObjSatId(
p, pNodeI);
135 VarT = Cec3_ObjSatId(
p, Gia_Regular(pNodeT));
136 VarE = Cec3_ObjSatId(
p, Gia_Regular(pNodeE));
138 fCompT = Gia_IsComplement(pNodeT);
139 fCompE = Gia_IsComplement(pNodeE);
149 pLits[0] = Abc_Var2Lit(VarI, 1);
150 pLits[1] = Abc_Var2Lit(VarT, 1^fCompT);
151 pLits[2] = Abc_Var2Lit(VarF, 0);
154 if ( pNodeI->
fPhase ) pLits[0] = Abc_LitNot( pLits[0] );
155 if ( Gia_Regular(pNodeT)->fPhase ) pLits[1] = Abc_LitNot( pLits[1] );
156 if ( pNode->
fPhase ) pLits[2] = Abc_LitNot( pLits[2] );
160 pLits[0] = Abc_Var2Lit(VarI, 1);
161 pLits[1] = Abc_Var2Lit(VarT, 0^fCompT);
162 pLits[2] = Abc_Var2Lit(VarF, 1);
165 if ( pNodeI->
fPhase ) pLits[0] = Abc_LitNot( pLits[0] );
166 if ( Gia_Regular(pNodeT)->fPhase ) pLits[1] = Abc_LitNot( pLits[1] );
167 if ( pNode->
fPhase ) pLits[2] = Abc_LitNot( pLits[2] );
171 pLits[0] = Abc_Var2Lit(VarI, 0);
172 pLits[1] = Abc_Var2Lit(VarE, 1^fCompE);
173 pLits[2] = Abc_Var2Lit(VarF, 0);
176 if ( pNodeI->
fPhase ) pLits[0] = Abc_LitNot( pLits[0] );
177 if ( Gia_Regular(pNodeE)->fPhase ) pLits[1] = Abc_LitNot( pLits[1] );
178 if ( pNode->
fPhase ) pLits[2] = Abc_LitNot( pLits[2] );
182 pLits[0] = Abc_Var2Lit(VarI, 0);
183 pLits[1] = Abc_Var2Lit(VarE, 0^fCompE);
184 pLits[2] = Abc_Var2Lit(VarF, 1);
187 if ( pNodeI->
fPhase ) pLits[0] = Abc_LitNot( pLits[0] );
188 if ( Gia_Regular(pNodeE)->fPhase ) pLits[1] = Abc_LitNot( pLits[1] );
189 if ( pNode->
fPhase ) pLits[2] = Abc_LitNot( pLits[2] );
207 pLits[0] = Abc_Var2Lit(VarT, 0^fCompT);
208 pLits[1] = Abc_Var2Lit(VarE, 0^fCompE);
209 pLits[2] = Abc_Var2Lit(VarF, 1);
212 if ( Gia_Regular(pNodeT)->fPhase ) pLits[0] = Abc_LitNot( pLits[0] );
213 if ( Gia_Regular(pNodeE)->fPhase ) pLits[1] = Abc_LitNot( pLits[1] );
214 if ( pNode->
fPhase ) pLits[2] = Abc_LitNot( pLits[2] );
218 pLits[0] = Abc_Var2Lit(VarT, 1^fCompT);
219 pLits[1] = Abc_Var2Lit(VarE, 1^fCompE);
220 pLits[2] = Abc_Var2Lit(VarF, 0);
223 if ( Gia_Regular(pNodeT)->fPhase ) pLits[0] = Abc_LitNot( pLits[0] );
224 if ( Gia_Regular(pNodeE)->fPhase ) pLits[1] = Abc_LitNot( pLits[1] );
225 if ( pNode->
fPhase ) pLits[2] = Abc_LitNot( pLits[2] );
234 int * pLits, nLits, RetValue, i;
235 assert( !Gia_IsComplement(pNode) );
236 assert( Gia_ObjIsAnd( pNode ) );
238 nLits = Vec_PtrSize(vSuper) + 1;
244 pLits[0] = Abc_Var2Lit(Cec3_ObjSatId(
p, Gia_Regular(pFanin)), Gia_IsComplement(pFanin));
245 pLits[1] = Abc_Var2Lit(Cec3_ObjSatId(
p, pNode), 1);
248 if ( Gia_Regular(pFanin)->fPhase ) pLits[0] = Abc_LitNot( pLits[0] );
249 if ( pNode->
fPhase ) pLits[1] = Abc_LitNot( pLits[1] );
257 pLits[i] = Abc_Var2Lit(Cec3_ObjSatId(
p, Gia_Regular(pFanin)), !Gia_IsComplement(pFanin));
260 if ( Gia_Regular(pFanin)->fPhase ) pLits[i] = Abc_LitNot( pLits[i] );
263 pLits[nLits-1] = Abc_Var2Lit(Cec3_ObjSatId(
p, pNode), 0);
266 if ( pNode->
fPhase ) pLits[nLits-1] = Abc_LitNot( pLits[nLits-1] );
287 if ( Gia_IsComplement(pObj) || Gia_ObjIsCi(pObj) ||
288 (!fFirst && Gia_ObjValue(pObj) > 1) ||
289 (fUseMuxes && pObj->
fMark0) )
291 Vec_PtrPushUnique( vSuper, pObj );
300 assert( !Gia_IsComplement(pObj) );
301 assert( !Gia_ObjIsCi(pObj) );
302 Vec_PtrClear( vSuper );
307 assert( !Gia_IsComplement(pObj) );
308 assert( !Gia_ObjIsConst0(pObj) );
309 if ( Cec3_ObjSatId(
p, pObj) >= 0 )
311 assert( Cec3_ObjSatId(
p, pObj) == -1 );
313 if ( Gia_ObjIsAnd(pObj) )
314 Vec_PtrPush( vFrontier, pObj );
320 int i, k, fUseMuxes = 1;
322 if ( Cec3_ObjSatId(
p->pNew,pObj) >= 0 )
323 return Cec3_ObjSatId(
p->pNew,pObj);
325 if ( Gia_ObjIsCi(pObj) )
327 assert( Gia_ObjIsAnd(pObj) );
329 Vec_PtrClear(
p->vFrontier );
335 assert( Cec3_ObjSatId(
p->pNew,pNode) >= 0 );
336 if ( fUseMuxes && pNode->
fMark0 )
338 Vec_PtrClear(
p->vFanins );
339 Vec_PtrPushUnique(
p->vFanins, Gia_ObjFanin0( Gia_ObjFanin0(pNode) ) );
340 Vec_PtrPushUnique(
p->vFanins, Gia_ObjFanin0( Gia_ObjFanin1(pNode) ) );
341 Vec_PtrPushUnique(
p->vFanins, Gia_ObjFanin1( Gia_ObjFanin0(pNode) ) );
342 Vec_PtrPushUnique(
p->vFanins, Gia_ObjFanin1( Gia_ObjFanin1(pNode) ) );
354 assert( Vec_PtrSize(
p->vFanins) > 1 );
356 return Cec3_ObjSatId(
p->pNew,pObj);
374 return Vec_WrdEntryP(
p->vSims,
p->nSimWords * iObj );
376static inline void Cec3_ObjSimSetInputBit(
Gia_Man_t *
p,
int iObj,
int Bit )
378 word * pSim = Cec3_ObjSim(
p, iObj );
379 if ( Abc_InfoHasBit( (
unsigned*)pSim,
p->iPatsPi ) != Bit )
380 Abc_InfoXorBit( (
unsigned*)pSim,
p->iPatsPi );
382static inline void Cec3_ObjSimRo(
Gia_Man_t *
p,
int iObj )
385 word * pSimRo = Cec3_ObjSim(
p, iObj );
386 word * pSimRi = Cec3_ObjSim(
p, Gia_ObjRoToRiId(
p, iObj) );
387 for ( w = 0; w <
p->nSimWords; w++ )
388 pSimRo[w] = pSimRi[w];
390static inline void Cec3_ObjSimCo(
Gia_Man_t *
p,
int iObj )
394 word * pSimCo = Cec3_ObjSim(
p, iObj );
395 word * pSimDri = Cec3_ObjSim(
p, Gia_ObjFaninId0(pObj, iObj) );
396 if ( Gia_ObjFaninC0(pObj) )
397 for ( w = 0; w <
p->nSimWords; w++ )
398 pSimCo[w] = ~pSimDri[w];
400 for ( w = 0; w <
p->nSimWords; w++ )
401 pSimCo[w] = pSimDri[w];
403static inline void Cec3_ObjSimAnd(
Gia_Man_t *
p,
int iObj )
407 word * pSim = Cec3_ObjSim(
p, iObj );
408 word * pSim0 = Cec3_ObjSim(
p, Gia_ObjFaninId0(pObj, iObj) );
409 word * pSim1 = Cec3_ObjSim(
p, Gia_ObjFaninId1(pObj, iObj) );
410 if ( Gia_ObjFaninC0(pObj) && Gia_ObjFaninC1(pObj) )
411 for ( w = 0; w <
p->nSimWords; w++ )
412 pSim[w] = ~pSim0[w] & ~pSim1[w];
413 else if ( Gia_ObjFaninC0(pObj) && !Gia_ObjFaninC1(pObj) )
414 for ( w = 0; w <
p->nSimWords; w++ )
415 pSim[w] = ~pSim0[w] & pSim1[w];
416 else if ( !Gia_ObjFaninC0(pObj) && Gia_ObjFaninC1(pObj) )
417 for ( w = 0; w <
p->nSimWords; w++ )
418 pSim[w] = pSim0[w] & ~pSim1[w];
420 for ( w = 0; w <
p->nSimWords; w++ )
421 pSim[w] = pSim0[w] & pSim1[w];
423static inline int Cec3_ObjSimEqual(
Gia_Man_t *
p,
int iObj0,
int iObj1 )
426 word * pSim0 = Cec3_ObjSim(
p, iObj0 );
427 word * pSim1 = Cec3_ObjSim(
p, iObj1 );
428 if ( (pSim0[0] & 1) == (pSim1[0] & 1) )
430 for ( w = 0; w <
p->nSimWords; w++ )
431 if ( pSim0[w] != pSim1[w] )
437 for ( w = 0; w <
p->nSimWords; w++ )
438 if ( pSim0[w] != ~pSim1[w] )
443static inline void Cec3_ObjSimCi(
Gia_Man_t *
p,
int iObj )
446 word * pSim = Cec3_ObjSim(
p, iObj );
447 for ( w = 0; w <
p->nSimWords; w++ )
455 Cec3_ObjSimCi(
p, Id );
467 if ( Abc_InfoHasBit((
unsigned *)Cec3_ObjSim(
p, Id), iPat) )
468 Abc_InfoSetBit( pCex->pData, i );
477 Cec3_ObjSimCo(
p, Id );
478 if ( Cec3_ObjSimEqual(
p, Id, 0) )
489 for ( w = 0; w <
p->nSimWords; w++ )
491 Vec_WrdPush(
p->vSimsPi, Cec3_ObjSim(
p, Id)[w] );
498 int i, iRepr, iObj, Entry, Count = 0;
501 Cec3_ObjSimAnd(
p, i );
502 pMan->
timeSim += Abc_Clock() - clk;
503 if (
p->pReprs == NULL )
509 word * pSim0 = Cec3_ObjSim(
p, iRepr );
510 word * pSim1 = Cec3_ObjSim(
p, iObj );
511 int iPat = Abc_Lit2Var(Entry);
512 int fPhase = Abc_LitIsCompl(Entry);
513 if ( (fPhase ^ Abc_InfoHasBit((
unsigned *)pSim0, iPat)) == Abc_InfoHasBit((
unsigned *)pSim1, iPat) )
528 Vec_WrdFreeP( &
p->vSims );
529 Vec_WrdFreeP( &
p->vSimsPi );
530 p->vSims = Vec_WrdStart( Gia_ManObjNum(
p) *
nWords );
531 p->vSimsPi = Vec_WrdAlloc( Gia_ManCiNum(
p) *
nWords * 4 );
549 static int s_Primes[16] = {
550 1291, 1699, 1999, 2357, 2953, 3313, 3907, 4177,
551 4831, 5147, 5647, 6343, 6899, 7103, 7873, 8147 };
552 unsigned uHash = 0, * pSimU = (
unsigned *)pSim;
553 int i, nSimsU = 2 * nSims;
555 for ( i = 0; i < nSimsU; i++ )
556 uHash ^= ~pSimU[i] * s_Primes[i & 0xf];
558 for ( i = 0; i < nSimsU; i++ )
559 uHash ^= pSimU[i] * s_Primes[i & 0xf];
560 return (
int)(uHash % nTableSize);
577 int iObj, iPrev = iRepr, iPrev2, iRepr2;
579 if ( Cec3_ObjSimEqual(
p, iRepr, iRepr2) )
590 for ( iObj = Gia_ObjNext(
p, iRepr2); iObj > 0; iObj = Gia_ObjNext(
p, iObj) )
592 if ( Cec3_ObjSimEqual(
p, iRepr, iObj) )
594 Gia_ObjSetNext(
p, iPrev, iObj );
599 Gia_ObjSetRepr(
p, iObj, iRepr2 );
600 Gia_ObjSetNext(
p, iPrev2, iObj );
604 Gia_ObjSetNext(
p, iPrev, -1 );
605 Gia_ObjSetNext(
p, iPrev2, -1 );
612 int * pTable, nTableSize, i, Key;
619 nTableSize = Abc_PrimeCudd( Gia_ManObjNum(
p) );
624 if ( Gia_ObjIsCo(pObj) )
627 assert( Key >= 0 && Key < nTableSize );
628 if ( pTable[Key] == -1 )
631 Gia_ObjSetRepr(
p, i, pTable[Key] );
634 for ( i = Gia_ManObjNum(
p) - 1; i >= 0; i-- )
636 int iRepr = Gia_ObjRepr(
p, i);
639 Gia_ObjSetNext(
p, i, Gia_ObjNext(
p, iRepr) );
640 Gia_ObjSetNext(
p, iRepr, i );
669 p->timeStart = Abc_Clock();
675 Gia_ManConst0(pAig)->Value = 0;
677 pObj->
Value = Gia_ManAppendCi(
p->pNew );
679 Vec_IntFill( &
p->pNew->vCopies2, Gia_ManObjNum(
p->pNew), -1 );
683 p->vFrontier = Vec_PtrAlloc( 1000 );
684 p->vFanins = Vec_PtrAlloc( 100 );
685 p->vNodesNew = Vec_IntAlloc( 100 );
686 p->vSatVars = Vec_IntAlloc( 100 );
687 p->vObjSatPairs = Vec_IntAlloc( 100 );
688 p->vCexTriples = Vec_IntAlloc( 100 );
697 if (
p->pPars->fVerbose )
699 abctime timeTotal = Abc_Clock() -
p->timeStart;
704 ABC_PRTP(
" sat ",
p->timeSatSat, timeTotal );
705 ABC_PRTP(
" unsat ",
p->timeSatUnsat, timeTotal );
706 ABC_PRTP(
" fail ",
p->timeSatUndec, timeTotal );
707 ABC_PRTP(
"Simulation ",
p->timeSim, timeTotal );
708 ABC_PRTP(
"Refinement ",
p->timeRefine, timeTotal );
709 ABC_PRTP(
"Rollback ",
p->timeExtra, timeTotal );
711 ABC_PRTP(
"TOTAL ", timeTotal, timeTotal );
715 Vec_WrdFreeP( &
p->pAig->vSims );
720 Vec_PtrFreeP( &
p->vFrontier );
721 Vec_PtrFreeP( &
p->vFanins );
722 Vec_IntFreeP( &
p->vNodesNew );
723 Vec_IntFreeP( &
p->vSatVars );
724 Vec_IntFreeP( &
p->vObjSatPairs );
725 Vec_IntFreeP( &
p->vCexTriples );
745 if ( iObj == 0 )
return 0;
746 if ( Gia_ObjIsTravIdCurrentId(
p, iObj) )
748 Gia_ObjSetTravIdCurrentId(
p, iObj);
749 if ( Gia_ObjIsCi(pObj) )
752 assert( Gia_ObjIsAnd(pObj) );
753 Value0 =
Cec3_ManVerify_rec(
p, Gia_ObjFaninId0(pObj, iObj), pSat ) ^ Gia_ObjFaninC0(pObj);
754 Value1 =
Cec3_ManVerify_rec(
p, Gia_ObjFaninId1(pObj, iObj), pSat ) ^ Gia_ObjFaninC1(pObj);
755 return pObj->
fMark1 = Value0 & Value1;
765 if ( (Value0 ^ Value1) == fPhase )
766 printf(
"CEX verification FAILED for obj %d and obj %d.\n", iObj0, iObj1 );
785 if ( Gia_ObjIsTravIdCurrentId(
p->pNew, iObj) )
787 Gia_ObjSetTravIdCurrentId(
p->pNew, iObj);
788 pObj = Gia_ManObj(
p->pNew, iObj );
789 if ( Cec3_ObjSatId(
p->pNew, pObj) >= 0 )
791 Vec_IntPush(
p->vNodesNew, iObj );
792 Vec_IntPush(
p->vSatVars, Cec3_ObjSatId(
p->pNew, pObj) );
796 if ( Gia_ObjIsAnd(pObj) )
803 assert( Cec3_ObjSatId(
p->pNew, pObj) >= 0 );
804 Vec_IntPushTwo(
p->vObjSatPairs, Gia_ManCiIdToId(
p->pAig, Gia_ObjCioId(pObj)), Cec3_ObjSatId(
p->pNew, pObj) );
810 int status, i, iVar0, iVar1, Lits[2];
812 iObj1 ^= iObj0, iObj0 ^= iObj1, iObj1 ^= iObj0;
815 if ( !iObj0 && Cec3_ObjSatId(
p->pNew, Gia_ManConst0(
p->pNew)) == -1 )
820 Vec_IntClear(
p->vNodesNew );
821 Vec_IntClear(
p->vSatVars );
822 Vec_IntClear(
p->vObjSatPairs );
828 if (
p->pPars->fUseCones ) satoko_mark_cone(
p->pSat, Vec_IntArray(
p->vSatVars), Vec_IntSize(
p->vSatVars) );
834 Lits[0] = Abc_Var2Lit(iVar0, 1);
835 Lits[1] = Abc_Var2Lit(iVar1, fPhase);
846 Lits[0] = Abc_Var2Lit(iVar0, 0);
847 Lits[1] = Abc_Var2Lit(iVar1, !fPhase);
851 if (
p->pPars->fUseCones ) satoko_unmark_cone(
p->pSat, Vec_IntArray(
p->vSatVars), Vec_IntSize(
p->vSatVars) );
854 if (
p->pPars->fUseCones )
857 Cec3_ObjCleanSatId(
p->pNew, pObj );
864 int i, IdAig, IdSat, status, RetValue = 1;
865 Gia_Obj_t * pObj = Gia_ManObj(
p->pAig, iObj );
866 Gia_Obj_t * pRepr = Gia_ObjReprObj(
p->pAig, iObj );
873 p->pAig->iPatsPi = (
p->pAig->iPatsPi == 64 *
p->pAig->nSimWords - 1) ? 1 :
p->pAig->iPatsPi + 1;
874 assert(
p->pAig->iPatsPi > 0 &&
p->pAig->iPatsPi < 64 *
p->pAig->nSimWords );
878 p->timeSatSat += Abc_Clock() - clk;
884 pObj->
Value = Abc_LitNotCond( pRepr->
Value, fCompl );
885 Gia_ObjSetProved(
p->pAig, iObj );
886 p->timeSatUnsat += Abc_Clock() - clk;
893 Gia_ObjSetFailed(
p->pAig, iObj );
894 p->timeSatUndec += Abc_Clock() - clk;
897 if (
p->pPars->fUseCones )
901 p->timeExtra += Abc_Clock() - clk;
907 if ( !pPars->fVerbose )
909 printf(
"S =%5d ", pMan ? pMan->
nSatSat : 0 );
910 printf(
"U =%5d ", pMan ? pMan->
nSatUnsat : 0 );
911 printf(
"F =%5d ", pMan ? pMan->
nSatUndec : 0 );
918 int i, Iter, fDisproved = 1;
923 if ( pPars->fIsMiter )
943 for ( i = 0; i < pPars->nSimRounds; i++ )
953 for ( Iter = 0; fDisproved && Iter < pPars->nItersMax; Iter++ )
961 if ( ~pObj->
Value || Gia_ObjFailed(
p, i) )
963 if ( !~Gia_ObjFanin0(pObj)->Value || !~Gia_ObjFanin1(pObj)->Value )
965 assert( !Gia_ObjProved(
p, i) && !Gia_ObjFailed(
p, i) );
970 pObjNew = Gia_ManObj( pMan->
pNew, Abc_Lit2Var(pObj->
Value) );
976 pRepr = Gia_ObjReprObj(
p, i );
977 if ( pRepr == NULL || !~pRepr->
Value )
979 if ( Abc_Lit2Var(pObj->
Value) == Abc_Lit2Var(pRepr->
Value) )
982 Gia_ObjSetProved(
p, i );
987 if ( Gia_ObjProved(
p, i) )
998 if ( Fails && pPars->fVerbose )
999 printf(
"Failed to resimulate %d times with pattern = %d (total = %d).\n", Fails, pMan->
nPatterns, pPars->nSimWords * 64 );
1009 if ( !~pObj->
Value )
1012 pObj->
Value = Gia_ManAppendCo( pMan->
pNew, Gia_ObjFanin0Copy(pObj) );
1014 (*ppNew)->pName = Abc_UtilStrsav(
p->pName );
1015 (*ppNew)->pSpec = Abc_UtilStrsav(
p->pSpec );
1020 return p->pCexSeq ? 0 : 1;
1032 pPars->nConfLimit = pPars0->
nBTLimit;
1034 pPars->fVerbose = pPars0->
fVerbose;
void bmcg_sat_solver_reset(bmcg_sat_solver *s)
int bmcg_sat_solver_varnum(bmcg_sat_solver *s)
int bmcg_sat_solver_addvar(bmcg_sat_solver *s)
bmcg_sat_solver * bmcg_sat_solver_start()
MACRO DEFINITIONS ///.
int bmcg_sat_solver_solve(bmcg_sat_solver *s, int *plits, int nlits)
int bmcg_sat_solver_addclause(bmcg_sat_solver *s, int *plits, int nlits)
void bmcg_sat_solver_set_conflict_budget(bmcg_sat_solver *s, int Limit)
int bmcg_sat_solver_read_cex_varvalue(bmcg_sat_solver *s, int ivar)
void bmcg_sat_solver_stop(bmcg_sat_solver *s)
#define GLUCOSE_UNSAT
INCLUDES ///.
#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 Cec3_AddClausesSuper(Gia_Man_t *p, Gia_Obj_t *pNode, Vec_Ptr_t *vSuper, bmcg_sat_solver *pSat)
struct Cec3_Man_t_ Cec3_Man_t
void Cec3_ManSimulateCis(Gia_Man_t *p)
int Cec3_ManSimHashKey(word *pSim, int nSims, int nTableSize)
void Cec3_CollectSuper(Gia_Obj_t *pObj, int fUseMuxes, Vec_Ptr_t *vSuper)
void Cec3_ManDestroy(Cec3_Man_t *p)
int Cec3_ManSweepNode(Cec3_Man_t *p, int iObj)
void Cec3_ManCreateClasses(Gia_Man_t *p, Cec3_Man_t *pMan)
int Cec3_ManSimulate(Gia_Man_t *p, Vec_Int_t *vTriples, Cec3_Man_t *pMan)
int Cec3_ManVerify_rec(Gia_Man_t *p, int iObj, bmcg_sat_solver *pSat)
void Cec3_ObjAddToFrontier(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Ptr_t *vFrontier, bmcg_sat_solver *pSat)
int Cec3_ManSimulateCos(Gia_Man_t *p)
void Cec3_ManSimAlloc(Gia_Man_t *p, int nWords)
int Cec3_ObjGetCnfVar(Cec3_Man_t *p, int iObj)
void Cec3_ManSimClassRefineOne(Gia_Man_t *p, int iRepr)
void Cec3_SetDefaultParams(Cec3_Par_t *p)
FUNCTION DEFINITIONS ///.
void Cec3_ManCollect_rec(Cec3_Man_t *p, int iObj)
Cec3_Man_t * Cec3_ManCreate(Gia_Man_t *pAig, Cec3_Par_t *pPars)
void Cec3_CollectSuper_rec(Gia_Obj_t *pObj, Vec_Ptr_t *vSuper, int fFirst, int fUseMuxes)
void Cec3_ManPrintStats(Gia_Man_t *p, Cec3_Par_t *pPars, Cec3_Man_t *pMan)
void Cec3_AddClausesMux(Gia_Man_t *p, Gia_Obj_t *pNode, bmcg_sat_solver *pSat)
int Cec3_ManPerformSweeping(Gia_Man_t *p, Cec3_Par_t *pPars, Gia_Man_t **ppNew)
typedefABC_NAMESPACE_IMPL_START struct Cec3_Par_t_ Cec3_Par_t
DECLARATIONS ///.
Gia_Man_t * Cec3_ManSimulateTest(Gia_Man_t *p, Cec_ParFra_t *pPars0)
void Cec3_ManVerify(Gia_Man_t *p, int iObj0, int iObj1, int fPhase, bmcg_sat_solver *pSat)
int Cec3_ManSolveTwo(Cec3_Man_t *p, int iObj0, int iObj1, int fPhase)
Abc_Cex_t * Cec3_ManDeriveCex(Gia_Man_t *p, int iOut, int iPat)
void Cec3_ManSaveCis(Gia_Man_t *p)
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 ///.
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 ///.