summaryrefslogtreecommitdiffstats
path: root/src/map
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2017-09-20 19:27:46 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2017-09-20 19:27:46 -0700
commit287f9efcceb540fb09f5d81250699a9277967ec5 (patch)
tree4a25d1867783a12fcbc1db2769f27f9337dd7f55 /src/map
parent1e0bbef1ef6a6ff7f0293e0926a8ff2b396e0a3e (diff)
downloadabc-287f9efcceb540fb09f5d81250699a9277967ec5.tar.gz
abc-287f9efcceb540fb09f5d81250699a9277967ec5.tar.bz2
abc-287f9efcceb540fb09f5d81250699a9277967ec5.zip
Maintenance and updates.
Diffstat (limited to 'src/map')
-rw-r--r--src/map/if/if.h6
-rw-r--r--src/map/if/ifMap.c4
2 files changed, 7 insertions, 3 deletions
diff --git a/src/map/if/if.h b/src/map/if/if.h
index 0dd5e01c..7cc852af 100644
--- a/src/map/if/if.h
+++ b/src/map/if/if.h
@@ -167,8 +167,10 @@ struct If_Par_t_
float * pTimesArr; // arrival times
float * pTimesReq; // required times
int (* pFuncCost) (If_Man_t *, If_Cut_t *); // procedure to compute the user's cost of a cut
- int (* pFuncUser) (If_Man_t *, If_Obj_t *, If_Cut_t *); // procedure called for each cut when cut computation is finished
- int (* pFuncCell) (If_Man_t *, unsigned *, int, int, char *); // procedure called for cut functions
+ int (* pFuncUser) (If_Man_t *, If_Obj_t *, If_Cut_t *); // procedure called for each cut when cut computation is finished
+ int (* pFuncCell) (If_Man_t *, unsigned *, int, int, char *); // procedure called for cut functions
+ int (* pFuncCell2) (If_Man_t *, word *, int, Vec_Str_t *, char **); // procedure called for cut functions
+ int (* pFuncWrite) (If_Man_t *); // procedure called for cut functions
void * pReoMan; // reordering manager
};
diff --git a/src/map/if/ifMap.c b/src/map/if/ifMap.c
index 51865851..6c25921a 100644
--- a/src/map/if/ifMap.c
+++ b/src/map/if/ifMap.c
@@ -312,12 +312,14 @@ void If_ObjPerformMappingAnd( If_Man_t * p, If_Obj_t * pObj, int Mode, int fPrep
}
// run user functions
pCut->fUseless = 0;
- if ( p->pPars->pFuncCell )
+ if ( p->pPars->pFuncCell || p->pPars->pFuncCell2 )
{
assert( p->pPars->fUseTtPerm == 0 );
assert( pCut->nLimit >= 4 && pCut->nLimit <= 16 );
if ( p->pPars->fUseDsd )
pCut->fUseless = If_DsdManCheckDec( p->pIfDsdMan, If_CutDsdLit(p, pCut) );
+ else if ( p->pPars->pFuncCell2 )
+ pCut->fUseless = !p->pPars->pFuncCell2( p, (word *)If_CutTruth(p, pCut), pCut->nLeaves, NULL, NULL );
else
pCut->fUseless = !p->pPars->pFuncCell( p, If_CutTruth(p, pCut), Abc_MaxInt(6, pCut->nLeaves), pCut->nLeaves, p->pPars->pLutStruct );
p->nCutsUselessAll += pCut->fUseless;