summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2013-09-12 00:39:19 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2013-09-12 00:39:19 -0700
commit68df9f0f59d86e12a337a0ea5082dc9333e2aa14 (patch)
treec327e112b4fe7ef4baf6630ae868150aa487a949 /src
parent61abba9571c646eba14d917bd8af68f25c580b7f (diff)
downloadabc-68df9f0f59d86e12a337a0ea5082dc9333e2aa14.tar.gz
abc-68df9f0f59d86e12a337a0ea5082dc9333e2aa14.tar.bz2
abc-68df9f0f59d86e12a337a0ea5082dc9333e2aa14.zip
Improvements to the new technology mapper.
Diffstat (limited to 'src')
-rw-r--r--src/aig/gia/giaJf.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/aig/gia/giaJf.c b/src/aig/gia/giaJf.c
index 003c910e..328bf28a 100644
--- a/src/aig/gia/giaJf.c
+++ b/src/aig/gia/giaJf.c
@@ -135,9 +135,9 @@ float * Jf_ManInitRefs( Jf_Man_t * pMan )
{
if ( !Gia_ObjIsMuxType(pObj) )
continue;
- if ( Gia_ObjRefNum(p, Gia_ObjFanin0(pObj)) == 1 )
+ if ( !Gia_ObjIsMuxType(Gia_ObjFanin0(pObj)) && Gia_ObjRefNum(p, Gia_ObjFanin0(pObj)) == 1 )
Jf_ObjCleanUnit(Gia_ObjFanin0(pObj)), pMan->nCoarse++;
- if ( Gia_ObjRefNum(p, Gia_ObjFanin1(pObj)) == 1 )
+ if ( !Gia_ObjIsMuxType(Gia_ObjFanin1(pObj)) && Gia_ObjRefNum(p, Gia_ObjFanin1(pObj)) == 1 )
Jf_ObjCleanUnit(Gia_ObjFanin1(pObj)), pMan->nCoarse++;
}
}
@@ -939,12 +939,22 @@ void Jf_ObjComputeCuts( Jf_Man_t * p, Gia_Obj_t * pObj )
// Jf_ObjCheckStore( p, pSto, c, iObj );
// add two variable cut
if ( !Jf_ObjIsUnit(pObj) && !Jf_ObjHasCutWithSize(pSto, c, 2) )
- pSto[c]->iFunc = p->pPars->fCutMin ? 4 : 0, pSto[c]->pCut[0] = 2,
- pSto[c]->pCut[1] = Jf_ObjLit(Gia_ObjFaninId0(pObj, iObj), Gia_ObjFaninC0(pObj)),
- pSto[c]->pCut[2] = Jf_ObjLit(Gia_ObjFaninId1(pObj, iObj), Gia_ObjFaninC1(pObj)), c++; // set function
+ {
+ assert( Jf_ObjIsUnit(Gia_ObjFanin0(pObj)) && Jf_ObjIsUnit(Gia_ObjFanin1(pObj)) );
+ pSto[c]->iFunc = p->pPars->fCutMin ? 4 : 0; // set function
+ pSto[c]->pCut[0] = 2;
+ pSto[c]->pCut[1] = Jf_ObjLit(Gia_ObjFaninId0(pObj, iObj), Gia_ObjFaninC0(pObj));
+ pSto[c]->pCut[2] = Jf_ObjLit(Gia_ObjFaninId1(pObj, iObj), Gia_ObjFaninC1(pObj));
+ c++;
+ }
// add elementary cut
if ( Jf_ObjIsUnit(pObj) && !(p->pPars->fCutMin && Jf_ObjHasCutWithSize(pSto, c, 1)) )
- pSto[c]->iFunc = p->pPars->fCutMin ? 2 : 0, pSto[c]->pCut[0] = 1, pSto[c]->pCut[1] = Jf_ObjLit(iObj, 0), c++; // set function
+ {
+ pSto[c]->iFunc = p->pPars->fCutMin ? 2 : 0; // set function
+ pSto[c]->pCut[0] = 1;
+ pSto[c]->pCut[1] = Jf_ObjLit(iObj, 0);
+ c++;
+ }
// reorder cuts
// Jf_ObjSortCuts( pSto + 1, c - 1 );
// Jf_ObjCheckPtrs( pSto, CutNum );
@@ -1120,7 +1130,7 @@ void Jf_ManPropagateEla( Jf_Man_t * p, int fEdge )
CostBef = Jf_CutDeref_rec( p, Jf_ObjCutBest(p, i), fEdge, ABC_INFINITY );
Jf_ObjComputeBestCut( p, pObj, fEdge, 1 );
CostAft = Jf_CutRef_rec( p, Jf_ObjCutBest(p, i), fEdge, ABC_INFINITY );
- assert( CostBef >= CostAft ); // does not hold because of JF_EDGE_LIM
+// assert( CostBef >= CostAft ); // does not hold because of JF_EDGE_LIM
p->pPars->Edge += Jf_CutSize(Jf_ObjCutBest(p, i));
p->pPars->Area++;
}