summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/aig/gia/gia.h2
-rw-r--r--src/aig/gia/giaIf.c37
-rw-r--r--src/aig/gia/giaJf.c4
-rw-r--r--src/aig/gia/giaMan.c2
-rw-r--r--src/base/abci/abc.c8
5 files changed, 50 insertions, 3 deletions
diff --git a/src/aig/gia/gia.h b/src/aig/gia/gia.h
index a2f6aeb1..919c1031 100644
--- a/src/aig/gia/gia.h
+++ b/src/aig/gia/gia.h
@@ -189,6 +189,7 @@ struct Gps_Par_t_
int fSwitch;
int fCut;
int fNpn;
+ int fLutProf;
};
typedef struct Emb_Par_t_ Emb_Par_t;
@@ -1041,6 +1042,7 @@ extern int Gia_ManHashAndMulti( Gia_Man_t * p, Vec_Int_t * vLits
/*=== giaIf.c ===========================================================*/
extern void Gia_ManPrintMappingStats( Gia_Man_t * p );
extern void Gia_ManPrintPackingStats( Gia_Man_t * p );
+extern void Gia_ManPrintLutStats( Gia_Man_t * p );
extern int Gia_ManLutFaninCount( Gia_Man_t * p );
extern int Gia_ManLutSizeMax( Gia_Man_t * p );
extern int Gia_ManLutNum( Gia_Man_t * p );
diff --git a/src/aig/gia/giaIf.c b/src/aig/gia/giaIf.c
index c4c5fcda..cf4eef5a 100644
--- a/src/aig/gia/giaIf.c
+++ b/src/aig/gia/giaIf.c
@@ -312,6 +312,43 @@ void Gia_ManPrintPackingStats( Gia_Man_t * p )
Abc_Print( 1, "\n" );
}
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Gia_ManPrintNodeProfile( int * pCounts, int nSizeMax )
+{
+ int i, SizeAll = 0, NodeAll = 0;
+ for ( i = 0; i <= nSizeMax; i++ )
+ {
+ SizeAll += i * pCounts[i];
+ NodeAll += pCounts[i];
+ }
+ Abc_Print( 1, "LUT = %d : ", NodeAll );
+ for ( i = 2; i <= nSizeMax; i++ )
+ Abc_Print( 1, "%d=%d %.1f %% ", i, pCounts[i], 100.0*pCounts[i]/NodeAll );
+ Abc_Print( 1, "Ave = %.2f\n", 1.0*SizeAll/(NodeAll ? NodeAll : 1) );
+}
+void Gia_ManPrintLutStats( Gia_Man_t * p )
+{
+ int i, nSizeMax, pCounts[33] = {0};
+ nSizeMax = Gia_ManLutSizeMax( p );
+ if ( nSizeMax > 32 )
+ {
+ Abc_Print( 1, "The max LUT size (%d) is too large.\n", nSizeMax );
+ return;
+ }
+ Gia_ManForEachLut( p, i )
+ pCounts[ Gia_ObjLutSize(p, i) ]++;
+ Gia_ManPrintNodeProfile( pCounts, nSizeMax );
+}
/**Function*************************************************************
diff --git a/src/aig/gia/giaJf.c b/src/aig/gia/giaJf.c
index 4ee846ab..f66e07f3 100644
--- a/src/aig/gia/giaJf.c
+++ b/src/aig/gia/giaJf.c
@@ -781,7 +781,8 @@ void Jf_ManDeriveMapping( Jf_Man_t * p )
Vec_Int_t * vMapping;
Gia_Obj_t * pObj;
int i, k, * pCut;
- vMapping = Vec_IntStart( Gia_ManObjNum(p->pGia) );
+ vMapping = Vec_IntAlloc( Gia_ManObjNum(p->pGia) + p->pPars->Edge + p->pPars->Area * 2 );
+ Vec_IntFill( vMapping, Gia_ManObjNum(p->pGia), 0 );
Gia_ManForEachAnd( p->pGia, pObj, i )
{
if ( Gia_ObjIsBuf(pObj) || Gia_ObjRefNum(p->pGia, pObj) == 0 )
@@ -792,6 +793,7 @@ void Jf_ManDeriveMapping( Jf_Man_t * p )
Vec_IntPush( vMapping, pCut[k] );
Vec_IntPush( vMapping, i );
}
+ assert( Vec_IntSize(vMapping) == Vec_IntCap(vMapping) );
p->pGia->vMapping = vMapping;
// Gia_ManMappingVerify( p->pGia );
}
diff --git a/src/aig/gia/giaMan.c b/src/aig/gia/giaMan.c
index ff48b405..8c5b3d99 100644
--- a/src/aig/gia/giaMan.c
+++ b/src/aig/gia/giaMan.c
@@ -363,6 +363,8 @@ void Gia_ManPrintStats( Gia_Man_t * p, Gps_Par_t * pPars )
Gia_ManPrintNpnClasses( p );
if ( p->vPacking )
Gia_ManPrintPackingStats( p );
+ if ( pPars && pPars->fLutProf && Gia_ManHasMapping(p) )
+ Gia_ManPrintLutStats( p );
if ( p->pPlacement )
Gia_ManPrintPlacement( p );
if ( p->pManTime )
diff --git a/src/base/abci/abc.c b/src/base/abci/abc.c
index 9162f548..1b525041 100644
--- a/src/base/abci/abc.c
+++ b/src/base/abci/abc.c
@@ -25268,7 +25268,7 @@ int Abc_CommandAbc9Ps( Abc_Frame_t * pAbc, int argc, char ** argv )
int c;
memset( pPars, 0, sizeof(Gps_Par_t) );
Extra_UtilGetoptReset();
- while ( ( c = Extra_UtilGetopt( argc, argv, "tpcnh" ) ) != EOF )
+ while ( ( c = Extra_UtilGetopt( argc, argv, "tpcnlh" ) ) != EOF )
{
switch ( c )
{
@@ -25284,6 +25284,9 @@ int Abc_CommandAbc9Ps( Abc_Frame_t * pAbc, int argc, char ** argv )
case 'n':
pPars->fNpn ^= 1;
break;
+ case 'l':
+ pPars->fLutProf ^= 1;
+ break;
case 'h':
goto usage;
default:
@@ -25299,12 +25302,13 @@ int Abc_CommandAbc9Ps( Abc_Frame_t * pAbc, int argc, char ** argv )
return 0;
usage:
- Abc_Print( -2, "usage: &ps [-tpcnh]\n" );
+ Abc_Print( -2, "usage: &ps [-tpcnlh]\n" );
Abc_Print( -2, "\t prints stats of the current AIG\n" );
Abc_Print( -2, "\t-t : toggle printing BMC tents [default = %s]\n", pPars->fTents? "yes": "no" );
Abc_Print( -2, "\t-p : toggle printing switching activity [default = %s]\n", pPars->fSwitch? "yes": "no" );
Abc_Print( -2, "\t-c : toggle printing the size of frontier cut [default = %s]\n", pPars->fCut? "yes": "no" );
Abc_Print( -2, "\t-n : toggle printing NPN classes of functions [default = %s]\n", pPars->fNpn? "yes": "no" );
+ Abc_Print( -2, "\t-l : toggle printing LUT size profile [default = %s]\n", pPars->fLutProf? "yes": "no" );
Abc_Print( -2, "\t-h : print the command usage\n");
return 1;
}