summaryrefslogtreecommitdiffstats
path: root/src/aig/gia
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2021-07-15 18:23:04 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2021-07-15 18:23:04 -0700
commitd9aeaade3b29360c65b54f6df734359b3fb452f0 (patch)
treee24a01583ece8cd8d249bb00a6f225c6c81df7e3 /src/aig/gia
parent3e67d167f5c07315f3d1bb7d8ae6c079cb451ded (diff)
downloadabc-d9aeaade3b29360c65b54f6df734359b3fb452f0.tar.gz
abc-d9aeaade3b29360c65b54f6df734359b3fb452f0.tar.bz2
abc-d9aeaade3b29360c65b54f6df734359b3fb452f0.zip
Several unrelated changes.
Diffstat (limited to 'src/aig/gia')
-rw-r--r--src/aig/gia/giaMinLut.c1
-rw-r--r--src/aig/gia/giaResub2.c27
-rw-r--r--src/aig/gia/giaSim.c100
3 files changed, 119 insertions, 9 deletions
diff --git a/src/aig/gia/giaMinLut.c b/src/aig/gia/giaMinLut.c
index 72f3570b..6b71fdef 100644
--- a/src/aig/gia/giaMinLut.c
+++ b/src/aig/gia/giaMinLut.c
@@ -136,7 +136,6 @@ Gia_Man_t * Vec_WrdReadTest( char * pFileName )
Gia_Man_t * pPart, * pNew = NULL; Gia_Obj_t * pObj;
int i, k, nIns, nOuts, iLit;
Vec_Wec_t * vRes = Vec_WrdReadLayerText( pFileName, &nIns, &nOuts );
- int nFiles = vRes ? Vec_WecSize(vRes) : 0;
int nBitsI = vRes ? Vec_WecMaxLevelSize(vRes) : 0;
int nBitsO = vRes ? nOuts / Vec_WecSize(vRes) : 0;
word * pFuncs = vRes ? Vec_WrdReadTruthText( pFileName, nBitsI, nBitsO, Vec_WecSize(vRes) ) : NULL;
diff --git a/src/aig/gia/giaResub2.c b/src/aig/gia/giaResub2.c
index be527d4f..1219526f 100644
--- a/src/aig/gia/giaResub2.c
+++ b/src/aig/gia/giaResub2.c
@@ -1116,13 +1116,24 @@ int Gia_RsbFindFaninToAddToCut( Gia_Man_t * p, Vec_Int_t * vIns )
assert( nFanins < 64 );
}
// find fanin with the highest count
- for ( i = 0; i < nFanins; i++ )
-// if ( CountMax < pFaninCounts[i] )
- if ( CountMax < pFaninCounts[i] || (CountMax == pFaninCounts[i] && (Gia_ObjFanoutNumId(p, iFanMax) < Gia_ObjFanoutNumId(p, pFanins[i]))) )
- {
- CountMax = pFaninCounts[i];
- iFanMax = pFanins[i];
- }
+ if ( p->vFanoutNums != NULL )
+ {
+ for ( i = 0; i < nFanins; i++ )
+ if ( CountMax < pFaninCounts[i] || (CountMax == pFaninCounts[i] && (Gia_ObjFanoutNumId(p, iFanMax) < Gia_ObjFanoutNumId(p, pFanins[i]))) )
+ {
+ CountMax = pFaninCounts[i];
+ iFanMax = pFanins[i];
+ }
+ }
+ else
+ {
+ for ( i = 0; i < nFanins; i++ )
+ if ( CountMax < pFaninCounts[i] || (CountMax == pFaninCounts[i] && (Gia_ObjRefNumId(p, iFanMax) < Gia_ObjRefNumId(p, pFanins[i]))) )
+ {
+ CountMax = pFaninCounts[i];
+ iFanMax = pFanins[i];
+ }
+ }
return iFanMax;
}
// precondition: nodes in vWin and in vIns are marked with the current ID
@@ -1167,7 +1178,7 @@ void Gia_RsbWindowGrow2( Gia_Man_t * p, int iObj, Vec_Wec_t * vLevels, Vec_Int_t
else
assert( Vec_IntSize(vIns) > nInputsMax );
}
- if ( Vec_IntSize(vIns) <= nInputsMax )
+ if ( vLevels && Vec_IntSize(vIns) <= nInputsMax )
{
Vec_IntSort( vIns, 0 );
Gia_WinCreateFromCut( p, iObj, vIns, vLevels, vWin );
diff --git a/src/aig/gia/giaSim.c b/src/aig/gia/giaSim.c
index 001bd8ac..a0a65112 100644
--- a/src/aig/gia/giaSim.c
+++ b/src/aig/gia/giaSim.c
@@ -1222,6 +1222,106 @@ int Gia_ManIncrSimCheckEqual( Gia_Man_t * p, int iLit0, int iLit1 )
}
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Gia_ManSimOneBit( Gia_Man_t * p, Vec_Int_t * vValues )
+{
+ Gia_Obj_t * pObj; int k;
+ assert( Vec_IntSize(vValues) == Gia_ManCiNum(p) );
+
+ Gia_ManConst0(p)->fMark0 = 0;
+ Gia_ManForEachCi( p, pObj, k )
+ pObj->fMark0 = Vec_IntEntry(vValues, k);
+ Gia_ManForEachAnd( p, pObj, k )
+ pObj->fMark0 = (Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj)) & (Gia_ObjFanin1(pObj)->fMark0 ^ Gia_ObjFaninC1(pObj));
+ Gia_ManForEachCo( p, pObj, k )
+ pObj->fMark0 = Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj);
+
+ Gia_ManForEachCo( p, pObj, k )
+ printf( "%d", k % 10 );
+ printf( "\n" );
+
+ Gia_ManForEachCo( p, pObj, k )
+ printf( "%d", pObj->fMark0 );
+ printf( "\n" );
+ printf( "\n" );
+}
+void Gia_ManSimOneBitTest2( Gia_Man_t * p )
+{
+ Vec_Int_t * vValues = Vec_IntStart( Gia_ManCiNum(p) );
+
+ Vec_IntWriteEntry( vValues, 0, 1 );
+ Gia_ManSimOneBit( p, vValues );
+ Vec_IntFill( vValues, Vec_IntSize(vValues), 0 );
+
+ Vec_IntWriteEntry( vValues, 0, 1 );
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p)/2, 1 );
+ Gia_ManSimOneBit( p, vValues );
+ Vec_IntFill( vValues, Vec_IntSize(vValues), 0 );
+
+ Vec_IntWriteEntry( vValues, 0, 1 );
+ Vec_IntWriteEntry( vValues, 1, 1 );
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p)/2+2, 1 );
+ Gia_ManSimOneBit( p, vValues );
+ Vec_IntFill( vValues, Vec_IntSize(vValues), 0 );
+
+ Vec_IntWriteEntry( vValues, 0, 1 );
+ Vec_IntWriteEntry( vValues, 1, 1 );
+ Vec_IntWriteEntry( vValues, Gia_ManCiNum(p)/2, 1 );
+ Gia_ManSimOneBit( p, vValues );
+ Vec_IntFill( vValues, Vec_IntSize(vValues), 0 );
+
+ Vec_IntFill( vValues, Vec_IntSize(vValues)/2, 1 );
+ Vec_IntFillExtra( vValues, Gia_ManCiNum(p), 0 );
+ Gia_ManSimOneBit( p, vValues );
+ Vec_IntFill( vValues, Gia_ManCiNum(p), 0 );
+
+ Vec_IntFill( vValues, Gia_ManCiNum(p), 1 );
+ Gia_ManSimOneBit( p, vValues );
+ Vec_IntFill( vValues, Gia_ManCiNum(p), 0 );
+
+ Vec_IntFill( vValues, Gia_ManCiNum(p), 1 );
+ Vec_IntWriteEntry( vValues, 127, 1 );
+ Vec_IntWriteEntry( vValues, 255, 0 );
+ Gia_ManSimOneBit( p, vValues );
+ Vec_IntFill( vValues, Gia_ManCiNum(p), 0 );
+
+ Vec_IntFill( vValues, Gia_ManCiNum(p), 1 );
+ Vec_IntWriteEntry( vValues, 127, 0 );
+ Vec_IntWriteEntry( vValues, 255, 1 );
+ Gia_ManSimOneBit( p, vValues );
+ Vec_IntFill( vValues, Gia_ManCiNum(p), 0 );
+
+ Vec_IntFill( vValues, Gia_ManCiNum(p), 1 );
+ Vec_IntWriteEntry( vValues, 127, 0 );
+ Vec_IntWriteEntry( vValues, 255, 0 );
+ Gia_ManSimOneBit( p, vValues );
+ Vec_IntFill( vValues, Gia_ManCiNum(p), 0 );
+
+ Vec_IntFree( vValues );
+}
+void Gia_ManSimOneBitTest( Gia_Man_t * p )
+{
+ Vec_Int_t * vValues = Vec_IntStart( Gia_ManCiNum(p) );
+ int i, k;
+ for ( i = 0; i < 10; i++ )
+ {
+ for ( k = 0; k < Vec_IntSize(vValues); k++ )
+ Vec_IntWriteEntry( vValues, k, Vec_IntEntry(vValues, k) ^ (rand()&1) );
+
+ printf( "Values = %d ", Vec_IntSum(vValues) );
+ Gia_ManSimOneBit( p, vValues );
+ }
+}
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///