diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/map/if/ifMap.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/map/if/ifMap.c b/src/map/if/ifMap.c index 9f709411..5fa95fc1 100644 --- a/src/map/if/ifMap.c +++ b/src/map/if/ifMap.c @@ -122,12 +122,12 @@ void If_ObjPerformMappingAnd( If_Man_t * p, If_Obj_t * pObj, int Mode, int fPrep // recompute the parameters of the best cut if ( p->pPars->fDelayOpt ) pCut->Delay = If_CutSopBalanceEval( p, pCut, NULL ); - else if ( p->pPars->fDelayOptLut ) - pCut->Delay = If_CutLutBalanceEval( p, pCut ); else if ( p->pPars->fDsdBalance ) pCut->Delay = If_CutDsdBalanceEval( p, pCut, NULL ); else if ( p->pPars->fUserRecLib ) pCut->Delay = If_CutDelayRecCost3( p, pCut, pObj ); + else if ( p->pPars->fDelayOptLut ) + pCut->Delay = If_CutLutBalanceEval( p, pCut ); else if( p->pPars->nGateSize > 0 ) pCut->Delay = If_CutDelaySop( p, pCut ); else @@ -271,13 +271,25 @@ void If_ObjPerformMappingAnd( If_Man_t * p, If_Obj_t * pObj, int Mode, int fPrep continue; // check if the cut satisfies the required times if ( p->pPars->fDelayOpt ) + { pCut->Delay = If_CutSopBalanceEval( p, pCut, NULL ); - else if ( p->pPars->fDelayOptLut ) - pCut->Delay = If_CutLutBalanceEval( p, pCut ); + if ( pCut->Delay >= pObj->Level && pCut->nLeaves > 2 ) + pCut->Delay += 1; + } else if ( p->pPars->fDsdBalance ) + { pCut->Delay = If_CutDsdBalanceEval( p, pCut, NULL ); + if ( pCut->Delay >= pObj->Level && pCut->nLeaves > 2 ) + pCut->Delay += 1; + } else if ( p->pPars->fUserRecLib ) + { pCut->Delay = If_CutDelayRecCost3( p, pCut, pObj ); + if ( pCut->Delay >= pObj->Level && pCut->nLeaves > 2 ) + pCut->Delay += 1; + } + else if ( p->pPars->fDelayOptLut ) + pCut->Delay = If_CutLutBalanceEval( p, pCut ); else if( p->pPars->nGateSize > 0 ) pCut->Delay = If_CutDelaySop( p, pCut ); else |