49 int iRes0, iRes1, iRepr, iNode, iMiter;
50 int i, fCompl, * piCopies, * pDepths;
52 Vec_IntClear(
p->vXorNodes );
53 if (
p->pPars->nLevelMax )
56 pNew->
pName = Abc_UtilStrsav(
p->pAig->pName );
57 pNew->
pSpec = Abc_UtilStrsav(
p->pAig->pName );
59 piCopies =
ABC_FALLOC(
int, Gia_ManObjNum(
p->pAig) );
60 pDepths =
ABC_CALLOC(
int, Gia_ManObjNum(
p->pAig) );
64 if ( Gia_ObjIsCi(pObj) )
66 piCopies[i] = Gia_ManAppendCi( pNew );
69 if ( Gia_ObjIsCo(pObj) )
71 if ( piCopies[Gia_ObjFaninId0(pObj,i)] == -1 ||
72 piCopies[Gia_ObjFaninId1(pObj,i)] == -1 )
74 iRes0 = Abc_LitNotCond( piCopies[Gia_ObjFaninId0(pObj,i)], Gia_ObjFaninC0(pObj) );
75 iRes1 = Abc_LitNotCond( piCopies[Gia_ObjFaninId1(pObj,i)], Gia_ObjFaninC1(pObj) );
77 pDepths[i] = Abc_MaxInt( pDepths[Gia_ObjFaninId0(pObj,i)], pDepths[Gia_ObjFaninId1(pObj,i)] );
78 if ( Gia_ObjRepr(
p->pAig, i) ==
GIA_VOID || Gia_ObjFailed(
p->pAig, i) )
80 assert( Gia_ObjRepr(
p->pAig, i) < i );
81 iRepr = piCopies[Gia_ObjRepr(
p->pAig, i)];
84 if ( Abc_LitRegular(iNode) == Abc_LitRegular(iRepr) )
86 if (
p->pPars->nLevelMax &&
87 (Gia_ObjLevelId(
p->pAig, i) >
p->pPars->nLevelMax ||
88 Gia_ObjLevelId(
p->pAig, Abc_Lit2Var(iRepr)) >
p->pPars->nLevelMax) )
90 if (
p->pPars->fDualOut )
94 if (
p->pPars->fColorDiff )
96 if ( !Gia_ObjDiffColors(
p->pAig, Gia_ObjRepr(
p->pAig, i), i ) )
101 if ( !Gia_ObjDiffColors2(
p->pAig, Gia_ObjRepr(
p->pAig, i), i ) )
105 pRepr = Gia_ManObj(
p->pAig, Gia_ObjRepr(
p->pAig, i) );
106 fCompl = Gia_ObjPhaseReal(pObj) ^ Gia_ObjPhaseReal(pRepr);
107 piCopies[i] = Abc_LitNotCond( iRepr, fCompl );
108 if ( Gia_ObjProved(
p->pAig, i) )
112 Gia_ManAppendCo( pNew, iMiter );
113 Vec_IntPush(
p->vXorNodes, Gia_ObjRepr(
p->pAig, i) );
114 Vec_IntPush(
p->vXorNodes, i );
116 pDepths[i] = 1 + Abc_MaxInt( pDepths[i], pDepths[Gia_ObjRepr(
p->pAig, i)] );
117 if (
p->pPars->nDepthMax && pDepths[i] >=
p->pPars->nDepthMax )
145 if ( Gia_ObjIsCi(pObj) || Gia_ObjIsConst0(pObj) )
149 return pObj->
fMark0 = Result;
165 unsigned * pRes0, * pRes1;
167 for ( i = 0; i < Gia_ManCiNum(
p->pAig); i++ )
169 pRes0 = (
unsigned *)Vec_PtrEntry( vCiInfo, i );
170 pRes1 = (
unsigned *)Vec_PtrEntry( vInfo, i );
171 pRes1 +=
p->nWords * nSeries;
172 for ( w = 0; w <
p->nWords; w++ )
192 int i, k, iRepr, iNode;
196p->timePat += Abc_Clock() - clk;
201 for ( i = 0; i < pPat->nSeries; i++ )
206 Vec_PtrFree( vInfo );
210 Vec_PtrFree( vInfo );
212p->timeSim += Abc_Clock() - clk;
213 assert( Vec_IntSize(
p->vXorNodes) == 2*Gia_ManCoNum(pNew) );
215 if (
p->pPars->nDepthMax != 1 )
221 iRepr = Vec_IntEntry(
p->vXorNodes, 2*k );
222 iNode = Vec_IntEntry(
p->vXorNodes, 2*k+1 );
226 Gia_ManObj(
p->pAig, iNode)->fMark0 = 1;
230 pObjOld->
fMark0 |= (Gia_ObjFanin0(pObjOld)->fMark0 | Gia_ObjFanin1(pObjOld)->fMark0);
234 iRepr = Vec_IntEntry(
p->vXorNodes, 2*k );
235 iNode = Vec_IntEntry(
p->vXorNodes, 2*k+1 );
238 pObjOld = Gia_ManObj(
p->pAig, iNode);
240 if ( Gia_ObjFanin0(pObjOld)->fMark0 == 0 && Gia_ObjFanin1(pObjOld)->fMark0 == 0 )
252 p->nAllProved =
p->nAllDisproved =
p->nAllFailed = 0;
255 iRepr = Vec_IntEntry(
p->vXorNodes, 2*k );
256 iNode = Vec_IntEntry(
p->vXorNodes, 2*k+1 );
257 pReprOld = Gia_ManObj(
p->pAig, iRepr);
258 pObjOld = Gia_ManObj(
p->pAig, iNode);
262 assert( !Gia_ObjProved(
p->pAig, iNode) );
266 assert( iRepr == Gia_ObjRepr(
p->pAig, iNode) );
267 Gia_ObjSetProved(
p->pAig, iNode );
277 if ( iRepr == Gia_ObjRepr(
p->pAig, iNode) )
278 Abc_Print( 1,
"Cec_ManFraClassesUpdate(): Error! Node is not refined!\n" );
286 assert( !Gia_ObjFailed(
p->pAig, iNode) );
287 assert( !Gia_ObjProved(
p->pAig, iNode) );
288 Gia_ObjSetFailed(
p->pAig, iNode );
292 p->nAllProvedS +=
p->nAllProved;
293 p->nAllDisprovedS +=
p->nAllDisproved;
294 p->nAllFailedS +=
p->nAllFailed;
#define ABC_FALLOC(type, num)
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
int Cec_ManSimSimulateRound(Cec_ManSim_t *p, Vec_Ptr_t *vInfoCis, Vec_Ptr_t *vInfoCos)
struct Cec_ManFra_t_ Cec_ManFra_t
struct Cec_ManSim_t_ Cec_ManSim_t
typedefABC_NAMESPACE_HEADER_START struct Cec_ManPat_t_ Cec_ManPat_t
INCLUDES ///.
Vec_Ptr_t * Cec_ManPatCollectPatterns(Cec_ManPat_t *pMan, int nInputs, int nWords)
int Cec_ManFraClassesUpdate_rec(Gia_Obj_t *pObj)
ABC_NAMESPACE_IMPL_START Gia_Man_t * Cec_ManFraSpecReduction(Cec_ManFra_t *p)
DECLARATIONS ///.
int Cec_ManFraClassesUpdate(Cec_ManFra_t *p, Cec_ManSim_t *pSim, Cec_ManPat_t *pPat, Gia_Man_t *pNew)
void Cec_ManFraCreateInfo(Cec_ManSim_t *p, Vec_Ptr_t *vCiInfo, Vec_Ptr_t *vInfo, int nSeries)
void Gia_ManStop(Gia_Man_t *p)
#define Gia_ManForEachAnd(p, pObj, i)
void Gia_ManCreateValueRefs(Gia_Man_t *p)
void Gia_ManSetRegNum(Gia_Man_t *p, int nRegs)
void Gia_ManHashAlloc(Gia_Man_t *p)
Gia_Man_t * Gia_ManStart(int nObjsMax)
FUNCTION DEFINITIONS ///.
struct Gia_Obj_t_ Gia_Obj_t
int Gia_ManHashXor(Gia_Man_t *p, int iLit0, int iLit1)
struct Gia_Man_t_ Gia_Man_t
#define Gia_ManForEachObj1(p, pObj, i)
Gia_Man_t * Gia_ManCleanup(Gia_Man_t *p)
void Gia_ManCleanMark0(Gia_Man_t *p)
int Gia_ManHashAnd(Gia_Man_t *p, int iLit0, int iLit1)
#define Gia_ManForEachCo(p, pObj, i)
void Gia_ManSetPhase(Gia_Man_t *p)
void Gia_ManHashStop(Gia_Man_t *p)
int Gia_ManLevelNum(Gia_Man_t *p)
void Gia_ManCleanMark1(Gia_Man_t *p)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.