diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2016-08-08 18:20:05 -0700 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2016-08-08 18:20:05 -0700 |
commit | 693b587c5cfa624e6cae086ab7ae47ab9f72d082 (patch) | |
tree | fcb90aa617c8195db2b6fa802f9c799a6e8ddd48 | |
parent | 713976f2cf07448212d997289714a12c976b010f (diff) | |
download | abc-693b587c5cfa624e6cae086ab7ae47ab9f72d082.tar.gz abc-693b587c5cfa624e6cae086ab7ae47ab9f72d082.tar.bz2 abc-693b587c5cfa624e6cae086ab7ae47ab9f72d082.zip |
Adding truth table occurrence counters for 'if -c'.
-rw-r--r-- | src/map/if/if.h | 1 | ||||
-rw-r--r-- | src/map/if/ifMan.c | 8 | ||||
-rw-r--r-- | src/map/if/ifTruth.c | 5 |
3 files changed, 14 insertions, 0 deletions
diff --git a/src/map/if/if.h b/src/map/if/if.h index 5f86ef5c..e822a0ad 100644 --- a/src/map/if/if.h +++ b/src/map/if/if.h @@ -253,6 +253,7 @@ struct If_Man_t_ Vec_Str_t * vTtPerms[IF_MAX_FUNC_LUTSIZE+1]; // mapping of truth table into permutations Vec_Str_t * vTtVars[IF_MAX_FUNC_LUTSIZE+1]; // mapping of truth table into selected vars Vec_Int_t * vTtDecs[IF_MAX_FUNC_LUTSIZE+1]; // mapping of truth table into decomposition pattern + Vec_Int_t * vTtOccurs[IF_MAX_FUNC_LUTSIZE+1];// truth table occurange counters Hash_IntMan_t * vPairHash; // hashing pairs of truth tables Vec_Int_t * vPairRes; // resulting truth table Vec_Str_t * vPairPerms; // resulting permutation diff --git a/src/map/if/ifMan.c b/src/map/if/ifMan.c index 8f5a5c48..414a1911 100644 --- a/src/map/if/ifMan.c +++ b/src/map/if/ifMan.c @@ -125,6 +125,12 @@ If_Man_t * If_ManStart( If_Par_t * pPars ) Vec_StrFill( p->vPairPerms, p->pPars->nLutSize, 0 ); p->vPairRes = Vec_IntAlloc( 1000 ); Vec_IntPush( p->vPairRes, -1 ); + for ( v = 6; v <= Abc_MaxInt(6,p->pPars->nLutSize); v++ ) + p->vTtOccurs[v] = Vec_IntAlloc( 1000 ); + for ( v = 0; v < 6; v++ ) + p->vTtOccurs[v] = p->vTtOccurs[6]; + for ( v = 6; v <= Abc_MaxInt(6,p->pPars->nLutSize); v++ ) + Vec_IntPushTwo( p->vTtOccurs[v], 0, 0 ); } if ( pPars->fUseCofVars ) { @@ -274,6 +280,8 @@ void If_ManStop( If_Man_t * p ) Vec_MemFreeP( &p->vTtMem[i] ); for ( i = 6; i <= Abc_MaxInt(6,p->pPars->nLutSize); i++ ) Vec_WecFreeP( &p->vTtIsops[i] ); + for ( i = 6; i <= Abc_MaxInt(6,p->pPars->nLutSize); i++ ) + Vec_IntFreeP( &p->vTtOccurs[i] ); Mem_FixedStop( p->pMemObj, 0 ); ABC_FREE( p->pMemCi ); ABC_FREE( p->pMemAnd ); diff --git a/src/map/if/ifTruth.c b/src/map/if/ifTruth.c index 91e6adcf..7c8892d3 100644 --- a/src/map/if/ifTruth.c +++ b/src/map/if/ifTruth.c @@ -244,10 +244,15 @@ p->timeCache[3] += Abc_Clock() - clk; else assert( pCut->uSign == If_ObjCutSignCompute( pCut ) ); + assert( Vec_IntSize(p->vTtOccurs[pCut->nLeaves]) == Vec_MemEntryNum(p->vTtMem[pCut->nLeaves]) ); // hash function fCompl = ((p->uCanonPhase >> pCut->nLeaves) & 1); truthId = Vec_MemHashInsert( p->vTtMem[pCut->nLeaves], pTruth ); pCut->iCutFunc = Abc_Var2Lit( truthId, fCompl ); + // count how many time this truth table is used + if ( Vec_IntSize(p->vTtOccurs[pCut->nLeaves]) < Vec_MemEntryNum(p->vTtMem[pCut->nLeaves]) ) + Vec_IntPush( p->vTtOccurs[pCut->nLeaves], 0 ); + Vec_IntAddToEntry( p->vTtOccurs[pCut->nLeaves], truthId, 1 ); if ( fVerbose ) { |