Commit 693b587c by Alan Mishchenko

Adding truth table occurrence counters for 'if -c'.

parent 713976f2
......@@ -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
......
......@@ -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 );
......
......@@ -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 )
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment