summaryrefslogtreecommitdiffstats
path: root/src/map
diff options
context:
space:
mode:
Diffstat (limited to 'src/map')
-rw-r--r--src/map/scl/sclSize.h1
-rw-r--r--src/map/scl/sclUpsize.c25
-rw-r--r--src/map/scl/sclUtil.c27
3 files changed, 52 insertions, 1 deletions
diff --git a/src/map/scl/sclSize.h b/src/map/scl/sclSize.h
index 771eb820..78c1f2f2 100644
--- a/src/map/scl/sclSize.h
+++ b/src/map/scl/sclSize.h
@@ -577,6 +577,7 @@ extern void Abc_SclUpsizePerform( SC_Lib * pLib, Abc_Ntk_t * pNtk, SC_S
/*=== sclUtil.c ===============================================================*/
extern void Abc_SclMioGates2SclGates( SC_Lib * pLib, Abc_Ntk_t * p );
extern void Abc_SclSclGates2MioGates( SC_Lib * pLib, Abc_Ntk_t * p );
+extern void Abc_SclTransferGates( Abc_Ntk_t * pOld, Abc_Ntk_t * pNew );
extern void Abc_SclPrintGateSizes( SC_Lib * pLib, Abc_Ntk_t * p );
extern void Abc_SclMinsizePerform( SC_Lib * pLib, Abc_Ntk_t * p, int fUseMax, int fVerbose );
extern int Abc_SclCountMinSize( SC_Lib * pLib, Abc_Ntk_t * p, int fUseMax );
diff --git a/src/map/scl/sclUpsize.c b/src/map/scl/sclUpsize.c
index d5d405d3..5c630735 100644
--- a/src/map/scl/sclUpsize.c
+++ b/src/map/scl/sclUpsize.c
@@ -865,7 +865,7 @@ void Abc_SclUpsizeRemoveDangling( SC_Man * p, Abc_Ntk_t * pNtk )
SeeAlso []
***********************************************************************/
-void Abc_SclUpsizePerform( SC_Lib * pLib, Abc_Ntk_t * pNtk, SC_SizePars * pPars )
+void Abc_SclUpsizePerformInt( SC_Lib * pLib, Abc_Ntk_t * pNtk, SC_SizePars * pPars )
{
SC_Man * p;
Vec_Int_t * vPathPos = NULL; // critical POs
@@ -1013,6 +1013,29 @@ void Abc_SclUpsizePerform( SC_Lib * pLib, Abc_Ntk_t * pNtk, SC_SizePars * pPars
// Abc_NtkCleanMarkAB( pNtk );
}
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Abc_SclUpsizePerform( SC_Lib * pLib, Abc_Ntk_t * pNtk, SC_SizePars * pPars )
+{
+ Abc_Ntk_t * pNtkNew = pNtk;
+ if ( pNtk->nBarBufs2 > 0 )
+ pNtkNew = Abc_NtkDupDfsNoBarBufs( pNtk );
+ Abc_SclUpsizePerformInt( pLib, pNtkNew, pPars );
+ if ( pNtk->nBarBufs2 > 0 )
+ Abc_SclTransferGates( pNtk, pNtkNew );
+ if ( pNtk->nBarBufs2 > 0 )
+ Abc_NtkDelete( pNtkNew );
+}
+
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
diff --git a/src/map/scl/sclUtil.c b/src/map/scl/sclUtil.c
index 4489e3f2..5af1b88b 100644
--- a/src/map/scl/sclUtil.c
+++ b/src/map/scl/sclUtil.c
@@ -96,6 +96,33 @@ void Abc_SclSclGates2MioGates( SC_Lib * pLib, Abc_Ntk_t * p )
/**Function*************************************************************
+ Synopsis [Transfer gate sizes from AIG without barbufs.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Abc_SclTransferGates( Abc_Ntk_t * pOld, Abc_Ntk_t * pNew )
+{
+ Abc_Obj_t * pObj; int i;
+ assert( pOld->nBarBufs2 > 0 );
+ assert( pNew->nBarBufs2 == 0 );
+ Abc_NtkForEachNode( pOld, pObj, i )
+ {
+ if ( pObj->pCopy == NULL )
+ continue;
+ if ( Abc_ObjIsBarBuf(pObj) )
+ continue;
+ assert( Abc_ObjNtk(pObj->pCopy) == pNew );
+ pObj->pData = pObj->pCopy->pData;
+ }
+}
+
+/**Function*************************************************************
+
Synopsis [Reports percentage of gates of each size.]
Description []