48 Gia_Obj_t * pObj, * pFan0, * pFan1, * pFanC;
55 pNew->
pName = Abc_UtilStrsav(
p->pName );
56 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
59 Gia_ManConst0(
p)->Value = 0;
62 pObj->
Value = Gia_ManAppendCi( pNew );
67 if ( !
Gia_ObjIsMuxType(pObj) || (Gia_ObjRefNum(
p, Gia_ObjFanin0(pObj)) > 1 && Gia_ObjRefNum(
p, Gia_ObjFanin1(pObj)) > 1) )
74 pObj->
Value =
Gia_ManHashMuxReal( pNew, Gia_ObjLitCopy(
p, Gia_ObjToLit(
p, pFanC)), Gia_ObjLitCopy(
p, Gia_ObjToLit(
p, pFan1)), Gia_ObjLitCopy(
p, Gia_ObjToLit(
p, pFan0)) );
80 pObj->
Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
102 if ( Gia_ObjIsTravIdCurrentId(
p, Id) )
104 Gia_ObjSetTravIdCurrentId(
p, Id);
105 if ( Gia_ObjRefNumId(
p, Id) > 1 )
107 Vec_IntPush( vLeaves, Id );
110 pObj = Gia_ManObj(
p, Id );
111 if ( Gia_ObjIsCi(pObj) )
113 Vec_IntPush( vLeaves, Id );
116 assert( Gia_ObjIsAnd(pObj) );
119 if ( Gia_ObjIsMuxId(
p, Id) )
121 Vec_IntPush( vMffc, Id );
126 assert( Gia_ObjIsAnd(pObj) );
127 Vec_IntClear( vMffc );
128 Vec_IntClear( vLeaves );
132 if ( Gia_ObjIsMuxId(
p, Id) )
134 Vec_IntPush( vMffc, Id );
152 printf(
"MFFC %d has %d nodes and %d leaves:\n", Id, Vec_IntSize(vMffc), Vec_IntSize(vLeaves) );
155 printf(
"Node %2d : ", Vec_IntSize(vMffc) - 1 - i );
160 printf(
"Leaf %2d : ", i );
183 vMffc = Vec_IntAlloc( 10 );
184 vLeaves = Vec_IntAlloc( 10 );
189 if ( Gia_ObjRefNumId(
p, i) == 1 )
196 if ( Gia_ObjRefNumId(
p, Gia_ObjFaninId0p(
p, pObj)) > 1 )
202 Vec_IntFree( vMffc );
203 Vec_IntFree( vLeaves );
#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 Gia_ManTisCollectMffc(Gia_Man_t *p, int Id, Vec_Int_t *vMffc, Vec_Int_t *vLeaves)
void Gia_ManTisTest(Gia_Man_t *pInit)
void Gia_ManTisCollectMffc_rec(Gia_Man_t *p, int Id, Vec_Int_t *vMffc, Vec_Int_t *vLeaves)
void Gia_ManTisPrintMffc(Gia_Man_t *p, int Id, Vec_Int_t *vMffc, Vec_Int_t *vLeaves)
ABC_NAMESPACE_IMPL_START Gia_Man_t * Gia_ManTisDupMuxes(Gia_Man_t *p)
DECLARATIONS ///.
void Gia_ManStop(Gia_Man_t *p)
void Gia_ManHashStart(Gia_Man_t *p)
Gia_Obj_t * Gia_ObjRecognizeMux(Gia_Obj_t *pNode, Gia_Obj_t **ppNodeT, Gia_Obj_t **ppNodeE)
#define Gia_ManForEachAnd(p, pObj, i)
int Gia_ManHashMuxReal(Gia_Man_t *p, int iLitC, int iLit1, int iLit0)
void Gia_ManSetRegNum(Gia_Man_t *p, int nRegs)
#define Gia_ManForEachObjVecReverse(vVec, p, pObj, i)
Gia_Man_t * Gia_ManStart(int nObjsMax)
FUNCTION DEFINITIONS ///.
struct Gia_Obj_t_ Gia_Obj_t
int Gia_ObjIsMuxType(Gia_Obj_t *pNode)
void Gia_ObjPrint(Gia_Man_t *p, Gia_Obj_t *pObj)
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_ObjRecognizeExor(Gia_Obj_t *pObj, Gia_Obj_t **ppFan0, Gia_Obj_t **ppFan1)
void Gia_ManCreateRefs(Gia_Man_t *p)
int Gia_ManHashAnd(Gia_Man_t *p, int iLit0, int iLit1)
void Gia_ManIncrementTravId(Gia_Man_t *p)
int Gia_ManHashXorReal(Gia_Man_t *p, int iLit0, int iLit1)
#define Gia_ManForEachCo(p, pObj, i)
#define Gia_ManForEachCi(p, pObj, i)
void Gia_ManHashStop(Gia_Man_t *p)