|
@ -535,19 +535,34 @@ cuddBddExistAbstractRepresentativeRecur( |
|
|
/* Cube is guaranteed to be a cube at this point. */ |
|
|
/* Cube is guaranteed to be a cube at this point. */ |
|
|
if (F == one) { |
|
|
if (F == one) { |
|
|
if (fIsNegated) { |
|
|
if (fIsNegated) { |
|
|
// printf("return in preprocessing...\n"); |
|
|
|
|
|
|
|
|
// printf("return in preprocessing...\n"); |
|
|
return f; |
|
|
return f; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (cube == one) { |
|
|
if (cube == one) { |
|
|
// printf("return in preprocessing...\n"); |
|
|
|
|
|
|
|
|
// printf("return in preprocessing...\n"); |
|
|
return one; |
|
|
return one; |
|
|
|
|
|
} else { |
|
|
|
|
|
res = cuddBddExistAbstractRepresentativeRecur(manager, f, cuddT(cube)); |
|
|
|
|
|
if (res == NULL) { |
|
|
|
|
|
return(NULL); |
|
|
|
|
|
} |
|
|
|
|
|
cuddRef(res); |
|
|
|
|
|
|
|
|
|
|
|
res1 = cuddBddIteRecur(manager, manager->vars[cube->index], zero, res); |
|
|
|
|
|
if (res1 == NULL) { |
|
|
|
|
|
Cudd_IterDerefBdd(manager,res); |
|
|
|
|
|
Cudd_IterDerefBdd(manager,zero); |
|
|
|
|
|
return(NULL); |
|
|
|
|
|
} |
|
|
|
|
|
cuddDeref(res); |
|
|
|
|
|
return(res1); |
|
|
} |
|
|
} |
|
|
} else if (cube == one) { |
|
|
} else if (cube == one) { |
|
|
// printf("return in preprocessing...\n"); |
|
|
|
|
|
|
|
|
// printf("return in preprocessing...\n"); |
|
|
return f; |
|
|
return f; |
|
|
} |
|
|
} |
|
|
/* From now on, cube is non-constant, but f might be constant. */ |
|
|
|
|
|
|
|
|
/* From now on, cube and f are non-constant. */ |
|
|
|
|
|
|
|
|
// printf("F perm %i and cube perm %i\n", manager->perm[F->index], manager->perm[cube->index]); |
|
|
// printf("F perm %i and cube perm %i\n", manager->perm[F->index], manager->perm[cube->index]); |
|
|
|
|
|
|
|
|