30#define AGI_PI ABC_CONST(0xFFFFFFFF00000000)
31#define AGI_RO ABC_CONST(0xFFFFFFFE00000000)
32#define AGI_PO ABC_CONST(0xFFFFFFFD00000000)
33#define AGI_RI ABC_CONST(0xFFFFFFFC00000000)
34#define AGI_C0 ABC_CONST(0xFFFFFFFBFFFFFFFA)
35#define AGI_M0 ABC_CONST(0x00000000FFFFFFFF)
36#define AGI_M1 ABC_CONST(0xFFFFFFFF00000000)
58static inline int Agi_ManObjNum(
Agi_Man_t *
p ) {
return p->nObjs; }
59static inline int Agi_ManCiNum(
Agi_Man_t *
p ) {
return Vec_IntSize( &
p->vCis ); }
60static inline int Agi_ManCoNum(
Agi_Man_t *
p ) {
return Vec_IntSize( &
p->vCos ); }
61static inline int Agi_ManNodeNum(
Agi_Man_t *
p ) {
return p->nNodes; }
63static inline unsigned Agi_ObjLit0(
Agi_Man_t *
p,
int i ) {
return (
unsigned)(
p->pObjs[i]); }
64static inline unsigned Agi_ObjLit1(
Agi_Man_t *
p,
int i ) {
return (
unsigned)(
p->pObjs[i] >> 32); }
65static inline unsigned Agi_ObjLit2(
Agi_Man_t *
p,
int i ) {
return p->pThird[i]; }
66static inline int Agi_ObjVar0(
Agi_Man_t *
p,
int i ) {
return Agi_ObjLit0(
p, i) >> 1; }
67static inline int Agi_ObjVar1(
Agi_Man_t *
p,
int i ) {
return Agi_ObjLit1(
p, i) >> 1; }
68static inline int Agi_ObjVar2(
Agi_Man_t *
p,
int i ) {
return Agi_ObjLit2(
p, i) >> 1; }
69static inline void Agi_ObjSetLit0(
Agi_Man_t *
p,
int i,
unsigned l ) {
p->pObjs[i] = (
p->pObjs[i] &
AGI_M1) | (
word)l; }
70static inline void Agi_ObjSetLit1(
Agi_Man_t *
p,
int i,
unsigned l ) {
p->pObjs[i] = (
p->pObjs[i] &
AGI_M0) | ((
word)l << 32); }
71static inline void Agi_ObjSetLit2(
Agi_Man_t *
p,
int i,
unsigned l ) {
p->pThird[i] = l; }
73static inline int Agi_ObjIsC0(
Agi_Man_t *
p,
int i ) {
return (i == 0); }
80static inline int Agi_ObjIsNode(
Agi_Man_t *
p,
int i ) {
return p->pObjs[i] <
AGI_C0; }
81static inline int Agi_ObjIsBuf(
Agi_Man_t *
p,
int i ) {
return Agi_ObjLit0(
p, i) == Agi_ObjLit1(
p, i); }
82static inline int Agi_ObjIsAnd(
Agi_Man_t *
p,
int i ) {
return Agi_ObjIsNode(
p, i) && Agi_ObjLit0(
p, i) < Agi_ObjLit1(
p, i); }
83static inline int Agi_ObjIsXor(
Agi_Man_t *
p,
int i ) {
return Agi_ObjIsNode(
p, i) && Agi_ObjLit0(
p, i) > Agi_ObjLit1(
p, i); }
84static inline int Agi_ObjIsMux(
Agi_Man_t *
p,
int i ) {
return Agi_ObjIsAnd(
p, i) && ~Agi_ObjLit2(
p, i); }
85static inline int Agi_ObjIsMaj(
Agi_Man_t *
p,
int i ) {
return Agi_ObjIsXor(
p, i) && ~Agi_ObjLit2(
p, i); }
87static inline int Agi_ManAppendObj(
Agi_Man_t *
p )
92static inline int Agi_ManAppendCi(
Agi_Man_t *
p )
94 int iObj = Agi_ManAppendObj(
p );
96 Vec_IntPush( &
p->vCis, iObj );
97 return Abc_Var2Lit( iObj, 0 );
99static inline int Agi_ManAppendCo(
Agi_Man_t *
p,
int iLit0 )
101 int iObj = Agi_ManAppendObj(
p );
103 Vec_IntPush( &
p->vCos, iObj );
104 return Abc_Var2Lit( iObj, 0 );
106static inline int Agi_ManAppendAnd(
Agi_Man_t *
p,
int iLit0,
int iLit1 )
108 int iObj = Agi_ManAppendObj(
p );
110 p->pObjs[iObj] = ((
word)iLit1 << 32) | (
word)iLit0;
112 return Abc_Var2Lit( iObj, 0 );
115#define Agi_ManForEachCi( p, iCi, i ) Vec_IntForEachEntry( &p->vCis, iCi, i )
116#define Agi_ManForEachCo( p, iCo, i ) Vec_IntForEachEntry( &p->vCos, iCo, i )
117#define Agi_ManForEachObj( p, i ) for ( i = 0; i < Agi_ManObjNum(p); i++ )
118#define Agi_ManForEachObj1( p, i ) for ( i = 1; i < Agi_ManObjNum(p); i++ )
119#define Agi_ManForEachNode( p, i ) for ( i = 1; i < Agi_ManObjNum(p); i++ ) if ( !Agi_ObjIsNode(p, i) ) {} else
139 nCap = Abc_MaxInt( nCap, 16 );
175 if ( Gia_ObjIsAnd(pObj) )
176 pObj->
Value = Agi_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
177 else if ( Gia_ObjIsCo(pObj) )
178 pObj->
Value = Agi_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
179 else if ( Gia_ObjIsCi(pObj) )
180 pObj->
Value = Agi_ManAppendCi( pNew );
198 if (
p->pTravIds[i] ==
p->nTravIds )
200 p->pTravIds[i] =
p->nTravIds;
201 if ( Agi_ObjIsCi(
p, i) )
217 printf(
"Nodes with small support %d (out of %d)\n", Counter, Agi_ManNodeNum(
p) );
218 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
#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 ///.
#define AGI_PI
DECLARATIONS ///.
#define Agi_ManForEachNode(p, i)
int Agi_ManSuppSizeOne(Agi_Man_t *p, int i)
Agi_Man_t * Agi_ManAlloc(int nCap)
FUNCTION DEFINITIONS ///.
void Agi_ManTest(Gia_Man_t *pGia)
struct Agi_Man_t_ Agi_Man_t
int Agi_ManSuppSize_rec(Agi_Man_t *p, int i)
int Agi_ManSuppSizeTest(Agi_Man_t *p)
void Agi_ManFree(Agi_Man_t *p)
Agi_Man_t * Agi_ManFromGia(Gia_Man_t *p)
int Gia_ManSuppSizeTest(Gia_Man_t *p)
struct Gia_Obj_t_ Gia_Obj_t
struct Gia_Man_t_ Gia_Man_t
#define Gia_ManForEachObj1(p, pObj, i)
unsigned __int64 word
DECLARATIONS ///.