60 p->vCis = Vec_PtrAlloc( 100 );
61 p->vCos = Vec_PtrAlloc( 100 );
62 p->vObjs = Vec_PtrAlloc( 100 );
63 p->vTemp = Vec_PtrAlloc( 100 );
64 p->vVisited = Vec_PtrAlloc( 100 );
66 if (
p->pPars->fTruth )
68 for ( v = 0; v <=
p->pPars->nLutSize; v++ )
69 p->nTruth6Words[v] = Abc_Truth6WordNum( v );
70 for ( v = 6; v <= Abc_MaxInt(6,
p->pPars->nLutSize); v++ )
71 p->vTtMem[v] = Vec_MemAllocForTT( v, pPars->
fUseTtPerm );
72 for ( v = 0; v < 6; v++ )
73 p->vTtMem[v] =
p->vTtMem[6];
74 if (
p->pPars->fDelayOpt || pPars->
nGateSize > 0 )
76 for ( v = 6; v <= Abc_MaxInt(6,
p->pPars->nLutSize); v++ )
77 p->vTtIsops[v] = Vec_WecAlloc( 1000 );
78 for ( v = 6; v <= Abc_MaxInt(6,
p->pPars->nLutSize); v++ )
79 Vec_WecInit(
p->vTtIsops[v], 2 );
80 for ( v = 0; v < 6; v++ )
81 p->vTtIsops[v] =
p->vTtIsops[6];
85 p->vCover = Vec_IntAlloc( 0 );
86 p->vArray = Vec_IntAlloc( 1000 );
89 p->nPermWords =
p->pPars->fUsePerm? If_CutPermWords(
p->pPars->nLutSize ) : 0;
90 p->nObjBytes =
sizeof(
If_Obj_t) +
sizeof(
int) * (
p->pPars->nLutSize +
p->nPermWords);
91 p->nCutBytes =
sizeof(
If_Cut_t) +
sizeof(
int) * (
p->pPars->nLutSize +
p->nPermWords);
92 p->nSetBytes =
sizeof(
If_Set_t) + (
sizeof(
If_Cut_t *) +
p->nCutBytes) * (
p->pPars->nCutsMax + 1);
95 if (
p->pPars->fVerbose )
96 Abc_Print( 1,
"K = %d. Memory (bytes): Truth = %4d. Cut = %4d. Obj = %4d. Set = %4d. CutMin = %s\n",
97 p->pPars->nLutSize, 8 *
p->nTruth6Words[
p->pPars->nLutSize],
p->nCutBytes,
p->nObjBytes,
p->nSetBytes,
p->pPars->fCutMin?
"yes":
"no" );
99 p->puTemp[0] =
p->pPars->fTruth?
ABC_ALLOC(
unsigned, 8 *
p->nTruth6Words[
p->pPars->nLutSize] ) : NULL;
100 p->puTemp[1] =
p->pPars->fTruth?
p->puTemp[0] +
p->nTruth6Words[
p->pPars->nLutSize]*2 : NULL;
101 p->puTemp[2] =
p->pPars->fTruth?
p->puTemp[1] +
p->nTruth6Words[
p->pPars->nLutSize]*2 : NULL;
102 p->puTemp[3] =
p->pPars->fTruth?
p->puTemp[2] +
p->nTruth6Words[
p->pPars->nLutSize]*2 : NULL;
103 p->puTempW =
p->pPars->fTruth?
ABC_ALLOC(
word,
p->nTruth6Words[
p->pPars->nLutSize] ) : NULL;
106 for ( v = 6; v <= Abc_MaxInt(6,
p->pPars->nLutSize); v++ )
108 p->vTtDsds[v] = Vec_IntAlloc( 1000 );
109 Vec_IntPush(
p->vTtDsds[v], 0 );
110 Vec_IntPush(
p->vTtDsds[v], 2 );
111 p->vTtPerms[v] = Vec_StrAlloc( 10000 );
113 Vec_StrWriteEntry(
p->vTtPerms[v], v, 0 );
115 for ( v = 0; v < 6; v++ )
117 p->vTtDsds[v] =
p->vTtDsds[6];
118 p->vTtPerms[v] =
p->vTtPerms[6];
123 p->vPairHash = Hash_IntManStart( 10000 );
124 p->vPairPerms = Vec_StrAlloc( 10000 );
125 Vec_StrFill(
p->vPairPerms,
p->pPars->nLutSize, 0 );
126 p->vPairRes = Vec_IntAlloc( 1000 );
127 Vec_IntPush(
p->vPairRes, -1 );
128 for ( v = 6; v <= Abc_MaxInt(6,
p->pPars->nLutSize); v++ )
129 p->vTtOccurs[v] = Vec_IntAlloc( 1000 );
130 for ( v = 0; v < 6; v++ )
131 p->vTtOccurs[v] =
p->vTtOccurs[6];
132 for ( v = 6; v <= Abc_MaxInt(6,
p->pPars->nLutSize); v++ )
133 Vec_IntPushTwo(
p->vTtOccurs[v], 0, 0 );
137 for ( v = 6; v <= Abc_MaxInt(6,
p->pPars->nLutSize); v++ )
139 p->vTtVars[v] = Vec_StrAlloc( 1000 );
140 Vec_StrPush(
p->vTtVars[v], 0 );
141 Vec_StrPush(
p->vTtVars[v], 0 );
143 for ( v = 0; v < 6; v++ )
144 p->vTtVars[v] =
p->vTtVars[6];
148 for ( v = 6; v <= Abc_MaxInt(6,
p->pPars->nLutSize); v++ )
150 p->vTtDecs[v] = Vec_IntAlloc( 1000 );
151 Vec_IntPush(
p->vTtDecs[v], 0 );
152 Vec_IntPush(
p->vTtDecs[v], 0 );
154 for ( v = 0; v < 6; v++ )
155 p->vTtDecs[v] =
p->vTtDecs[6];
160 extern int Bat_ManCellFuncLookup(
void * pMan,
unsigned * pTruth,
int nVars,
int nLeaves,
char * pStr );
167 p->pConst1 = If_ManSetupObj(
p );
169 p->pConst1->fPhase = 1;
216 if (
p->pPars->fVerbose &&
p->vCutData )
218 if (
p->pPars->fVerbose &&
p->pPars->fTruth )
220 int nUnique = 0, nMemTotal = 0;
221 for ( i = 6; i <= Abc_MaxInt(6,
p->pPars->nLutSize); i++ )
222 nUnique += Vec_MemEntryNum(
p->vTtMem[i]);
223 for ( i = 6; i <= Abc_MaxInt(6,
p->pPars->nLutSize); i++ )
224 nMemTotal += (
int)Vec_MemMemory(
p->vTtMem[i]);
225 printf(
"Unique truth tables = %d Memory = %.2f MB ", nUnique, 1.0 * nMemTotal / (1<<20) );
226 Abc_PrintTime( 1,
"Time",
p->timeCache[4] );
227 if (
p->nCacheMisses )
229 printf(
"Cache hits = %d. Cache misses = %d (%.2f %%)\n",
p->nCacheHits,
p->nCacheMisses, 100.0 *
p->nCacheMisses / (
p->nCacheHits +
p->nCacheMisses) );
230 Abc_PrintTime( 1,
"Non-DSD ",
p->timeCache[0] );
231 Abc_PrintTime( 1,
"DSD hits ",
p->timeCache[1] );
232 Abc_PrintTime( 1,
"DSD misses",
p->timeCache[2] );
233 Abc_PrintTime( 1,
"TOTAL ",
p->timeCache[0] +
p->timeCache[1] +
p->timeCache[2] );
234 Abc_PrintTime( 1,
"Canon ",
p->timeCache[3] );
237 if (
p->pPars->fVerbose &&
p->nCutsUselessAll )
239 for ( i = 0; i <= 16; i++ )
240 if (
p->nCutsUseless[i] )
241 Abc_Print( 1,
"Useless cuts %2d = %9d (out of %9d) (%6.2f %%)\n", i,
p->nCutsUseless[i],
p->nCutsCount[i], 100.0*
p->nCutsUseless[i]/Abc_MaxInt(
p->nCutsCount[i],1) );
242 Abc_Print( 1,
"Useless cuts all = %9d (out of %9d) (%6.2f %%)\n",
p->nCutsUselessAll,
p->nCutsCountAll, 100.0*
p->nCutsUselessAll/Abc_MaxInt(
p->nCutsCountAll,1) );
248 if (
p->pPars->fUseDsd && (
p->nCountNonDec[0] ||
p->nCountNonDec[1]) )
249 printf(
"NonDec0 = %d. NonDec1 = %d.\n",
p->nCountNonDec[0],
p->nCountNonDec[1] );
250 Vec_IntFreeP( &
p->vCoAttrs );
251 Vec_PtrFree(
p->vCis );
252 Vec_PtrFree(
p->vCos );
253 Vec_PtrFree(
p->vObjs );
254 Vec_PtrFree(
p->vTemp );
255 Vec_IntFreeP( &
p->vCover );
256 Vec_IntFreeP( &
p->vArray );
257 Vec_WrdFreeP( &
p->vAnds );
258 Vec_WrdFreeP( &
p->vAndGate );
259 Vec_WrdFreeP( &
p->vOrGate );
260 Vec_PtrFreeP( &
p->vObjsRev );
261 Vec_PtrFreeP( &
p->vLatchOrder );
262 Vec_IntFreeP( &
p->vLags );
263 Vec_IntFreeP( &
p->vDump );
264 for ( i = 6; i <= Abc_MaxInt(6,
p->pPars->nLutSize); i++ )
265 Vec_IntFreeP( &
p->vTtDsds[i] );
266 for ( i = 6; i <= Abc_MaxInt(6,
p->pPars->nLutSize); i++ )
267 Vec_StrFreeP( &
p->vTtPerms[i] );
268 for ( i = 6; i <= Abc_MaxInt(6,
p->pPars->nLutSize); i++ )
269 Vec_StrFreeP( &
p->vTtVars[i] );
270 for ( i = 6; i <= Abc_MaxInt(6,
p->pPars->nLutSize); i++ )
271 Vec_IntFreeP( &
p->vTtDecs[i] );
272 Vec_IntFreeP( &
p->vCutData );
273 Vec_IntFreeP( &
p->vPairRes );
274 Vec_StrFreeP( &
p->vPairPerms );
275 Vec_PtrFreeP( &
p->vVisited );
276 Vec_StrFreeP( &
p->vMarks );
277 Vec_IntFreeP( &
p->vVisited2 );
279 Hash_IntManStop(
p->vPairHash );
280 for ( i = 6; i <= Abc_MaxInt(6,
p->pPars->nLutSize); i++ )
281 Vec_MemHashFree(
p->vTtMem[i] );
282 for ( i = 6; i <= Abc_MaxInt(6,
p->pPars->nLutSize); i++ )
283 Vec_MemFreeP( &
p->vTtMem[i] );
284 for ( i = 6; i <= Abc_MaxInt(6,
p->pPars->nLutSize); i++ )
285 Vec_WecFreeP( &
p->vTtIsops[i] );
286 for ( i = 6; i <= Abc_MaxInt(6,
p->pPars->nLutSize); i++ )
287 Vec_IntFreeP( &
p->vTtOccurs[i] );
291 Vec_MemHashFree(
p->vTtMem6 );
292 Vec_MemFreeP( &
p->vTtMem6 );
304 Vec_IntFree(
p->vSwitching );
305 if (
p->pPars->fUseBat )
317 if (
p->pMemEntries )