Commit a8f4d4e6 by Alan Mishchenko

Making GIA use independent truth table number storage when computing truth tables.

parent 72c09b86
......@@ -154,6 +154,7 @@ struct Gia_Man_t_
word nHashHit; // hash table hit
word nHashMiss; // hash table miss
int fVerbose; // verbose reports
Vec_Int_t * vObjNums; // object numbers
Vec_Wrd_t * vTtMemory; // truth table memory
int nTtVars; // truth table variables
int nTtWords; // truth table words
......
......@@ -87,6 +87,7 @@ void Gia_ManStop( Gia_Man_t * p )
Vec_IntFreeP( &p->vLevels );
Vec_IntFreeP( &p->vTruths );
Vec_WrdFreeP( &p->vTtMemory );
Vec_IntFreeP( &p->vObjNums );
Vec_IntFree( p->vCis );
Vec_IntFree( p->vCos );
ABC_FREE( p->pTravIds );
......
......@@ -1358,11 +1358,11 @@ unsigned * Gia_ManComputePoTruthTables( Gia_Man_t * p, int nBytesMax )
***********************************************************************/
int Gia_ObjComputeTruthTable_rec( Gia_Man_t * p, Gia_Obj_t * pObj )
{
{
word * pTruth0, * pTruth1, * pTruth, * pTruthL;
int Value0, Value1;
if ( Gia_ObjIsTravIdCurrent(p, pObj) )
return pObj->Value;
return Vec_IntGetEntry(p->vObjNums, Gia_ObjId(p, pObj));
Gia_ObjSetTravIdCurrent(p, pObj);
assert( Gia_ObjIsAnd(pObj) );
Value0 = Gia_ObjComputeTruthTable_rec( p, Gia_ObjFanin0(pObj) );
......@@ -1392,14 +1392,14 @@ int Gia_ObjComputeTruthTable_rec( Gia_Man_t * p, Gia_Obj_t * pObj )
while ( pTruth < pTruthL )
*pTruth++ = *pTruth0++ & *pTruth1++;
}
return (pObj->Value = p->iTtNum-1);
Vec_IntSetEntry(p->vObjNums, Gia_ObjId(p, pObj), p->iTtNum-1);
return p->iTtNum-1;
}
unsigned * Gia_ObjComputeTruthTable( Gia_Man_t * p, Gia_Obj_t * pObj )
{
Gia_Obj_t * pTemp;
word * pTruth;
int i, k;
// this procedure works only for primary outputs
if ( p->vTtMemory == NULL )
{
word Truth6[7] = {
......@@ -1417,6 +1417,8 @@ unsigned * Gia_ObjComputeTruthTable( Gia_Man_t * p, Gia_Obj_t * pObj )
for ( i = 0; i < 7; i++ )
for ( k = 0; k < p->nTtWords; k++ )
Vec_WrdWriteEntry( p->vTtMemory, i * p->nTtWords + k, Truth6[i] );
assert( p->vObjNums == NULL );
p->vObjNums = Vec_IntAlloc( Gia_ManObjNum(p) + 1000 );
}
else
{
......@@ -1427,11 +1429,11 @@ unsigned * Gia_ObjComputeTruthTable( Gia_Man_t * p, Gia_Obj_t * pObj )
// mark const and PIs
Gia_ManIncrementTravId( p );
Gia_ObjSetTravIdCurrent( p, Gia_ManConst0(p) );
Gia_ManConst0(p)->Value = 0;
Vec_IntSetEntry(p->vObjNums,0, 0);
Gia_ManForEachPi( p, pTemp, i )
{
Gia_ObjSetTravIdCurrent( p, pTemp );
pTemp->Value = i+1;
Vec_IntSetEntry(p->vObjNums, Gia_ObjId(p, pTemp), i+1);
}
p->iTtNum = 7;
// compute truth table for the fanin node
......
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