mirror of https://github.com/YosysHQ/abc.git
Merge pull request #538 from marcelwa/fraig-store-restore-pi-order
fraig_store: restore the PI order when the name comparison fails
This commit is contained in:
commit
a954df2892
|
|
@ -670,13 +670,29 @@ int Abc_NtkFraigStore( Abc_Ntk_t * pNtkAdd )
|
||||||
extern int Abc_NodeCompareCiCo( Abc_Ntk_t * pNtkOld, Abc_Ntk_t * pNtkNew );
|
extern int Abc_NodeCompareCiCo( Abc_Ntk_t * pNtkOld, Abc_Ntk_t * pNtkNew );
|
||||||
if ( !Abc_NodeCompareCiCo(pNtk, (Abc_Ntk_t *)Vec_PtrEntry(vStore, 0)) )
|
if ( !Abc_NodeCompareCiCo(pNtk, (Abc_Ntk_t *)Vec_PtrEntry(vStore, 0)) )
|
||||||
{
|
{
|
||||||
|
// Abc_NtkCompareSignals() sorts the PIs/POs/boxes of both networks by name as a
|
||||||
|
// side effect, which is what makes the comparison meaningful when the two do use
|
||||||
|
// the same names. When they do not, the comparison fails, the store is reset and
|
||||||
|
// this network is kept -- so the sort has to be undone here. Otherwise the stored
|
||||||
|
// network is a permutation of the one the caller read in, and everything after it
|
||||||
|
// is off by that permutation with nothing to indicate it.
|
||||||
|
Vec_Ptr_t * vPis = Vec_PtrDup( pNtk->vPis );
|
||||||
|
Vec_Ptr_t * vPos = Vec_PtrDup( pNtk->vPos );
|
||||||
|
Vec_Ptr_t * vBoxes = Vec_PtrDup( pNtk->vBoxes );
|
||||||
// reorder PIs of pNtk2 according to pNtk1
|
// reorder PIs of pNtk2 according to pNtk1
|
||||||
if ( !Abc_NtkCompareSignals( pNtk, (Abc_Ntk_t *)Vec_PtrEntry(vStore, 0), 1, 1 ) )
|
if ( !Abc_NtkCompareSignals( pNtk, (Abc_Ntk_t *)Vec_PtrEntry(vStore, 0), 1, 1 ) )
|
||||||
{
|
{
|
||||||
|
Vec_PtrFree( pNtk->vPis ); pNtk->vPis = vPis; vPis = NULL;
|
||||||
|
Vec_PtrFree( pNtk->vPos ); pNtk->vPos = vPos; vPos = NULL;
|
||||||
|
Vec_PtrFree( pNtk->vBoxes ); pNtk->vBoxes = vBoxes; vBoxes = NULL;
|
||||||
|
Abc_NtkOrderCisCos( pNtk );
|
||||||
printf( "Trying to store the network with different primary inputs.\n" );
|
printf( "Trying to store the network with different primary inputs.\n" );
|
||||||
printf( "The previously stored networks are deleted and this one is added.\n" );
|
printf( "The previously stored networks are deleted and this one is added.\n" );
|
||||||
Abc_NtkFraigStoreClean();
|
Abc_NtkFraigStoreClean();
|
||||||
}
|
}
|
||||||
|
if ( vPis ) Vec_PtrFree( vPis );
|
||||||
|
if ( vPos ) Vec_PtrFree( vPos );
|
||||||
|
if ( vBoxes ) Vec_PtrFree( vBoxes );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Vec_PtrPush( vStore, pNtk );
|
Vec_PtrPush( vStore, pNtk );
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue