ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
abcDress2.c
Go to the documentation of this file.
1
20
21#include "base/abc/abc.h"
22#include "aig/aig/aig.h"
23#include "proof/dch/dch.h"
24#include "aig/gia/giaAig.h"
25
27
28
29/*
30 Procedure Abc_NtkDressComputeEquivs() implemented in this file computes
31 equivalence classes of objects of the two networks (pNtk1 and pNtk2).
32
33 It is possible that pNtk1 is the network before synthesis and pNtk2 is the
34 network after synthesis. The equiv classes of nodes from these networks
35 can be used to transfer the names from pNtk1 to pNtk2, or vice versa.
36
37 The above procedure returns the array (Vec_Ptr_t) of integer arrays (Vec_Int_t).
38 Each of the integer arrays contains entries of one equivalence class.
39 Each entry (EquivId) contains the following information:
40 (1) object ID, which is a number 'num', such that 0 <= 'num' < MaxId
41 where MaxId is the largest ID of nodes in a network
42 (2) the polarity of the node, which is a binary number, 0 or 1, giving
43 the node's value when pattern (000...0) is applied to the inputs
44 (3) the number of the network, 0 or 1, which stands for pNtk1 and pNtk2, respectively
45 The first array in the array of arrays is empty, or contains nodes that
46 are equivalent to a constant (if such nodes appear in the network).
47
48 Given EquivID defined above, use the APIs below to get its components.
49*/
50
51// declarations to be added to the application code
52extern int Abc_ObjEquivId2ObjId( int EquivId );
53extern int Abc_ObjEquivId2Polar( int EquivId );
54extern int Abc_ObjEquivId2NtkId( int EquivId );
55
56// definition that may remain in this file
57int Abc_ObjEquivId2ObjId( int EquivId ) { return EquivId >> 2; }
58int Abc_ObjEquivId2Polar( int EquivId ) { return (EquivId >> 1) & 1; }
59int Abc_ObjEquivId2NtkId( int EquivId ) { return EquivId & 1; }
60
64
65extern Aig_Man_t * Abc_NtkToDar( Abc_Ntk_t * pNtk, int fExors, int fRegisters );
66extern void Dch_ComputeEquivalences( Aig_Man_t * pAig, Dch_Pars_t * pPars );
67
71
84{
85 Aig_Man_t * pNew;
86 Aig_Obj_t * pObj;
87 int i;
88 assert( Aig_ManCiNum(p1) == Aig_ManCiNum(p2) );
89 assert( Aig_ManCoNum(p1) == Aig_ManCoNum(p2) );
90 pNew = Aig_ManStart( Aig_ManObjNumMax(p1) + Aig_ManObjNumMax(p2) );
91 // add first AIG
92 Aig_ManConst1(p1)->pData = Aig_ManConst1(pNew);
93 Aig_ManForEachCi( p1, pObj, i )
94 pObj->pData = Aig_ObjCreateCi( pNew );
95 Aig_ManForEachNode( p1, pObj, i )
96 pObj->pData = Aig_And( pNew, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj) );
97 // add second AIG
98 Aig_ManConst1(p2)->pData = Aig_ManConst1(pNew);
99 Aig_ManForEachCi( p2, pObj, i )
100 pObj->pData = Aig_ManCi( pNew, i );
101 Aig_ManForEachNode( p2, pObj, i )
102 pObj->pData = Aig_And( pNew, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj) );
103 // add the outputs
104 for ( i = 0; i < Aig_ManCoNum(p1); i++ )
105 {
106 Aig_ObjCreateCo( pNew, Aig_ObjChild0Copy(Aig_ManCo(p1, i)) );
107 Aig_ObjCreateCo( pNew, Aig_ObjChild0Copy(Aig_ManCo(p2, i)) );
108 }
109 Aig_ManCleanup( pNew );
110 return pNew;
111}
112
125{
126 Abc_Obj_t * pObj, * pAnd;
127 int i;
128 // each node refers to the the strash copy whose polarity is set
129 Abc_NtkForEachObj( pNtk, pObj, i )
130 {
131 if ( (pAnd = Abc_ObjRegular(pObj->pCopy)) && Abc_ObjType(pAnd) != ABC_OBJ_NONE ) // strashed object is present and legal
132 pObj->fPhase = pAnd->fPhase ^ Abc_ObjIsComplement(pObj->pCopy);
133 }
134}
135
148{
149 Vec_Int_t * vId2Lit;
150 Abc_Obj_t * pObj, * pAnd;
151 Aig_Obj_t * pObjMan, * pObjMiter, * pObjRepr;
152 int i;
153 vId2Lit = Vec_IntAlloc( 0 );
154 Vec_IntFill( vId2Lit, Abc_NtkObjNumMax(pNtk), -1 );
155 Abc_NtkForEachNode( pNtk, pObj, i )
156 {
157 // get the pointer to the miter node corresponding to pObj
158 if ( (pAnd = Abc_ObjRegular(pObj->pCopy)) && Abc_ObjType(pAnd) != ABC_OBJ_NONE && // strashed node is present and legal
159 (pObjMan = Aig_Regular((Aig_Obj_t *)pAnd->pCopy)) && Aig_ObjType(pObjMan) != AIG_OBJ_NONE && // AIG node is present and legal
160 (pObjMiter = Aig_Regular((Aig_Obj_t *)pObjMan->pData)) && Aig_ObjType(pObjMiter) != AIG_OBJ_NONE ) // miter node is present and legal
161 {
162 // get the representative of the miter node
163 pObjRepr = Aig_ObjRepr( pMiter, pObjMiter );
164 pObjRepr = pObjRepr? pObjRepr : pObjMiter;
165 // map pObj (whose ID is i) into the repr node ID (i.e. equiv class)
166 Vec_IntWriteEntry( vId2Lit, i, Aig_ObjId(pObjRepr) );
167 }
168 }
169 return vId2Lit;
170}
171
183Vec_Int_t * Abc_ObjDressClass( Vec_Ptr_t * vRes, Vec_Int_t * vClass2Num, int Class )
184{
185 int ClassNumber;
186 assert( Class > 0 );
187 ClassNumber = Vec_IntEntry( vClass2Num, Class );
188 assert( ClassNumber != 0 );
189 if ( ClassNumber > 0 )
190 return (Vec_Int_t *)Vec_PtrEntry( vRes, ClassNumber ); // previous class
191 // create new class
192 Vec_IntWriteEntry( vClass2Num, Class, Vec_PtrSize(vRes) );
193 Vec_PtrPush( vRes, Vec_IntAlloc(4) );
194 return (Vec_Int_t *)Vec_PtrEntryLast( vRes );
195}
196
210int Abc_ObjDressMakeId( Abc_Ntk_t * pNtk, int ObjId, int iNtk )
211{
212 return (ObjId << 2) | (Abc_NtkObj(pNtk,ObjId)->fPhase << 1) | iNtk;
213}
214
227{
228 Vec_Ptr_t * vRes;
229 Vec_Int_t * vId2Lit1, * vId2Lit2, * vCounts0, * vCounts1, * vClassC, * vClass2Num;
230 int i, Class;
231 // start the classes
232 vRes = Vec_PtrAlloc( 1000 );
233 // set polarity of the nodes
236 // create mapping of node IDs of pNtk1/pNtk2 into the IDs of equiv classes of pMiter
237 vId2Lit1 = Abc_NtkDressMapClasses( pMiter, pNtk1 );
238 vId2Lit2 = Abc_NtkDressMapClasses( pMiter, pNtk2 );
239 // count the number of nodes in each equivalence class
240 vCounts0 = Vec_IntStart( Aig_ManObjNumMax(pMiter) );
241 Vec_IntForEachEntry( vId2Lit1, Class, i )
242 if ( Class >= 0 )
243 Vec_IntAddToEntry( vCounts0, Class, 1 );
244 vCounts1 = Vec_IntStart( Aig_ManObjNumMax(pMiter) );
245 Vec_IntForEachEntry( vId2Lit2, Class, i )
246 if ( Class >= 0 )
247 Vec_IntAddToEntry( vCounts1, Class, 1 );
248 // get the costant class
249 vClassC = Vec_IntAlloc( 100 );
250 Vec_IntForEachEntry( vId2Lit1, Class, i )
251 if ( Class == 0 )
252 Vec_IntPush( vClassC, Abc_ObjDressMakeId(pNtk1, i, 0) );
253 Vec_IntForEachEntry( vId2Lit2, Class, i )
254 if ( Class == 0 )
255 Vec_IntPush( vClassC, Abc_ObjDressMakeId(pNtk2, i, 1) );
256 Vec_PtrPush( vRes, vClassC );
257 // map repr node IDs into class numbers
258 vClass2Num = Vec_IntAlloc( 0 );
259 Vec_IntFill( vClass2Num, Aig_ManObjNumMax(pMiter), -1 );
260 // keep classes having at least one element from pNtk1 and one from pNtk2
261 Vec_IntForEachEntry( vId2Lit1, Class, i )
262 if ( Class > 0 && Vec_IntEntry(vCounts0, Class) && Vec_IntEntry(vCounts1, Class) )
263 Vec_IntPush( Abc_ObjDressClass(vRes, vClass2Num, Class), Abc_ObjDressMakeId(pNtk1, i, 0) );
264 Vec_IntForEachEntry( vId2Lit2, Class, i )
265 if ( Class > 0 && Vec_IntEntry(vCounts0, Class) && Vec_IntEntry(vCounts1, Class) )
266 Vec_IntPush( Abc_ObjDressClass(vRes, vClass2Num, Class), Abc_ObjDressMakeId(pNtk2, i, 1) );
267 // package them accordingly
268 Vec_IntFree( vClass2Num );
269 Vec_IntFree( vCounts0 );
270 Vec_IntFree( vCounts1 );
271 Vec_IntFree( vId2Lit1 );
272 Vec_IntFree( vId2Lit2 );
273 return vRes;
274}
275
288{
289 extern Gia_Man_t * Cec4_ManSimulateTest3( Gia_Man_t * p, int nBTLimit, int fVerbose );
290 Gia_Man_t * pGia = Gia_ManFromAigSimple(pMiter);
291 Gia_Man_t * pNew = Cec4_ManSimulateTest3( pGia, pPars->nBTLimit, pPars->fVerbose );
292 int i, k;
293 ABC_FREE( pMiter->pReprs );
294 pMiter->pReprs = ABC_CALLOC( Aig_Obj_t *, Aig_ManObjNumMax(pMiter) );
295 Gia_ManForEachClass( pGia, i )
296 Gia_ClassForEachObj1( pGia, i, k )
297 pMiter->pReprs[k] = Aig_ManObj( pMiter, i );
298 Gia_ManStop( pGia );
299 Gia_ManStop( pNew );
300}
301
317Vec_Ptr_t * Abc_NtkDressComputeEquivs( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, int nConflictLimit, int fVerbose )
318{
319 Dch_Pars_t Pars, * pPars = &Pars;
320 Abc_Ntk_t * pAig1, * pAig2;
321 Aig_Man_t * pMan1, * pMan2, * pMiter;
322 Vec_Ptr_t * vRes;
323 assert( !Abc_NtkIsStrash(pNtk1) );
324 assert( !Abc_NtkIsStrash(pNtk2) );
325 // convert network into AIG
326 pAig1 = Abc_NtkStrash( pNtk1, 1, 1, 0 );
327 pAig2 = Abc_NtkStrash( pNtk2, 1, 1, 0 );
328 pMan1 = Abc_NtkToDar( pAig1, 0, 0 );
329 pMan2 = Abc_NtkToDar( pAig2, 0, 0 );
330 // derive the miter
331 pMiter = Aig_ManCreateDualOutputMiter( pMan1, pMan2 );
332 // set up parameters for SAT sweeping
334 pPars->nBTLimit = nConflictLimit;
335 pPars->fVerbose = fVerbose;
336 // perform SAT sweeping
337 Dch_ComputeEquivalences2( pMiter, pPars );
338 // now, pMiter is annotated with the equivl class info
339 // convert this info into the resulting array
340 vRes = Abc_NtkDressMapIds( pMiter, pNtk1, pNtk2 );
341 Aig_ManStop( pMiter );
342 Aig_ManStop( pMan1 );
343 Aig_ManStop( pMan2 );
344 Abc_NtkDelete( pAig1 );
345 Abc_NtkDelete( pAig2 );
346 return vRes;
347}
348
361{
362 Vec_Int_t * vClass;
363 int i, k, Entry;
364 Vec_PtrForEachEntry( Vec_Int_t *, vRes, vClass, i )
365 {
366 printf( "Class %5d : ", i );
367 printf( "Num =%5d ", Vec_IntSize(vClass) );
368 Vec_IntForEachEntry( vClass, Entry, k )
369 printf( "%5d%c%d ",
370 Abc_ObjEquivId2ObjId(Entry),
371 Abc_ObjEquivId2Polar(Entry)? '-':'+',
372 Abc_ObjEquivId2NtkId(Entry) );
373 printf( "\n" );
374 }
375}
376
388void Abc_NtkDressPrintStats( Vec_Ptr_t * vRes, int nNodes0, int nNodes1, abctime Time )
389{
390 Vec_Int_t * vClass;
391 int i, k, Entry;
392 int NegAll[2] = {0}, PosAll[2] = {0}, PairsAll = 0, PairsOne = 0;
393 int Pos[2], Neg[2];
394 // count the number of equivalences in each class
395 Vec_PtrForEachEntry( Vec_Int_t *, vRes, vClass, i )
396 {
397 Pos[0] = Pos[1] = 0;
398 Neg[0] = Neg[1] = 0;
399 Vec_IntForEachEntry( vClass, Entry, k )
400 {
401 if ( Abc_ObjEquivId2NtkId(Entry) )
402 {
403 if ( Abc_ObjEquivId2Polar(Entry) )
404 Neg[1]++; // negative polarity in network 1
405 else
406 Pos[1]++; // positive polarity in network 1
407 }
408 else
409 {
410 if ( Abc_ObjEquivId2Polar(Entry) )
411 Neg[0]++; // negative polarity in network 0
412 else
413 Pos[0]++; // positive polarity in network 0
414 }
415 }
416 PosAll[0] += Pos[0]; // total positive polarity in network 0
417 PosAll[1] += Pos[1]; // total positive polarity in network 1
418 NegAll[0] += Neg[0]; // total negative polarity in network 0
419 NegAll[1] += Neg[1]; // total negative polarity in network 1
420
421 // assuming that the name can be transferred to only one node
422 PairsAll += Abc_MinInt(Neg[0] + Pos[0], Neg[1] + Pos[1]);
423 PairsOne += Abc_MinInt(Neg[0], Neg[1]) + Abc_MinInt(Pos[0], Pos[1]);
424 }
425 printf( "Total number of equiv classes = %7d.\n", Vec_PtrSize(vRes) );
426 printf( "Participating nodes from both networks = %7d.\n", NegAll[0]+PosAll[0]+NegAll[1]+PosAll[1] );
427 printf( "Participating nodes from the first network = %7d. (%7.2f %% of nodes)\n", NegAll[0]+PosAll[0], 100.0*(NegAll[0]+PosAll[0])/(nNodes0+1) );
428 printf( "Participating nodes from the second network = %7d. (%7.2f %% of nodes)\n", NegAll[1]+PosAll[1], 100.0*(NegAll[1]+PosAll[1])/(nNodes1+1) );
429 printf( "Node pairs (any polarity) = %7d. (%7.2f %% of names can be moved)\n", PairsAll, 100.0*PairsAll/(nNodes0+1) );
430 printf( "Node pairs (same polarity) = %7d. (%7.2f %% of names can be moved)\n", PairsOne, 100.0*PairsOne/(nNodes0+1) );
431 ABC_PRT( "Total runtime", Time );
432}
433
445void Abc_NtkDress2Transfer( Abc_Ntk_t * pNtk0, Abc_Ntk_t * pNtk1, Vec_Ptr_t * vRes, int fVerbose )
446{
447 Vec_Int_t * vClass;
448 Abc_Obj_t * pObj0, * pObj1;
449 int i, k, fComp0, fComp1, Entry;
450 int CounterInv = 0, Counter = 0;
451 char * pName;
452 Vec_PtrForEachEntry( Vec_Int_t *, vRes, vClass, i )
453 {
454 pObj0 = pObj1 = NULL;
455 fComp0 = fComp1 = 0;
456 Vec_IntForEachEntry( vClass, Entry, k )
457 {
458 if ( Abc_ObjEquivId2NtkId(Entry) )
459 {
460 pObj1 = Abc_NtkObj( pNtk1, Abc_ObjEquivId2ObjId(Entry) );
461 fComp1 = Abc_ObjEquivId2Polar(Entry);
462 }
463 else
464 {
465 pObj0 = Abc_NtkObj( pNtk0, Abc_ObjEquivId2ObjId(Entry) );
466 fComp0 = Abc_ObjEquivId2Polar(Entry);
467 }
468 }
469 if ( pObj0 == NULL || pObj1 == NULL )
470 continue;
471 // if the node already has a name, quit
472 pName = Nm_ManFindNameById( pNtk0->pManName, pObj0->Id );
473 if ( pName != NULL )
474 continue;
475 // if the other node has no name, quit
476 pName = Nm_ManFindNameById( pNtk1->pManName, pObj1->Id );
477 if ( pName == NULL )
478 continue;
479 // assign name
480 if ( fComp0 ^ fComp1 )
481 {
482 Abc_ObjAssignName( pObj0, pName, "_inv" );
483 CounterInv++;
484 }
485 else
486 {
487 Abc_ObjAssignName( pObj0, pName, NULL );
488 Counter++;
489 }
490 }
491 if ( fVerbose )
492 {
493 printf( "Total number of names assigned = %5d. (Dir = %5d. Compl = %5d.)\n",
494 Counter + CounterInv, Counter, CounterInv );
495 }
496}
497
510void Abc_NtkDress2( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, int nConflictLimit, int fVerbose )
511{
512 Vec_Ptr_t * vRes;
513 abctime clk = Abc_Clock();
514 vRes = Abc_NtkDressComputeEquivs( pNtk1, pNtk2, nConflictLimit, fVerbose );
515// Abc_NtkDressPrintEquivs( vRes );
516 Abc_NtkDressPrintStats( vRes, Abc_NtkNodeNum(pNtk1), Abc_NtkNodeNum(pNtk1), Abc_Clock() - clk );
517 Abc_NtkDress2Transfer( pNtk1, pNtk2, vRes, fVerbose );
518 Vec_VecFree( (Vec_Vec_t *)vRes );
519}
520
524
525
527
int Abc_ObjDressMakeId(Abc_Ntk_t *pNtk, int ObjId, int iNtk)
Definition abcDress2.c:210
int Abc_ObjEquivId2NtkId(int EquivId)
Definition abcDress2.c:59
ABC_NAMESPACE_IMPL_START int Abc_ObjEquivId2ObjId(int EquivId)
Definition abcDress2.c:57
Vec_Ptr_t * Abc_NtkDressComputeEquivs(Abc_Ntk_t *pNtk1, Abc_Ntk_t *pNtk2, int nConflictLimit, int fVerbose)
Definition abcDress2.c:317
Aig_Man_t * Aig_ManCreateDualOutputMiter(Aig_Man_t *p1, Aig_Man_t *p2)
FUNCTION DEFINITIONS ///.
Definition abcDress2.c:83
void Abc_NtkDress2(Abc_Ntk_t *pNtk1, Abc_Ntk_t *pNtk2, int nConflictLimit, int fVerbose)
Definition abcDress2.c:510
void Dch_ComputeEquivalences(Aig_Man_t *pAig, Dch_Pars_t *pPars)
Definition dchCore.c:136
Aig_Man_t * Abc_NtkToDar(Abc_Ntk_t *pNtk, int fExors, int fRegisters)
DECLARATIONS ///.
Definition abcDar.c:237
Vec_Int_t * Abc_ObjDressClass(Vec_Ptr_t *vRes, Vec_Int_t *vClass2Num, int Class)
Definition abcDress2.c:183
void Abc_NtkDress2Transfer(Abc_Ntk_t *pNtk0, Abc_Ntk_t *pNtk1, Vec_Ptr_t *vRes, int fVerbose)
Definition abcDress2.c:445
int Abc_ObjEquivId2Polar(int EquivId)
Definition abcDress2.c:58
void Abc_NtkDressPrintEquivs(Vec_Ptr_t *vRes)
Definition abcDress2.c:360
Vec_Ptr_t * Abc_NtkDressMapIds(Aig_Man_t *pMiter, Abc_Ntk_t *pNtk1, Abc_Ntk_t *pNtk2)
Definition abcDress2.c:226
void Abc_NtkDressMapSetPolarity(Abc_Ntk_t *pNtk)
Definition abcDress2.c:124
void Dch_ComputeEquivalences2(Aig_Man_t *pMiter, Dch_Pars_t *pPars)
Definition abcDress2.c:287
Vec_Int_t * Abc_NtkDressMapClasses(Aig_Man_t *pMiter, Abc_Ntk_t *pNtk)
Definition abcDress2.c:147
void Abc_NtkDressPrintStats(Vec_Ptr_t *vRes, int nNodes0, int nNodes1, abctime Time)
Definition abcDress2.c:388
struct Abc_Obj_t_ Abc_Obj_t
Definition abc.h:116
#define Abc_NtkForEachObj(pNtk, pObj, i)
ITERATORS ///.
Definition abc.h:449
@ ABC_OBJ_NONE
Definition abc.h:87
struct Abc_Ntk_t_ Abc_Ntk_t
Definition abc.h:115
ABC_DLL char * Abc_ObjAssignName(Abc_Obj_t *pObj, char *pName, char *pSuffix)
Definition abcNames.c:69
ABC_DLL Abc_Ntk_t * Abc_NtkStrash(Abc_Ntk_t *pNtk, int fAllNodes, int fCleanup, int fRecord)
Definition abcStrash.c:265
ABC_DLL void Abc_NtkDelete(Abc_Ntk_t *pNtk)
Definition abcNtk.c:1421
#define Abc_NtkForEachNode(pNtk, pNode, i)
Definition abc.h:464
ABC_INT64_T abctime
Definition abc_global.h:332
#define ABC_PRT(a, t)
Definition abc_global.h:255
#define ABC_CALLOC(type, num)
Definition abc_global.h:265
#define ABC_FREE(obj)
Definition abc_global.h:267
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Aig_ManStop(Aig_Man_t *p)
Definition aigMan.c:187
#define Aig_ManForEachCi(p, pObj, i)
ITERATORS ///.
Definition aig.h:393
Aig_Obj_t * Aig_And(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
Definition aigOper.c:104
Aig_Obj_t * Aig_ObjCreateCo(Aig_Man_t *p, Aig_Obj_t *pDriver)
Definition aigObj.c:66
struct Aig_Obj_t_ Aig_Obj_t
Definition aig.h:51
Aig_Man_t * Aig_ManStart(int nNodesMax)
DECLARATIONS ///.
Definition aigMan.c:47
#define Aig_ManForEachNode(p, pObj, i)
Definition aig.h:413
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
Definition aig.h:50
int Aig_ManCleanup(Aig_Man_t *p)
Definition aigMan.c:265
Aig_Obj_t * Aig_ObjCreateCi(Aig_Man_t *p)
DECLARATIONS ///.
Definition aigObj.c:45
@ AIG_OBJ_NONE
Definition aig.h:58
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
typedefABC_NAMESPACE_HEADER_START struct Dch_Pars_t_ Dch_Pars_t
INCLUDES ///.
Definition dch.h:43
void Dch_ManSetDefaultParams(Dch_Pars_t *p)
DECLARATIONS ///.
Definition dchCore.c:45
ush Pos
Definition deflate.h:88
Cube * p
Definition exorList.c:222
Gia_Man_t * Gia_ManFromAigSimple(Aig_Man_t *p)
Definition giaAig.c:212
void Gia_ManStop(Gia_Man_t *p)
Definition giaMan.c:82
#define Gia_ClassForEachObj1(p, i, iObj)
Definition gia.h:1109
struct Gia_Man_t_ Gia_Man_t
Definition gia.h:96
#define Gia_ManForEachClass(p, i)
Definition gia.h:1101
char * Nm_ManFindNameById(Nm_Man_t *p, int ObjId)
Definition nmApi.c:199
Nm_Man_t * pManName
Definition abc.h:160
int Id
Definition abc.h:132
Abc_Obj_t * pCopy
Definition abc.h:148
unsigned fPhase
Definition abc.h:137
void * pData
Definition aig.h:87
int fVerbose
Definition gia.h:203
#define assert(ex)
Definition util_old.h:213
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
Definition vecInt.h:54
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Definition vecPtr.h:42
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
Definition vecPtr.h:55
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.
Definition vecVec.h:42
Gia_Man_t * Cec4_ManSimulateTest3(Gia_Man_t *p, int nBTLimit, int fVerbose)
Definition cecSatG2.c:2077