summaryrefslogtreecommitdiffstats
path: root/src/opt/dar/darMan.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/opt/dar/darMan.c')
-rw-r--r--src/opt/dar/darMan.c174
1 files changed, 174 insertions, 0 deletions
diff --git a/src/opt/dar/darMan.c b/src/opt/dar/darMan.c
new file mode 100644
index 00000000..5a3e0687
--- /dev/null
+++ b/src/opt/dar/darMan.c
@@ -0,0 +1,174 @@
+/**CFile****************************************************************
+
+ FileName [darMan.c]
+
+ SystemName [ABC: Logic synthesis and verification system.]
+
+ PackageName [DAG-aware AIG rewriting.]
+
+ Synopsis [AIG manager.]
+
+ Author [Alan Mishchenko]
+
+ Affiliation [UC Berkeley]
+
+ Date [Ver. 1.0. Started - April 28, 2007.]
+
+ Revision [$Id: darMan.c,v 1.00 2007/04/28 00:00:00 alanmi Exp $]
+
+***********************************************************************/
+
+#include "darInt.h"
+
+ABC_NAMESPACE_IMPL_START
+
+////////////////////////////////////////////////////////////////////////
+/// DECLARATIONS ///
+////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////////
+/// FUNCTION DEFINITIONS ///
+////////////////////////////////////////////////////////////////////////
+
+/**Function*************************************************************
+
+ Synopsis [Starts the rewriting manager.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Dar_Man_t * Dar_ManStart( Aig_Man_t * pAig, Dar_RwrPar_t * pPars )
+{
+ Dar_Man_t * p;
+ Aig_ManCleanData( pAig );
+ p = ABC_ALLOC( Dar_Man_t, 1 );
+ memset( p, 0, sizeof(Dar_Man_t) );
+ p->pPars = pPars;
+ p->pAig = pAig;
+ p->vCutNodes = Vec_PtrAlloc( 1000 );
+ p->pMemCuts = Aig_MmFixedStart( p->pPars->nCutsMax * sizeof(Dar_Cut_t), 1024 );
+ p->vLeavesBest = Vec_PtrAlloc( 4 );
+ return p;
+}
+
+/**Function*************************************************************
+
+ Synopsis [Stops the rewriting manager.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Dar_ManStop( Dar_Man_t * p )
+{
+ if ( p->pPars->fVerbose )
+ Dar_ManPrintStats( p );
+ if ( p->vCutNodes )
+ Vec_PtrFree( p->vCutNodes );
+ if ( p->pMemCuts )
+ Aig_MmFixedStop( p->pMemCuts, 0 );
+ if ( p->vLeavesBest )
+ Vec_PtrFree( p->vLeavesBest );
+ ABC_FREE( p );
+}
+
+/**Function*************************************************************
+
+ Synopsis [Stops the AIG manager.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Dar_ManPrintStats( Dar_Man_t * p )
+{
+ unsigned pCanons[222];
+ int Gain, i;
+ extern void Kit_DsdPrintFromTruth( unsigned * pTruth, int nVars );
+
+ Gain = p->nNodesInit - Aig_ManNodeNum(p->pAig);
+ printf( "Tried = %8d. Beg = %8d. End = %8d. Gain = %6d. (%6.2f %%). Cut mem = %d Mb\n",
+ p->nNodesTried, p->nNodesInit, Aig_ManNodeNum(p->pAig), Gain, 100.0*Gain/p->nNodesInit, p->nCutMemUsed );
+ printf( "Cuts = %8d. Tried = %8d. Used = %8d. Bad = %5d. Skipped = %5d. Ave = %.2f.\n",
+ p->nCutsAll, p->nCutsTried, p->nCutsUsed, p->nCutsBad, p->nCutsSkipped,
+ (float)p->nCutsUsed/Aig_ManNodeNum(p->pAig) );
+
+ printf( "Bufs = %5d. BufMax = %5d. BufReplace = %6d. BufFix = %6d. Levels = %4d.\n",
+ Aig_ManBufNum(p->pAig), p->pAig->nBufMax, p->pAig->nBufReplaces, p->pAig->nBufFixes, Aig_ManLevels(p->pAig) );
+ ABC_PRT( "Cuts ", p->timeCuts );
+ ABC_PRT( "Eval ", p->timeEval );
+ ABC_PRT( "Other ", p->timeOther );
+ ABC_PRT( "TOTAL ", p->timeTotal );
+
+ if ( !p->pPars->fVeryVerbose )
+ return;
+ Dar_LibReturnCanonicals( pCanons );
+ for ( i = 0; i < 222; i++ )
+ {
+ if ( p->ClassGains[i] == 0 && p->ClassTimes[i] == 0 )
+ continue;
+ printf( "%3d : ", i );
+ printf( "G = %6d (%5.2f %%) ", p->ClassGains[i], Gain? 100.0*p->ClassGains[i]/Gain : 0.0 );
+ printf( "S = %8d (%5.2f %%) ", p->ClassSubgs[i], p->nTotalSubgs? 100.0*p->ClassSubgs[i]/p->nTotalSubgs : 0.0 );
+ printf( "R = %7d ", p->ClassGains[i]? p->ClassSubgs[i]/p->ClassGains[i] : 9999999 );
+// Kit_DsdPrintFromTruth( pCanons + i, 4 );
+// ABC_PRTP( "T", p->ClassTimes[i], p->timeEval );
+ printf( "\n" );
+ }
+ fflush( stdout );
+}
+
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+#if 0
+
+ABC_NAMESPACE_IMPL_END
+
+#include "src/bool/kit/kit.h"
+
+ABC_NAMESPACE_IMPL_START
+
+void Dar_ManPrintScript()
+{
+ unsigned pCanons[222];
+ int i;
+ Dar_LibReturnCanonicals( pCanons );
+ for ( i = 1; i < 222; i++ )
+ {
+ Kit_DsdNtk_t * pNtk;
+ pNtk = Kit_DsdDecompose( pCanons + i, 4 );
+ printf( " \"" );
+ Kit_DsdPrint( stdout, pNtk );
+ printf( "\", /* %3d */\n", i );
+ Kit_DsdNtkFree( pNtk );
+ }
+}
+#endif
+
+////////////////////////////////////////////////////////////////////////
+/// END OF FILE ///
+////////////////////////////////////////////////////////////////////////
+
+
+ABC_NAMESPACE_IMPL_END
+