summaryrefslogtreecommitdiffstats
path: root/src/base
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2011-12-30 13:11:52 +0700
committerAlan Mishchenko <alanmi@berkeley.edu>2011-12-30 13:11:52 +0700
commit1e20e2ccbc365c98b8c043cb43e4f3ce8663e9e2 (patch)
tree20aeb6bcbb5947d04e87d2f2c6b7065a405c6a53 /src/base
parent655d452cbb01a381110f111aea21071a24aa3799 (diff)
downloadabc-1e20e2ccbc365c98b8c043cb43e4f3ce8663e9e2.tar.gz
abc-1e20e2ccbc365c98b8c043cb43e4f3ce8663e9e2.tar.bz2
abc-1e20e2ccbc365c98b8c043cb43e4f3ce8663e9e2.zip
Delay optimization using precomputed library.
Diffstat (limited to 'src/base')
-rw-r--r--src/base/abci/abcRec.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/base/abci/abcRec.c b/src/base/abci/abcRec.c
index 4bf44219..ae3a88f7 100644
--- a/src/base/abci/abcRec.c
+++ b/src/base/abci/abcRec.c
@@ -58,6 +58,7 @@ struct Abc_ManRec_t_
Abc_Ntk_t * pNtk; // the record
Vec_Ptr_t * vTtElems; // the elementary truth tables
Vec_Ptr_t * vTtNodes; // the node truth tables
+ Mem_Fixed_t * pMmTruth; // memory manager for truth tables
Rec_Obj_t ** pBins; // hash table mapping truth tables into nodes
int nBins; // the number of allocated bins
int nVars; // the number of variables
@@ -995,8 +996,10 @@ void Abc_NtkRecStart( Abc_Ntk_t * pNtk, int nVars, int nCuts, int fTrim )
p->vTtNodes = Vec_PtrAllocSimInfo( 1<<14, p->nWords );
*/
p->vTtNodes = Vec_PtrAlloc( 1000 );
+ p->pMmTruth = Mem_FixedStart( sizeof(unsigned)*p->nWords );
for ( i = 0; i < Abc_NtkObjNumMax(pNtk); i++ )
- Vec_PtrPush( p->vTtNodes, ABC_ALLOC(unsigned, p->nWords) );
+// Vec_PtrPush( p->vTtNodes, ABC_ALLOC(unsigned, p->nWords) );
+ Vec_PtrPush( p->vTtNodes, Mem_FixedEntryFetch(p->pMmTruth) );
// create hash table
//p->nBins = 50011;
@@ -1110,8 +1113,9 @@ void Abc_NtkRecStop()
// Abc_NtkRecDumpTruthTables( s_pMan );
if ( s_pMan->pNtk )
Abc_NtkDelete( s_pMan->pNtk );
-// Vec_PtrFree( s_pMan->vTtNodes );
- Vec_PtrFreeFree( s_pMan->vTtNodes );
+// Vec_PtrFreeFree( s_pMan->vTtNodes );
+ Mem_FixedStop( s_pMan->pMmTruth, 0 );
+ Vec_PtrFree( s_pMan->vTtNodes );
Vec_PtrFree( s_pMan->vTtElems );
ABC_FREE( s_pMan->pBins );
@@ -1707,7 +1711,8 @@ clk = clock();
// if ( Vec_PtrSize(s_pMan->vTtNodes) <= pObj->Id )
// Vec_PtrDoubleSimInfo(s_pMan->vTtNodes);
while ( Vec_PtrSize(s_pMan->vTtNodes) <= pObj->Id )
- Vec_PtrPush( s_pMan->vTtNodes, ABC_ALLOC(unsigned, s_pMan->nWords) );
+// Vec_PtrPush( s_pMan->vTtNodes, ABC_ALLOC(unsigned, s_pMan->nWords) );
+ Vec_PtrPush( s_pMan->vTtNodes, Mem_FixedEntryFetch(s_pMan->pMmTruth) );
// compute the truth table
RetValue = Abc_NtkRecComputeTruth( pObj, s_pMan->vTtNodes, nInputs );
@@ -1820,6 +1825,8 @@ int If_CutDelayRecCost(If_Man_t* p, If_Cut_t* pCut)
//functional class not found in the library.
if ( *ppSpot == NULL )
{
+Kit_DsdPrintFromTruth( pInOut, nLeaves ); printf( "\n" );
+
s_pMan->nFunsNotFound++;
pCut->Cost = IF_COST_MAX;
pCut->fUser = 1;