FUNCTION DEFINITIONS ///.
51{
52 int Counter, i;
53
54
58
59 p->nNodesBeg = Cudd_SharingSize( Funcs, nFuncs );
60
62
64
66 for ( i = 0; i < dd->size; i++ )
67 p->nSupp +=
p->pSupp[i];
68
69
71 {
72 for ( i = 0; i < nFuncs; i++ )
73 {
74 FuncsRes[i] = Funcs[i]; Cudd_Ref( FuncsRes[i] );
75 }
76 return;
77 }
78
79
80
81 Counter = 0;
82 for ( i = 0; i < dd->size; i++ )
83 if (
p->pSupp[ dd->invperm[i] ] )
84 {
85 p->pMapToPlanes[ dd->invperm[i] ] = Counter;
86 p->pMapToDdVarsOrig[Counter] = dd->invperm[i];
88 p->pMapToDdVarsFinal[Counter] = dd->invperm[i];
89 else
90 p->pMapToDdVarsFinal[Counter] = dd->invperm[Counter];
91 p->pOrderInt[Counter] = Counter;
92 Counter++;
93 }
94
95
100
101 for ( i = 0; i < nFuncs; i++ )
103 assert(
p->nNodesBeg ==
p->nNodesCur );
104
105 if ( !
p->fThisIsAdd &&
p->fMinWidth )
106 {
107 printf( "An important message from the REO reordering engine:\n" );
108 printf( "The BDD given to the engine for reordering contains complemented edges.\n" );
109 printf( "Currently, such BDDs cannot be reordered for the minimum width.\n" );
110 printf( "Therefore, minimization for the number of BDD nodes is performed.\n" );
111 fflush( stdout );
114 }
115
118 else if (
p->fMinApl )
120 else
122
124 {
125 printf( "INITIAL:\n" );
128 else if (
p->fMinApl )
130 else
132 }
133
135
138 for ( i = 0; i <
p->nIters; i++ )
139 {
141
143 {
144 printf( "ITER #%d:\n", i+1 );
147 else if (
p->fMinApl )
149 else
151 }
152
154 {
155 p->nWidthEnd =
p->nWidthCur;
156 assert(
p->nWidthEnd <=
p->nWidthBeg );
157 if (
p->nWidthEnd ==
p->nWidthBeg )
158 break;
159 }
160 else if (
p->fMinApl )
161 {
162 p->nAplEnd =
p->nAplCur;
164 if (
p->nAplEnd ==
p->nAplBeg )
165 break;
166 }
167 else
168 {
169 p->nNodesEnd =
p->nNodesCur;
170 assert(
p->nNodesEnd <=
p->nNodesBeg );
171 if (
p->nNodesEnd ==
p->nNodesBeg )
172 break;
173 }
174 }
177
180
181
185
186 for ( i = 0; i < nFuncs; i++ )
187 {
189 }
190
191 for ( i = 0; i <
p->nRefNodes; i++ )
192 Cudd_RecursiveDeref( dd,
p->pRefNodes[i] );
193
194 for ( i = 0; i < nFuncs; i++ )
195 {
196 assert( reoRecursiveDeref(
p->pTops[i] ) );
197 }
198 assert( reoCheckZeroRefs( &(
p->pPlanes[
p->nSupp]) ) );
199
200
202 {
203
204
205
206
207
208
209 for ( i = 0; i <
p->nSupp; i++ )
210 p->pOrder[
p->pMapToDdVarsFinal[i] ] =
p->pMapToDdVarsOrig[
p->pOrderInt[i] ];
211 }
212
214 {
215 int fVerification;
216 DdNode * FuncRemapped;
217 int * pOrder;
218
219 if (
p->pOrder == NULL )
220 {
222 for ( i = 0; i <
p->nSupp; i++ )
223 pOrder[
p->pMapToDdVarsFinal[i] ] =
p->pMapToDdVarsOrig[
p->pOrderInt[i] ];
224 }
225 else
227
228 fVerification = 1;
229 for ( i = 0; i < nFuncs; i++ )
230 {
231
233 FuncRemapped = Cudd_addPermute( dd, FuncsRes[i], pOrder );
234 else
235 FuncRemapped = Cudd_bddPermute( dd, FuncsRes[i], pOrder );
236 Cudd_Ref( FuncRemapped );
237
238 if ( FuncRemapped != Funcs[i] )
239 {
240 fVerification = 0;
241 printf( "REO: Internal verification has failed!\n" );
242 fflush( stdout );
243 }
244 Cudd_RecursiveDeref( dd, FuncRemapped );
245 }
246 if ( fVerification )
247 printf( "REO: Internal verification is okay!\n" );
248
249 if (
p->pOrder == NULL )
251 }
252
253
254 for ( i = 0; i <=
p->nSupp; i++ )
256}
#define ABC_ALLOC(type, num)
void reoResizeStructures(reo_man *p, int nDdVarsMax, int nNodesMax, int nFuncs)
reo_unit * reoTransferNodesToUnits_rec(reo_man *p, DdNode *F)
DECLARATIONS ///.
void reoProfileWidthStart(reo_man *p)
void reoUnitsRecycleUnitList(reo_man *p, reo_plane *pPlane)
void reoReorderSift(reo_man *p)
DECLARATIONS ///.
void reoProfileNodesStart(reo_man *p)
DECLARATIONS ///.
void reoProfileAplPrint(reo_man *p)
DdNode * reoTransferUnitsToNodes_rec(reo_man *p, reo_unit *pUnit)
void reoProfileWidthPrint(reo_man *p)
void reoProfileAplStart(reo_man *p)
void reoProfileNodesPrint(reo_man *p)