50 int pLits[4], RetValue, RetValue1, nBTLimit;
55 assert( !Aig_IsComplement(pNew) );
56 assert( !Aig_IsComplement(pOld) );
62 nBTLimit =
p->pPars->nBTLimitNode;
63 if ( !
p->pPars->fSpeculate &&
p->pPars->nFramesK == 0 && (nBTLimit > 0 && (pOld->
fMarkB || pNew->
fMarkB)) )
70 nBTLimit = (int)pow(nBTLimit, 0.7);
77 if (
p->pSat == NULL )
83 pLits[0] = toLit( 0 );
90 if (
p->pSat->qtail !=
p->pSat->qhead )
94 assert(
p->pSat->qtail ==
p->pSat->qhead );
98 if (
p->pPars->fConeBias )
99 Fra_SetActivityFactors(
p, pOld, pNew );
104 pLits[0] = toLitCond( Fra_ObjSatNum(pOld), 0 );
105 pLits[1] = toLitCond( Fra_ObjSatNum(pNew), pOld->
fPhase == pNew->
fPhase );
108 (ABC_INT64_T)nBTLimit, (ABC_INT64_T)0,
109 p->nBTLimitGlobal,
p->nInsLimitGlobal );
110p->timeSat += Abc_Clock() - clk;
113p->timeSatUnsat += Abc_Clock() - clk;
114 pLits[0] = lit_neg( pLits[0] );
115 pLits[1] = lit_neg( pLits[1] );
121 else if ( RetValue1 ==
l_True )
123p->timeSatSat += Abc_Clock() - clk;
130p->timeSatFail += Abc_Clock() - clk;
132 if ( pOld !=
p->pManFraig->pConst1 )
140 if ( pOld ==
p->pManFraig->pConst1 )
149 pLits[0] = toLitCond( Fra_ObjSatNum(pOld), 1 );
150 pLits[1] = toLitCond( Fra_ObjSatNum(pNew), pOld->
fPhase ^ pNew->
fPhase );
152 (ABC_INT64_T)nBTLimit, (ABC_INT64_T)0,
153 p->nBTLimitGlobal,
p->nInsLimitGlobal );
154p->timeSat += Abc_Clock() - clk;
157p->timeSatUnsat += Abc_Clock() - clk;
158 pLits[0] = lit_neg( pLits[0] );
159 pLits[1] = lit_neg( pLits[1] );
164 else if ( RetValue1 ==
l_True )
166p->timeSatSat += Abc_Clock() - clk;
173p->timeSatFail += Abc_Clock() - clk;
211 int pLits[4], RetValue, RetValue1, nBTLimit;
216 assert( !Aig_IsComplement(pNew) );
217 assert( !Aig_IsComplement(pOld) );
223 nBTLimit =
p->pPars->nBTLimitNode;
238 if (
p->pSat == NULL )
244 pLits[0] = toLit( 0 );
251 if (
p->pSat->qtail !=
p->pSat->qhead )
255 assert(
p->pSat->qtail ==
p->pSat->qhead );
259 if (
p->pPars->fConeBias )
260 Fra_SetActivityFactors(
p, pOld, pNew );
267 pLits[0] = toLitCond( Fra_ObjSatNum(pOld), fComplL );
268 pLits[1] = toLitCond( Fra_ObjSatNum(pNew), !fComplR );
271 (ABC_INT64_T)nBTLimit, (ABC_INT64_T)0,
272 p->nBTLimitGlobal,
p->nInsLimitGlobal );
273p->timeSat += Abc_Clock() - clk;
276p->timeSatUnsat += Abc_Clock() - clk;
277 pLits[0] = lit_neg( pLits[0] );
278 pLits[1] = lit_neg( pLits[1] );
284 else if ( RetValue1 ==
l_True )
286p->timeSatSat += Abc_Clock() - clk;
293p->timeSatFail += Abc_Clock() - clk;
295 if ( pOld !=
p->pManFraig->pConst1 )
319 int pLits[4], RetValue, RetValue1, nBTLimit;
324 assert( !Aig_IsComplement(pNew) );
325 assert( !Aig_IsComplement(pOld) );
331 nBTLimit =
p->pPars->nBTLimitNode;
346 if (
p->pSat == NULL )
352 pLits[0] = toLit( 0 );
359 if (
p->pSat->qtail !=
p->pSat->qhead )
363 assert(
p->pSat->qtail ==
p->pSat->qhead );
367 if (
p->pPars->fConeBias )
368 Fra_SetActivityFactors(
p, pOld, pNew );
375 pLits[0] = toLitCond( Fra_ObjSatNum(pOld), !fComplL );
376 pLits[1] = toLitCond( Fra_ObjSatNum(pNew), !fComplR );
379 (ABC_INT64_T)nBTLimit, (ABC_INT64_T)0,
380 p->nBTLimitGlobal,
p->nInsLimitGlobal );
381p->timeSat += Abc_Clock() - clk;
384p->timeSatUnsat += Abc_Clock() - clk;
385 pLits[0] = lit_neg( pLits[0] );
386 pLits[1] = lit_neg( pLits[1] );
392 else if ( RetValue1 ==
l_True )
394p->timeSatSat += Abc_Clock() - clk;
401p->timeSatFail += Abc_Clock() - clk;
403 if ( pOld !=
p->pManFraig->pConst1 )
427 int pLits[2], RetValue1, RetValue;
431 assert( !Aig_IsComplement(pNew) );
432 assert( pNew !=
p->pManFraig->pConst1 );
436 if (
p->pSat == NULL )
442 pLits[0] = toLit( 0 );
450 if (
p->pPars->fConeBias )
451 Fra_SetActivityFactors(
p, NULL, pNew );
455 pLits[0] = toLitCond( Fra_ObjSatNum(pNew), pNew->
fPhase );
457 (ABC_INT64_T)
p->pPars->nBTLimitMiter, (ABC_INT64_T)0,
458 p->nBTLimitGlobal,
p->nInsLimitGlobal );
459p->timeSat += Abc_Clock() - clk;
462p->timeSatUnsat += Abc_Clock() - clk;
463 pLits[0] = lit_neg( pLits[0] );
469 else if ( RetValue1 ==
l_True )
471p->timeSatSat += Abc_Clock() - clk;
479p->timeSatFail += Abc_Clock() - clk;
507 assert( !Aig_IsComplement(pObj) );
508 assert( Fra_ObjSatNum(pObj) );
510 if ( Aig_ObjIsTravIdCurrent(
p->pManFraig, pObj) )
512 Aig_ObjSetTravIdCurrent(
p->pManFraig, pObj);
514 if ( pObj->
Level <= (
unsigned)LevelMin || Aig_ObjIsCi(pObj) )
518 if (
p->pSat->factors == NULL )
520 p->pSat->factors[Fra_ObjSatNum(pObj)] =
p->pPars->dActConeBumpMax * (pObj->
Level - LevelMin)/(LevelMax - LevelMin);
521 veci_push(&
p->pSat->act_vars, Fra_ObjSatNum(pObj));
523 vFanins = Fra_ObjFaninVec( pObj );
542 int LevelMin, LevelMax;
547 veci_resize(&
p->pSat->act_vars, 0);
551 assert(
p->pPars->dActConeRatio > 0 &&
p->pPars->dActConeRatio < 1 );
552 LevelMax = Abc_MaxInt( (pNew ? pNew->
Level : 0), (pOld ? pOld->
Level : 0) );
553 LevelMin = (int)(LevelMax * (1.0 -
p->pPars->dActConeRatio));
555 if ( pOld && !Aig_ObjIsConst1(pOld) )
557 if ( pNew && !Aig_ObjIsConst1(pNew) )
560p->timeTrav += Abc_Clock() - clk;
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Aig_ManIncrementTravId(Aig_Man_t *p)
DECLARATIONS ///.
struct Aig_Obj_t_ Aig_Obj_t
#define sat_solver_addclause
int Fra_NodeIsConst(Fra_Man_t *p, Aig_Obj_t *pNew)
int Fra_NodesAreClause(Fra_Man_t *p, Aig_Obj_t *pOld, Aig_Obj_t *pNew, int fComplL, int fComplR)
int Fra_NodesAreImp(Fra_Man_t *p, Aig_Obj_t *pOld, Aig_Obj_t *pNew, int fComplL, int fComplR)
int Fra_SetActivityFactors_rec(Fra_Man_t *p, Aig_Obj_t *pObj, int LevelMin, int LevelMax)
int Fra_NodesAreEquiv(Fra_Man_t *p, Aig_Obj_t *pOld, Aig_Obj_t *pNew)
FUNCTION DEFINITIONS ///.
struct Fra_Man_t_ Fra_Man_t
void Fra_CnfNodeAddToSolver(Fra_Man_t *p, Aig_Obj_t *pOld, Aig_Obj_t *pNew)
void Fra_SmlSavePattern(Fra_Man_t *p)
sat_solver * sat_solver_new(void)
int sat_solver_simplify(sat_solver *s)
void sat_solver_setnvars(sat_solver *s, int n)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.