47 if ( Gia_ObjIsTravIdCurrent(
p, pObj) )
49 Gia_ObjSetTravIdCurrent(
p, pObj);
51 if ( Gia_ObjIsPi(
p, pObj) || Gia_ObjIsConst0(pObj) )
53 if ( Gia_ObjIsCo(pObj) )
55 if ( Gia_ObjIsCi(pObj) )
57 assert( Gia_ObjIsAnd(pObj) );
85 Gia_ObjSetTravIdCurrent(
p, pObj );
104 assert( Gia_ObjIsAnd(pObj) );
128 pNew->
pName = Abc_UtilStrsav(
p->pName );
129 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
134 Gia_ManConst0(
p)->Value = 0;
136 pObj->
Value = Gia_ManAppendCi( pNew );
139 pObj->
Value = Abc_LitNotCond( Gia_ManAppendCi(pNew), pObj->
fPhase );
145 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
148 pObj->
Value = Gia_ObjFanin0Copy(pObj);
154 if ( Gia_ObjIsAnd(pObj) )
160 Gia_ManAppendCo( pNew, Abc_LitNotCond( pObj->
Value, pObj->
fPhase ) );
188 if (
p->vFlopClasses )
191 vObjClasses = Vec_IntAlloc( Gia_ManObjNum(
p) );
192 for ( i = 0; i < Gia_ManObjNum(
p); i++ )
193 Vec_IntPush( vObjClasses, -1 );
195 Vec_IntWriteEntry( vObjClasses, Gia_ObjId(
p, pObj), Vec_IntEntry(
p->vFlopClasses, i) );
196 vFlopClasses = Vec_IntAlloc( Gia_ManRegNum(
p) );
205 if ( Gia_ObjIsTravIdPrevious(
p, pObj) )
206 Gia_ObjSetTravIdCurrent(
p, pObj);
212 if ( Gia_ObjIsTravIdCurrent(
p, Gia_ObjFanin0(pObj)) && Gia_ObjIsTravIdCurrent(
p, Gia_ObjFanin1(pObj)) )
214 if ( vObjClasses && Vec_IntEntry(vObjClasses, Gia_ObjFaninId0(pObj, i)) != Vec_IntEntry(vObjClasses, Gia_ObjFaninId1(pObj, i)) )
217 Vec_IntWriteEntry( vObjClasses, Gia_ObjId(
p, pObj), Vec_IntEntry(vObjClasses, Gia_ObjFaninId0(pObj, i)) );
218 Gia_ObjSetTravIdCurrent(
p, pObj);
223 Gia_ObjSetTravIdCurrent(
p, pObj);
225 vCut = Vec_PtrAlloc( 1000 );
229 if ( Gia_ObjIsTravIdPrevious(
p, pObj) )
231 if ( (Gia_ObjIsCo(pObj) || Gia_ObjIsAnd(pObj)) && Gia_ObjIsTravIdPrevious(
p, Gia_ObjFanin0(pObj)) )
234 Vec_IntPush( vFlopClasses, Vec_IntEntry(vObjClasses, Gia_ObjFaninId0(pObj, i)) );
235 Vec_PtrPush( vCut, Gia_ObjFanin0(pObj) );
236 Gia_ObjSetTravIdCurrent(
p, Gia_ObjFanin0(pObj) );
238 if ( Gia_ObjIsAnd(pObj) && Gia_ObjIsTravIdPrevious(
p, Gia_ObjFanin1(pObj)) )
241 Vec_IntPush( vFlopClasses, Vec_IntEntry(vObjClasses, Gia_ObjFaninId1(pObj, i)) );
242 Vec_PtrPush( vCut, Gia_ObjFanin1(pObj) );
243 Gia_ObjSetTravIdCurrent(
p, Gia_ObjFanin1(pObj) );
246 assert( vFlopClasses == NULL || Vec_IntSize(vFlopClasses) == Vec_PtrSize(vCut) );
251 Vec_IntFree( vObjClasses );
270 int i, nRegFixed, nRegMoves = 1;
273 for ( i = 0; i < nMaxIters && nRegMoves > 0; i++ )
279 printf(
"%2d : And = %6d. Reg = %5d. Unret = %5d. Move = %6d. ",
280 i + 1, Gia_ManAndNum(pTemp), Gia_ManRegNum(pTemp), nRegFixed, nRegMoves );
281 ABC_PRT(
"Time", Abc_Clock() - clk );
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Gia_Man_t * Gia_ManRetimeForwardOne(Gia_Man_t *p, int *pnRegFixed, int *pnRegMoves)
Gia_Man_t * Gia_ManRetimeDupForward(Gia_Man_t *p, Vec_Ptr_t *vCut)
void Gia_ManRetimeDup_rec(Gia_Man_t *pNew, Gia_Obj_t *pObj)
void Gia_ManMarkAutonomous(Gia_Man_t *p)
ABC_NAMESPACE_IMPL_START int Gia_ManMarkAutonomous_rec(Gia_Man_t *p, Gia_Obj_t *pObj)
DECLARATIONS ///.
Gia_Man_t * Gia_ManRetimeForward(Gia_Man_t *p, int nMaxIters, int fVerbose)
void Gia_ManStop(Gia_Man_t *p)
#define Gia_ManForEachRo(p, pObj, i)
#define Gia_ManForEachPo(p, pObj, i)
#define Gia_ManForEachAnd(p, pObj, i)
void Gia_ManSetRegNum(Gia_Man_t *p, int nRegs)
void Gia_ManHashAlloc(Gia_Man_t *p)
#define Gia_ManForEachPi(p, pObj, i)
Gia_Man_t * Gia_ManStart(int nObjsMax)
FUNCTION DEFINITIONS ///.
struct Gia_Obj_t_ Gia_Obj_t
void Gia_ManFillValue(Gia_Man_t *p)
struct Gia_Man_t_ Gia_Man_t
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)
void Gia_ManIncrementTravId(Gia_Man_t *p)
#define Gia_ManForEachObj(p, pObj, i)
MACRO DEFINITIONS ///.
#define Gia_ManForEachCo(p, pObj, i)
#define Gia_ManForEachRiRo(p, pObjRi, pObjRo, i)
void Gia_ManSetPhase(Gia_Man_t *p)
void Gia_ManHashStop(Gia_Man_t *p)
#define Gia_ManForEachRi(p, pObj, i)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.