102 static char rcsid[]
DD_UNUSED =
"$Id: cuddBddIte.c,v 1.26 2012/02/05 01:07:18 fabio Exp $";
183 unsigned int saveLimit = dd->
maxLive;
216 DdNode *r, *Fv, *Fnv, *Gv, *Gnv, *H, *Hv, *Hnv, *t, *e;
220 unsigned int topf, topg, toph, v;
253 v =
ddMin(topg, toph);
256 if (topf < v &&
cuddT(f) == one &&
cuddE(f) == zero) {
389 unsigned int saveLimit = dd->
maxLive;
457 unsigned int saveLimit = dd->
maxLive;
619 unsigned int saveLimit = dd->
maxLive;
651 unsigned int topf, topg, res;
655 if (f == g)
return(1);
676 if (g == one)
return(1);
677 if (f == one)
return(0);
680 if (f == zero)
return(1);
749 DdNode *r, *Fv, *Fnv, *Gv, *Gnv, *H, *Hv, *Hnv, *t, *e;
750 unsigned int topf, topg, toph, v;
758 if (f == (one =
DD_ONE(dd)))
765 if (g == one || f == g) {
772 }
else if (g == zero || f ==
Cudd_Not(g)) {
780 if (h == zero || f == h) {
783 }
else if (h == one || f ==
Cudd_Not(h)) {
801 v =
ddMin(topg, toph);
804 if (topf < v &&
cuddT(f) == one &&
cuddE(f) == zero) {
843 if (t == NULL)
return(NULL);
887 DdNode *fv, *fnv, *gv, *gnv;
889 unsigned int index, topf, topg;
896 if (f == zero || g == zero || f ==
Cudd_Not(g))
return(zero);
897 if (f == g || g == one)
return(f);
898 if (f == one)
return(g);
901 if (f > g) {
DdNode *tmp = f; f = g; g = tmp; }
903 if (res != NULL)
return(res);
940 if (t == NULL)
return(NULL);
1000 DdNode *F, *fv, *fnv, *G, *gv, *gnv;
1002 unsigned int topf, topg, index;
1011 if (f == g)
return(f);
1015 if (f == one)
return(g);
1019 if (g == one)
return(f);
1033 if (F->
ref != 1 || G->
ref != 1) {
1035 if (r != NULL)
return(r);
1070 if (t == NULL)
return(NULL);
1102 if (F->
ref != 1 || G->
ref != 1)
1128 DdNode *fv, *fnv, *G, *gv, *gnv;
1130 unsigned int topf, topg, index;
1137 if (f == g)
return(zero);
1144 if (g == zero)
return(f);
1157 if (r != NULL)
return(r);
1188 if (t == NULL)
return(NULL);
1284 unsigned int * topfp,
1285 unsigned int * topgp,
1286 unsigned int * tophp)
1288 register DdNode *F, *G, *H, *r, *f, *g, *h;
1289 register unsigned int topf, topg, toph;
1306 if ((topf > toph) || (topf == toph && f > h)) {
1316 }
else if (H == one) {
1317 if ((topf > topg) || (topf == topg && f > g)) {
1328 if ((topf > topg) || (topf == topg && f > g)) {
1386 unsigned int * topfp,
1387 unsigned int * topgp,
1388 unsigned int * tophp)
1390 register DdNode *r, *f, *g, *h;
void Cudd_IterDerefBdd(DdManager *table, DdNode *n)
DdNode * Cudd_bddIntersect(DdManager *dd, DdNode *f, DdNode *g)
static int bddVarToCanonical(DdManager *dd, DdNode **fp, DdNode **gp, DdNode **hp, unsigned int *topfp, unsigned int *topgp, unsigned int *tophp)
DdNode * Cudd_bddOr(DdManager *dd, DdNode *f, DdNode *g)
DdNode * Cudd_bddXnorLimit(DdManager *dd, DdNode *f, DdNode *g, unsigned int limit)
#define DD_BDD_ITE_CONSTANT_TAG
DdNode * cuddCacheLookup2(DdManager *table, DdNode *(*)(DdManager *, DdNode *, DdNode *), DdNode *f, DdNode *g)
#define Cudd_IsConstant(node)
#define Cudd_Regular(node)
static int bddVarToCanonicalSimple(DdManager *dd, DdNode **fp, DdNode **gp, DdNode **hp, unsigned int *topfp, unsigned int *topgp, unsigned int *tophp)
DdNode * Cudd_bddAndLimit(DdManager *dd, DdNode *f, DdNode *g, unsigned int limit)
DdNode * Cudd_bddIteConstant(DdManager *dd, DdNode *f, DdNode *g, DdNode *h)
DdNode * Cudd_bddNor(DdManager *dd, DdNode *f, DdNode *g)
static char rcsid [] DD_UNUSED
static void bddVarToConst(DdNode *f, DdNode **gp, DdNode **hp, DdNode *one)
#define Cudd_IsComplement(node)
DdNode *(* DD_CTFP)(DdManager *, DdNode *, DdNode *)
DdNode * Cudd_bddXnor(DdManager *dd, DdNode *f, DdNode *g)
DdNode * Cudd_bddXor(DdManager *dd, DdNode *f, DdNode *g)
int Cudd_bddLeq(DdManager *dd, DdNode *f, DdNode *g)
DdNode * Cudd_bddIteLimit(DdManager *dd, DdNode *f, DdNode *g, DdNode *h, unsigned int limit)
DdNode * cuddCacheLookup(DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h)
void cuddCacheInsert2(DdManager *table, DdNode *(*)(DdManager *, DdNode *, DdNode *), DdNode *f, DdNode *g, DdNode *data)
DdNode * cuddBddIntersectRecur(DdManager *dd, DdNode *f, DdNode *g)
DdNode * cuddBddXorRecur(DdManager *manager, DdNode *f, DdNode *g)
DdNode * cuddConstantLookup(DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h)
DdNode * Cudd_bddNand(DdManager *dd, DdNode *f, DdNode *g)
#define Cudd_NotCond(node, c)
DdNode * Cudd_bddOrLimit(DdManager *dd, DdNode *f, DdNode *g, unsigned int limit)
DdNode * Cudd_bddAnd(DdManager *dd, DdNode *f, DdNode *g)
void cuddCacheInsert(DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h, DdNode *data)
DdNode * cuddBddAndRecur(DdManager *manager, DdNode *f, DdNode *g)
DdNode * Cudd_bddIte(DdManager *dd, DdNode *f, DdNode *g, DdNode *h)
DdNode * cuddUniqueInter(DdManager *unique, int index, DdNode *T, DdNode *E)
DdNode * cuddBddIteRecur(DdManager *dd, DdNode *f, DdNode *g, DdNode *h)