Improving MiniAIG and name manager.

This commit is contained in:
Alan Mishchenko 2021-09-16 21:51:10 -07:00
parent 997e1a2ddc
commit 6ca31c475f
5 changed files with 58 additions and 13 deletions

View File

@ -1527,7 +1527,7 @@ extern void Mf_ManSetDefaultPars( Jf_Par_t * pPars );
extern Gia_Man_t * Mf_ManPerformMapping( Gia_Man_t * pGia, Jf_Par_t * pPars );
extern void * Mf_ManGenerateCnf( Gia_Man_t * pGia, int nLutSize, int fCnfObjIds, int fAddOrCla, int fMapping, int fVerbose );
/*=== giaMini.c ===========================================================*/
extern Gia_Man_t * Gia_ManReadMiniAig( char * pFileName );
extern Gia_Man_t * Gia_ManReadMiniAig( char * pFileName, int fGiaSimple );
extern void Gia_ManWriteMiniAig( Gia_Man_t * pGia, char * pFileName );
extern Gia_Man_t * Gia_ManReadMiniLut( char * pFileName );
extern void Gia_ManWriteMiniLut( Gia_Man_t * pGia, char * pFileName );

View File

@ -59,7 +59,7 @@ int Gia_ObjFromMiniFanin1Copy( Gia_Man_t * pGia, Vec_Int_t * vCopies, Mini_Aig_t
int Lit = Mini_AigNodeFanin1( p, Id );
return Abc_LitNotCond( Vec_IntEntry(vCopies, Abc_Lit2Var(Lit)), Abc_LitIsCompl(Lit) );
}
Gia_Man_t * Gia_ManFromMiniAig( Mini_Aig_t * p, Vec_Int_t ** pvCopies )
Gia_Man_t * Gia_ManFromMiniAig( Mini_Aig_t * p, Vec_Int_t ** pvCopies, int fGiaSimple )
{
Gia_Man_t * pGia, * pTemp;
Vec_Int_t * vCopies;
@ -73,7 +73,10 @@ Gia_Man_t * Gia_ManFromMiniAig( Mini_Aig_t * p, Vec_Int_t ** pvCopies )
vCopies = Vec_IntAlloc( nNodes );
Vec_IntPush( vCopies, 0 );
// iterate through the objects
Gia_ManHashAlloc( pGia );
if ( fGiaSimple )
pGia->fGiaSimple = fGiaSimple;
else
Gia_ManHashAlloc( pGia );
for ( i = 1; i < nNodes; i++ )
{
if ( Mini_AigNodeIsPi( p, i ) )
@ -85,17 +88,19 @@ Gia_Man_t * Gia_ManFromMiniAig( Mini_Aig_t * p, Vec_Int_t ** pvCopies )
else assert( 0 );
Vec_IntPush( vCopies, iGiaLit );
}
Gia_ManHashStop( pGia );
assert( Vec_IntSize(vCopies) == nNodes );
if ( pvCopies )
*pvCopies = vCopies;
else
Vec_IntFree( vCopies );
Gia_ManSetRegNum( pGia, Mini_AigRegNum(p) );
pGia = Gia_ManCleanup( pTemp = pGia );
if ( pvCopies )
Gia_ManDupRemapLiterals( *pvCopies, pTemp );
Gia_ManStop( pTemp );
if ( !fGiaSimple )
{
pGia = Gia_ManCleanup( pTemp = pGia );
if ( pvCopies )
Gia_ManDupRemapLiterals( *pvCopies, pTemp );
Gia_ManStop( pTemp );
}
return pGia;
}
@ -150,7 +155,7 @@ void Abc_FrameGiaInputMiniAig( Abc_Frame_t * pAbc, void * p )
printf( "ABC framework is not initialized by calling Abc_Start()\n" );
Gia_ManStopP( &pAbc->pGiaMiniAig );
Vec_IntFreeP( &pAbc->vCopyMiniAig );
pGia = Gia_ManFromMiniAig( (Mini_Aig_t *)p, &pAbc->vCopyMiniAig );
pGia = Gia_ManFromMiniAig( (Mini_Aig_t *)p, &pAbc->vCopyMiniAig, 0 );
Abc_FrameUpdateGia( pAbc, pGia );
pAbc->pGiaMiniAig = Gia_ManDup( pGia );
// Gia_ManDelete( pGia );
@ -177,10 +182,10 @@ void * Abc_FrameGiaOutputMiniAig( Abc_Frame_t * pAbc )
SeeAlso []
***********************************************************************/
Gia_Man_t * Gia_ManReadMiniAig( char * pFileName )
Gia_Man_t * Gia_ManReadMiniAig( char * pFileName, int fGiaSimple )
{
Mini_Aig_t * p = Mini_AigLoad( pFileName );
Gia_Man_t * pGia = Gia_ManFromMiniAig( p, NULL );
Gia_Man_t * pGia = Gia_ManFromMiniAig( p, NULL, fGiaSimple );
ABC_FREE( pGia->pName );
pGia->pName = Extra_FileNameGeneric( pFileName );
Mini_AigStop( p );
@ -281,7 +286,6 @@ Gia_Man_t * Gia_ManFromMiniLut2( Mini_Lut_t * p, Vec_Int_t ** pvCopies )
Vec_Int_t * vCover = Vec_IntAlloc( 1000 );
Vec_Int_t * vLits = Vec_IntAlloc( 100 );
int i, k, Fan, iGiaLit, nNodes;
int LutSize = Abc_MaxInt( 2, Mini_LutSize(p) );
// get the number of nodes
nNodes = Mini_LutNodeNum(p);
// create ABC network

View File

@ -30176,7 +30176,7 @@ int Abc_CommandAbc9Read( Abc_Frame_t * pAbc, int argc, char ** argv )
if ( fNewReader )
pAig = Gia_FileSimpleRead( FileName, fGiaSimple, NULL );
else if ( fMiniAig )
pAig = Gia_ManReadMiniAig( FileName );
pAig = Gia_ManReadMiniAig( FileName, fGiaSimple || fSkipStrash );
else if ( fMiniAig2 )
pAig = Gia_MiniAigSuperDerive( FileName, fVerbose );
else if ( fMiniLut )

View File

@ -142,6 +142,45 @@ void Abc_NamPrint( Abc_Nam_t * p, char * pFileName )
fclose(pFile);
}
/**Function*************************************************************
Synopsis [Writes into a file and reads from a file.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void Abc_NamSave( Abc_Nam_t * p, char * pFileName )
{
FILE * pFile = fopen( pFileName, "wb" ); int h, i;
if ( pFile == NULL ) { printf( "Count node open input file %s\n", pFileName ); return; }
Vec_IntForEachEntryStart( &p->vInt2Handle, h, i, 1 )
fprintf( pFile, "%s\n", Abc_NamHandleToStr(p, h) );
fclose(pFile);
}
Abc_Nam_t * Abc_NamLoad( char * pFileName )
{
Abc_Nam_t * p;
int fFound, NameId, nLineSize = 1 << 20;
char * pBuffer = ABC_ALLOC( char, nLineSize+1 );
FILE * pFile = fopen( pFileName, "rb" );
if ( pFile == NULL ) { printf( "Count node open output file %s\n", pFileName ); return NULL; }
p = Abc_NamStart( 1000, 20 );
while ( fgets( pBuffer, nLineSize, pFile ) != NULL )
{
pBuffer[strlen(pBuffer)-1] = 0;
NameId = Abc_NamStrFindOrAdd( p, pBuffer, &fFound );
assert( !fFound );
}
assert( NameId+1 == Abc_NamObjNumMax(p) );
fclose( pFile );
ABC_FREE( pBuffer );
return p;
}
/**Function*************************************************************
Synopsis [References the manager.]

View File

@ -53,6 +53,8 @@ typedef struct Abc_Nam_t_ Abc_Nam_t;
extern Abc_Nam_t * Abc_NamStart( int nObjs, int nAveSize );
extern void Abc_NamStop( Abc_Nam_t * p );
extern void Abc_NamPrint( Abc_Nam_t * p, char * pFileName );
extern void Abc_NamSave( Abc_Nam_t * p, char * pFileName );
extern Abc_Nam_t * Abc_NamLoad( char * pFileName );
extern Abc_Nam_t * Abc_NamRef( Abc_Nam_t * p );
extern void Abc_NamDeref( Abc_Nam_t * p );
extern int Abc_NamObjNumMax( Abc_Nam_t * p );