33 if ( !Ivy_IsComplement(p0) || !Ivy_IsComplement(p1) )
37 if ( !Ivy_ObjIsAnd(p0) || !Ivy_ObjIsAnd(p1) )
39 if ( Ivy_ObjFanin0(p0) != Ivy_ObjFanin0(p1) || Ivy_ObjFanin1(p0) != Ivy_ObjFanin1(p1) )
41 if ( Ivy_ObjFaninC0(p0) == Ivy_ObjFaninC0(p1) || Ivy_ObjFaninC1(p0) == Ivy_ObjFaninC1(p1) )
43 *ppFan0 = Ivy_ObjChild0(p0);
44 *ppFan1 = Ivy_ObjChild1(p0);
90 if ( p0 == Ivy_Not(p1) )
91 return Ivy_Not(
p->pConst1);
92 if ( Ivy_Regular(p0) ==
p->pConst1 )
93 return p0 ==
p->pConst1 ? p1 : Ivy_Not(
p->pConst1);
94 if ( Ivy_Regular(p1) ==
p->pConst1 )
95 return p1 ==
p->pConst1 ? p0 : Ivy_Not(
p->pConst1);
144 return Ivy_Not(
Ivy_And(
p, Ivy_Not(p0), Ivy_Not(p1) ) );
160 Ivy_Obj_t * pTempA1, * pTempA2, * pTempB1, * pTempB2, * pTemp;
163 if ( p0 == Ivy_Not(p1) )
169 if ( pTempA1 && pTempA2 )
172 if ( pTemp )
return Ivy_Not(pTemp);
174 Count0 = (pTempA1 != NULL) + (pTempA2 != NULL);
178 if ( pTempB1 && pTempB2 )
181 if ( pTemp )
return pTemp;
183 Count1 = (pTempB1 != NULL) + (pTempB2 != NULL);
185 if ( Count0 >= Count1 )
187 pTempA1 = pTempA1? pTempA1 :
Ivy_And(
p, pC, p1);
188 pTempA2 = pTempA2? pTempA2 :
Ivy_And(
p, Ivy_Not(pC), p0);
189 return Ivy_Or(
p, pTempA1, pTempA2 );
191 pTempB1 = pTempB1? pTempB1 :
Ivy_And(
p, pC, Ivy_Not(p1));
192 pTempB2 = pTempB2? pTempB2 :
Ivy_And(
p, Ivy_Not(pC), Ivy_Not(p0));
193 return Ivy_Not(
Ivy_Or(
p, pTempB1, pTempB2 ) );
211 return Ivy_Or(
p,
Ivy_Or(
p,
Ivy_And(
p, pA, pB),
Ivy_And(
p, pA, pC)),
Ivy_And(
p, pB, pC) );
231 pObj2 =
Ivy_Multi_rec(
p, ppObjs + nObjs/2, nObjs - nObjs/2, Type );
232 return Ivy_Oper(
p, pObj1, pObj2, Type );
267 assert( vPairs->nSize > 0 );
268 assert( vPairs->nSize % 2 == 0 );
270 for ( i = 0; i < vPairs->nSize; i += 2 )
272 vPairs->nSize = vPairs->nSize/2;
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
Ivy_Obj_t * Ivy_Multi_rec(Ivy_Man_t *p, Ivy_Obj_t **ppObjs, int nObjs, Ivy_Type_t Type)
Ivy_Obj_t * Ivy_Multi(Ivy_Man_t *p, Ivy_Obj_t **pArgs, int nArgs, Ivy_Type_t Type)
Ivy_Obj_t * Ivy_Mux(Ivy_Man_t *p, Ivy_Obj_t *pC, Ivy_Obj_t *p1, Ivy_Obj_t *p0)
Ivy_Obj_t * Ivy_Latch(Ivy_Man_t *p, Ivy_Obj_t *pObj, Ivy_Init_t Init)
Ivy_Obj_t * Ivy_Exor(Ivy_Man_t *p, Ivy_Obj_t *p0, Ivy_Obj_t *p1)
Ivy_Obj_t * Ivy_Oper(Ivy_Man_t *p, Ivy_Obj_t *p0, Ivy_Obj_t *p1, Ivy_Type_t Type)
FUNCTION DEFINITIONS ///.
Ivy_Obj_t * Ivy_Maj(Ivy_Man_t *p, Ivy_Obj_t *pA, Ivy_Obj_t *pB, Ivy_Obj_t *pC)
Ivy_Obj_t * Ivy_Or(Ivy_Man_t *p, Ivy_Obj_t *p0, Ivy_Obj_t *p1)
Ivy_Obj_t * Ivy_Miter(Ivy_Man_t *p, Vec_Ptr_t *vPairs)
Ivy_Obj_t * Ivy_And(Ivy_Man_t *p, Ivy_Obj_t *p0, Ivy_Obj_t *p1)
typedefABC_NAMESPACE_HEADER_START struct Ivy_Man_t_ Ivy_Man_t
INCLUDES ///.
Ivy_Obj_t * Ivy_CanonAnd(Ivy_Man_t *p, Ivy_Obj_t *p0, Ivy_Obj_t *p1)
Ivy_Obj_t * Ivy_TableLookup(Ivy_Man_t *p, Ivy_Obj_t *pObj)
FUNCTION DEFINITIONS ///.
Ivy_Obj_t * Ivy_CanonLatch(Ivy_Man_t *p, Ivy_Obj_t *pObj, Ivy_Init_t Init)
struct Ivy_Obj_t_ Ivy_Obj_t
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.