summaryrefslogtreecommitdiffstats
path: root/src/aig/gia/giaIf.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2021-05-08 14:00:32 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2021-05-08 14:00:32 -0700
commit13a0bb97b5d1f2d67088317655737e726a07cf04 (patch)
tree640563b73ae0ff65a9a99048dbf68a6bd1afcf68 /src/aig/gia/giaIf.c
parent174f27d9813dede18e5c06fe8c98d6819ce49835 (diff)
downloadabc-13a0bb97b5d1f2d67088317655737e726a07cf04.tar.gz
abc-13a0bb97b5d1f2d67088317655737e726a07cf04.tar.bz2
abc-13a0bb97b5d1f2d67088317655737e726a07cf04.zip
Updating cost function in &save/&load.
Diffstat (limited to 'src/aig/gia/giaIf.c')
-rw-r--r--src/aig/gia/giaIf.c35
1 files changed, 27 insertions, 8 deletions
diff --git a/src/aig/gia/giaIf.c b/src/aig/gia/giaIf.c
index 614f7b47..50101bdf 100644
--- a/src/aig/gia/giaIf.c
+++ b/src/aig/gia/giaIf.c
@@ -39,6 +39,8 @@ ABC_NAMESPACE_IMPL_START
extern int Kit_TruthToGia( Gia_Man_t * pMan, unsigned * pTruth, int nVars, Vec_Int_t * vMemory, Vec_Int_t * vLeaves, int fHash );
extern int Abc_RecToGia3( Gia_Man_t * pMan, If_Man_t * pIfMan, If_Cut_t * pCut, Vec_Int_t * vLeaves, int fHash );
+extern void Gia_ManPrintGetMuxFanins( Gia_Man_t * p, Gia_Obj_t * pObj, int * pFanins );
+
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
@@ -219,20 +221,37 @@ void Gia_ManLutParams( Gia_Man_t * p, int * pnCurLuts, int * pnCurEdges, int * p
int * pLevels = ABC_CALLOC( int, Gia_ManObjNum(p) );
*pnCurLuts = 0;
*pnCurEdges = 0;
+ *pnCurLevels = 0;
Gia_ManForEachLut( p, i )
{
- int Level = 0;
+ if ( Gia_ObjLutIsMux(p, i) )
+ {
+ int pFanins[3];
+ if ( Gia_ObjLutSize(p, i) == 3 )
+ {
+ Gia_ManPrintGetMuxFanins( p, Gia_ManObj(p, i), pFanins );
+ pLevels[i] = Abc_MaxInt( pLevels[i], pLevels[pFanins[0]]+1 );
+ pLevels[i] = Abc_MaxInt( pLevels[i], pLevels[pFanins[1]] );
+ pLevels[i] = Abc_MaxInt( pLevels[i], pLevels[pFanins[2]] );
+ }
+ else if ( Gia_ObjLutSize(p, i) == 2 )
+ {
+ pObj = Gia_ManObj( p, i );
+ pLevels[i] = Abc_MaxInt( pLevels[i], pLevels[Gia_ObjFaninId0(pObj, i)] );
+ pLevels[i] = Abc_MaxInt( pLevels[i], pLevels[Gia_ObjFaninId1(pObj, i)] );
+ }
+ *pnCurLevels = Abc_MaxInt( *pnCurLevels, pLevels[i] );
+ *pnCurEdges++;
+ //nMuxF++;
+ continue;
+ }
(*pnCurLuts)++;
(*pnCurEdges) += Gia_ObjLutSize(p, i);
Gia_LutForEachFanin( p, i, iFan, k )
- if ( Level < pLevels[iFan] )
- Level = pLevels[iFan];
- pLevels[i] = Level + 1;
+ pLevels[i] = Abc_MaxInt( pLevels[i], pLevels[iFan] );
+ pLevels[i]++;
+ *pnCurLevels = Abc_MaxInt( *pnCurLevels, pLevels[i] );
}
- *pnCurLevels = 0;
- Gia_ManForEachCo( p, pObj, k )
- if ( *pnCurLevels < pLevels[Gia_ObjFaninId0p(p, pObj)] )
- *pnCurLevels = pLevels[Gia_ObjFaninId0p(p, pObj)];
ABC_FREE( pLevels );
}
}