From f62eb635d16201d0c1780ae22d71a18fc9a525b3 Mon Sep 17 00:00:00 2001 From: Alan Mishchenko Date: Thu, 13 Dec 2018 08:49:00 -0800 Subject: Fixing float overflow during area-flow computation in &lf. --- src/aig/gia/giaLf.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/aig') diff --git a/src/aig/gia/giaLf.c b/src/aig/gia/giaLf.c index b1a82346..13066005 100644 --- a/src/aig/gia/giaLf.c +++ b/src/aig/gia/giaLf.c @@ -1158,7 +1158,11 @@ static inline void Lf_CutParams( Lf_Man_t * p, Lf_Cut_t * pCut, int Required, fl if ( pCut->Flow >= (float)1e32 || pBest->Flow[Index] >= (float)1e32 ) pCut->Flow = (float)1e32; else + { pCut->Flow += pBest->Flow[Index]; + if ( pCut->Flow > (float)1e32 ) + pCut->Flow = (float)1e32; + } } Delay = pBest->Delay[Index]; } @@ -1172,7 +1176,11 @@ static inline void Lf_CutParams( Lf_Man_t * p, Lf_Cut_t * pCut, int Required, fl if ( p->fUseEla ) pCut->Flow = Lf_CutAreaDerefed(p, pCut) / FlowRefs; else + { pCut->Flow = (pCut->Flow + Lf_CutArea(p, pCut)) / FlowRefs; + if ( pCut->Flow > (float)1e32 ) + pCut->Flow = (float)1e32; + } } void Lf_ObjMergeOrder( Lf_Man_t * p, int iObj ) -- cgit v1.2.3