30static unsigned Iso_Nodes[6] = { 0x04892ed6, 0xc2523d7d, 0xdc36cd2e, 0xf2db64f8, 0xde3126bb, 0xdebbdff0 };
31static unsigned Iso_Fanio[2] = { 0x855ee0cf, 0x946e1b5f };
32static unsigned Iso_Compl[2] = { 0x8ba63e50, 0x14d87f02 };
49static inline unsigned Gia_Iso3Node(
Gia_Obj_t * pObj )
51 if ( Gia_ObjIsAnd(pObj) )
52 return Iso_Nodes[Gia_ObjFaninC0(pObj) + Gia_ObjFaninC1(pObj)];
53 if ( Gia_ObjIsCi(pObj) )
55 if ( Gia_ObjIsCo(pObj) )
64 pObj->
Value = Gia_Iso3Node( pObj );
80 pObj->
Value += Vec_IntEntry(vSign, Gia_ObjId(
p, pFanin)) + Iso_Compl[fCompl] + Iso_Fanio[0];
81 pFanin->
Value += Vec_IntEntry(vSign, Gia_ObjId(
p, pObj)) + Iso_Compl[fCompl] + Iso_Fanio[1];
89 if ( Gia_ObjIsAnd(pObj) || Gia_ObjIsCo(pObj) )
90 Gia_Iso3ComputeEdge(
p, pObj, Gia_ObjFanin0(pObj), Gia_ObjFaninC0(pObj), vSign );
91 if ( Gia_ObjIsAnd(pObj) )
92 Gia_Iso3ComputeEdge(
p, pObj, Gia_ObjFanin1(pObj), Gia_ObjFaninC1(pObj), vSign );
112 vSign = Vec_IntAlloc( Gia_ManObjNum(
p) );
114 Vec_IntPush( vSign, pObj->
Value );
121 Vec_IntUniqify( vCopy );
122 nUnique = Vec_IntSize(vCopy);
123 Vec_IntFree( vCopy );
141 int i, Prev = -1, This;
145 for ( i = 0; i < nIterMax; i++ )
147 vSign = Gia_Iso3Save(
p );
149 This = Vec_IntUniqueCount( vSign, 1, NULL );
150 printf(
"Iter %3d : %6d out of %6d ", i, This, Vec_IntSize(vSign) );
151 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
156 Vec_IntFreeP( &vSign );
158 Vec_IntFreeP( &vSign );
185 assert( Gia_ObjIsCo(pObj) );
187 Gia_ObjFanin0(pObj)->Value += pObj->
Value + RandC[Gia_ObjFaninC0(pObj)];
194 Gia_ObjFanin0(pObj)->Value += pObj->
Value + RandC[Gia_ObjFaninC0(pObj)];
195 Gia_ObjFanin1(pObj)->Value += pObj->
Value + RandC[Gia_ObjFaninC1(pObj)];
208 printf(
"Level %d\n", l );
210 printf(
"Obj = %5d. Value = %08x.\n", Gia_ObjId(
p, pObj), pObj->
Value );
212 Vec_WecFree( vLevs );
217 Vec_Int_t * vData = Vec_IntAlloc( Vec_IntSize(vObjs) );
219 Vec_IntPush( vData, pObj->
Value );
224 int i, Common, nLevels = Abc_MinInt( Vec_WecSize(vLevs0), Vec_WecSize(vLevs1) );
227 printf(
"Printing %d shared levels:\n", nLevels );
228 for ( i = 0; i < nLevels; i++ )
230 Vec_Int_t * vLev0 = Vec_WecEntry(vLevs0, i);
231 Vec_Int_t * vLev1 = Vec_WecEntry(vLevs1, i);
234 Vec_IntSort( vData0, 0 );
235 Vec_IntSort( vData1, 0 );
236 Common = Vec_IntTwoCountCommon( vData0, vData1 );
237 printf(
"Level = %3d. One = %6d. Two = %6d. Common = %6d.\n",
238 i, Vec_IntSize(vData0)-Common, Vec_IntSize(vData1)-Common, Common );
239 Vec_IntFree( vData0 );
240 Vec_IntFree( vData1 );
248 Vec_WecFree( vLevs0 );
249 Vec_WecFree( vLevs1 );
unsigned Abc_Random(int fReset)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Vec_Wec_t * Gia_Iso4Gia(Gia_Man_t *p)
void Gia_Iso4Test(Gia_Man_t *p)
int Gia_Iso3Unique(Vec_Int_t *vSign)
void Gia_IsoCompareVecs(Gia_Man_t *pGia0, Vec_Wec_t *vLevs0, Gia_Man_t *pGia1, Vec_Wec_t *vLevs1)
void Gia_Iso3Compute(Gia_Man_t *p, Vec_Int_t *vSign)
void Gia_Iso3Test(Gia_Man_t *p)
void Gia_Iso3Init(Gia_Man_t *p)
Vec_Int_t * Gia_IsoCollectData(Gia_Man_t *p, Vec_Int_t *vObjs)
void Gia_Iso4TestTwo(Gia_Man_t *pGia0, Gia_Man_t *pGia1)
Vec_Wec_t * Gia_ManLevelizeR(Gia_Man_t *p)
struct Gia_Obj_t_ Gia_Obj_t
struct Gia_Man_t_ Gia_Man_t
#define Gia_ManForEachObjVec(vVec, p, pObj, i)
#define Gia_ManForEachObj(p, pObj, i)
MACRO DEFINITIONS ///.
void Gia_ManPrintStats(Gia_Man_t *p, Gps_Par_t *pPars)
#define Vec_WecForEachLevel(vGlob, vVec, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Wec_t_ Vec_Wec_t
INCLUDES ///.