mirror of https://github.com/YosysHQ/abc.git
fix Segfault in retime command
This commit is contained in:
parent
3592078ddb
commit
0f7d05d531
|
|
@ -140,6 +140,9 @@ void Abc_SclTimeNtkPrint( SC_Man * p, int fShowAll, int fPrintPath )
|
||||||
Abc_Obj_t * pObj, * pPivot = Abc_SclFindCriticalCo( p, &fRise );
|
Abc_Obj_t * pObj, * pPivot = Abc_SclFindCriticalCo( p, &fRise );
|
||||||
float maxDelay = Abc_SclObjTimeOne( p, pPivot, fRise );
|
float maxDelay = Abc_SclObjTimeOne( p, pPivot, fRise );
|
||||||
p->ReportDelay = maxDelay;
|
p->ReportDelay = maxDelay;
|
||||||
|
// used for Floyds cycle detection algorithm
|
||||||
|
unsigned int tortoiseIndex = 0;
|
||||||
|
int tortoiseStep = 0;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
printf( "WireLoad = \"%s\" ", p->pWLoadUsed ? p->pWLoadUsed->pName : "none" );
|
printf( "WireLoad = \"%s\" ", p->pWLoadUsed ? p->pWLoadUsed->pName : "none" );
|
||||||
|
|
@ -197,7 +200,7 @@ void Abc_SclTimeNtkPrint( SC_Man * p, int fShowAll, int fPrintPath )
|
||||||
while ( pObj && Abc_ObjIsNode(pObj) )
|
while ( pObj && Abc_ObjIsNode(pObj) )
|
||||||
{
|
{
|
||||||
i++;
|
i++;
|
||||||
nLength = Abc_MaxInt( nLength, Abc_SclObjCell(pObj) ? strlen(Abc_SclObjCell(pObj)->pName) : 2 /* strlen("pi") */ );
|
nLength = Abc_MaxInt( nLength, strlen(Abc_SclObjCell(pObj)->pName) );
|
||||||
pObj = Abc_SclFindMostCriticalFanin( p, &fRise, pObj );
|
pObj = Abc_SclFindMostCriticalFanin( p, &fRise, pObj );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -225,6 +228,14 @@ void Abc_SclTimeNtkPrint( SC_Man * p, int fShowAll, int fPrintPath )
|
||||||
Vec_PtrPush( vPath, pObj );
|
Vec_PtrPush( vPath, pObj );
|
||||||
pPrev = pObj;
|
pPrev = pObj;
|
||||||
pObj = Abc_SclFindMostCriticalFanin( p, &fRise, pObj );
|
pObj = Abc_SclFindMostCriticalFanin( p, &fRise, pObj );
|
||||||
|
|
||||||
|
// move the tortoise at half the speed (trailing)
|
||||||
|
tortoiseStep = (tortoiseStep + 1) % 2;
|
||||||
|
tortoiseIndex += tortoiseStep;
|
||||||
|
// if they see the same element, we are in a loop
|
||||||
|
if(vPath->pArray[tortoiseIndex] == pObj) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Vec_PtrForEachEntryReverse( Abc_Obj_t *, vPath, pObj, i )
|
Vec_PtrForEachEntryReverse( Abc_Obj_t *, vPath, pObj, i )
|
||||||
{
|
{
|
||||||
|
|
@ -913,3 +924,4 @@ void Abc_SclPrintBuffers( SC_Lib * pLib, Abc_Ntk_t * pNtk, int fVerbose )
|
||||||
|
|
||||||
ABC_NAMESPACE_IMPL_END
|
ABC_NAMESPACE_IMPL_END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue