abc-master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
ivy.h
Go to the documentation of this file.
1 /**CFile****************************************************************
2 
3  FileName [ivy.h]
4 
5  SystemName [ABC: Logic synthesis and verification system.]
6 
7  PackageName [And-Inverter Graph package.]
8 
9  Synopsis [External declarations.]
10 
11  Author [Alan Mishchenko]
12 
13  Affiliation [UC Berkeley]
14 
15  Date [Ver. 1.0. Started - May 11, 2006.]
16 
17  Revision [$Id: ivy.c,v 1.00 2006/05/11 00:00:00 alanmi Exp $]
18 
19 ***********************************************************************/
20 
21 #ifndef ABC__aig__ivy__ivy_h
22 #define ABC__aig__ivy__ivy_h
23 
24 
25 ////////////////////////////////////////////////////////////////////////
26 /// INCLUDES ///
27 ////////////////////////////////////////////////////////////////////////
28 
29 #include <stdio.h>
30 #include "misc/extra/extra.h"
31 #include "misc/vec/vec.h"
32 
33 ////////////////////////////////////////////////////////////////////////
34 /// PARAMETERS ///
35 ////////////////////////////////////////////////////////////////////////
36 
37 
38 
40 
41 
42 ////////////////////////////////////////////////////////////////////////
43 /// BASIC TYPES ///
44 ////////////////////////////////////////////////////////////////////////
45 
46 typedef struct Ivy_Man_t_ Ivy_Man_t;
47 typedef struct Ivy_Obj_t_ Ivy_Obj_t;
48 typedef int Ivy_Edge_t;
50 
51 // object types
52 typedef enum {
53  IVY_NONE, // 0: non-existent object
54  IVY_PI, // 1: primary input (and constant 1 node)
55  IVY_PO, // 2: primary output
56  IVY_ASSERT, // 3: assertion
57  IVY_LATCH, // 4: sequential element
58  IVY_AND, // 5: AND node
59  IVY_EXOR, // 6: EXOR node
60  IVY_BUF, // 7: buffer (temporary)
61  IVY_VOID // 8: unused object
62 } Ivy_Type_t;
63 
64 // latch initial values
65 typedef enum {
66  IVY_INIT_NONE, // 0: not a latch
67  IVY_INIT_0, // 1: zero
68  IVY_INIT_1, // 2: one
69  IVY_INIT_DC // 3: don't-care
70 } Ivy_Init_t;
71 
72 // the AIG node
73 struct Ivy_Obj_t_ // 24 bytes (32-bit) or 32 bytes (64-bit) // 10 words - 16 words
74 {
75  int Id; // integer ID
76  int TravId; // traversal ID
77  unsigned Type : 4; // object type
78  unsigned fMarkA : 1; // multipurpose mask
79  unsigned fMarkB : 1; // multipurpose mask
80  unsigned fExFan : 1; // set to 1 if last fanout added is EXOR
81  unsigned fPhase : 1; // value under 000...0 pattern
82  unsigned fFailTfo : 1; // the TFO of the failed node
83  unsigned Init : 2; // latch initial value
84  unsigned Level : 21; // logic level
85  int nRefs; // reference counter
86  Ivy_Obj_t * pFanin0; // fanin
87  Ivy_Obj_t * pFanin1; // fanin
88  Ivy_Obj_t * pFanout; // fanout
89  Ivy_Obj_t * pNextFan0; // next fanout of the first fanin
90  Ivy_Obj_t * pNextFan1; // next fanout of the second fanin
91  Ivy_Obj_t * pPrevFan0; // prev fanout of the first fanin
92  Ivy_Obj_t * pPrevFan1; // prev fanout of the second fanin
93  Ivy_Obj_t * pEquiv; // equivalent node
94 };
95 
96 // the AIG manager
97 struct Ivy_Man_t_
98 {
99  // AIG nodes
100  Vec_Ptr_t * vPis; // the array of PIs
101  Vec_Ptr_t * vPos; // the array of POs
102  Vec_Ptr_t * vBufs; // the array of buffers
103  Vec_Ptr_t * vObjs; // the array of objects
104  Ivy_Obj_t * pConst1; // the constant 1 node
105  Ivy_Obj_t Ghost; // the ghost node
106  // AIG node counters
107  int nObjs[IVY_VOID];// the number of objects by type
108  int nCreated; // the number of created objects
109  int nDeleted; // the number of deleted objects
110  // stuctural hash table
111  int * pTable; // structural hash table
112  int nTableSize; // structural hash table size
113  // various data members
114  int fCatchExor; // set to 1 to detect EXORs
115  int nTravIds; // the traversal ID
116  int nLevelMax; // the maximum level
117  Vec_Int_t * vRequired; // required times
118  int fFanout; // fanout is allocated
119  void * pData; // the temporary data
120  void * pCopy; // the temporary data
121  Ivy_Man_t * pHaig; // history AIG if present
122  int nClassesSkip; // the number of skipped classes
123  // memory management
124  Vec_Ptr_t * vChunks; // allocated memory pieces
125  Vec_Ptr_t * vPages; // memory pages used by nodes
126  Ivy_Obj_t * pListFree; // the list of free nodes
127  // timing statistics
130 };
131 
133 {
134  int nSimWords; // the number of words in the simulation info
135  double dSimSatur; // the ratio of refined classes when saturation is reached
136  int fPatScores; // enables simulation pattern scoring
137  int MaxScore; // max score after which resimulation is used
138  double dActConeRatio; // the ratio of cone to be bumped
139  double dActConeBumpMax; // the largest bump in activity
140  int fProve; // prove the miter outputs
141  int fVerbose; // verbose output
142  int fDoSparse; // skip sparse functions
143  int nBTLimitNode; // conflict limit at a node
144  int nBTLimitMiter; // conflict limit at an output
145 // int nBTLimitGlobal; // conflict limit global
146 // int nInsLimitNode; // inspection limit at a node
147 // int nInsLimitMiter; // inspection limit at an output
148 // int nInsLimitGlobal; // inspection limit global
149 };
150 
151 
152 #define IVY_CUT_LIMIT 256
153 #define IVY_CUT_INPUT 6
154 
155 typedef struct Ivy_Cut_t_ Ivy_Cut_t;
157 {
158  int nLatches;
159  short nSize;
160  short nSizeMax;
162  unsigned uHash;
163 };
164 
165 typedef struct Ivy_Store_t_ Ivy_Store_t;
167 {
168  int nCuts;
169  int nCutsM;
170  int nCutsMax;
171  int fSatur;
172  Ivy_Cut_t pCuts[IVY_CUT_LIMIT]; // storage for cuts
173 };
174 
175 #define IVY_LEAF_MASK 255
176 #define IVY_LEAF_BITS 8
177 
178 ////////////////////////////////////////////////////////////////////////
179 /// MACRO DEFINITIONS ///
180 ////////////////////////////////////////////////////////////////////////
181 
182 #define IVY_MIN(a,b) (((a) < (b))? (a) : (b))
183 #define IVY_MAX(a,b) (((a) > (b))? (a) : (b))
184 
185 extern void Ivy_ManAddMemory( Ivy_Man_t * p );
186 
187 static inline int Ivy_BitWordNum( int nBits ) { return (nBits>>5) + ((nBits&31) > 0); }
188 static inline int Ivy_TruthWordNum( int nVars ) { return nVars <= 5 ? 1 : (1 << (nVars - 5)); }
189 static inline int Ivy_InfoHasBit( unsigned * p, int i ) { return (p[(i)>>5] & (1<<((i) & 31))) > 0; }
190 static inline void Ivy_InfoSetBit( unsigned * p, int i ) { p[(i)>>5] |= (1<<((i) & 31)); }
191 static inline void Ivy_InfoXorBit( unsigned * p, int i ) { p[(i)>>5] ^= (1<<((i) & 31)); }
192 
193 static inline Ivy_Obj_t * Ivy_Regular( Ivy_Obj_t * p ) { return (Ivy_Obj_t *)((ABC_PTRUINT_T)(p) & ~01); }
194 static inline Ivy_Obj_t * Ivy_Not( Ivy_Obj_t * p ) { return (Ivy_Obj_t *)((ABC_PTRUINT_T)(p) ^ 01); }
195 static inline Ivy_Obj_t * Ivy_NotCond( Ivy_Obj_t * p, int c ) { return (Ivy_Obj_t *)((ABC_PTRUINT_T)(p) ^ (c)); }
196 static inline int Ivy_IsComplement( Ivy_Obj_t * p ) { return (int)((ABC_PTRUINT_T)(p) & 01); }
197 
198 static inline Ivy_Obj_t * Ivy_ManConst0( Ivy_Man_t * p ) { return Ivy_Not(p->pConst1); }
199 static inline Ivy_Obj_t * Ivy_ManConst1( Ivy_Man_t * p ) { return p->pConst1; }
200 static inline Ivy_Obj_t * Ivy_ManGhost( Ivy_Man_t * p ) { return &p->Ghost; }
201 static inline Ivy_Obj_t * Ivy_ManPi( Ivy_Man_t * p, int i ) { return (Ivy_Obj_t *)Vec_PtrEntry(p->vPis, i); }
202 static inline Ivy_Obj_t * Ivy_ManPo( Ivy_Man_t * p, int i ) { return (Ivy_Obj_t *)Vec_PtrEntry(p->vPos, i); }
203 static inline Ivy_Obj_t * Ivy_ManObj( Ivy_Man_t * p, int i ) { return (Ivy_Obj_t *)Vec_PtrEntry(p->vObjs, i); }
204 
205 static inline Ivy_Edge_t Ivy_EdgeCreate( int Id, int fCompl ) { return (Id << 1) | fCompl; }
206 static inline int Ivy_EdgeId( Ivy_Edge_t Edge ) { return Edge >> 1; }
207 static inline int Ivy_EdgeIsComplement( Ivy_Edge_t Edge ) { return Edge & 1; }
208 static inline Ivy_Edge_t Ivy_EdgeRegular( Ivy_Edge_t Edge ) { return (Edge >> 1) << 1; }
209 static inline Ivy_Edge_t Ivy_EdgeNot( Ivy_Edge_t Edge ) { return Edge ^ 1; }
210 static inline Ivy_Edge_t Ivy_EdgeNotCond( Ivy_Edge_t Edge, int fCond ) { return Edge ^ fCond; }
211 static inline Ivy_Edge_t Ivy_EdgeFromNode( Ivy_Obj_t * pNode ) { return Ivy_EdgeCreate( Ivy_Regular(pNode)->Id, Ivy_IsComplement(pNode) ); }
212 static inline Ivy_Obj_t * Ivy_EdgeToNode( Ivy_Man_t * p, Ivy_Edge_t Edge ){ return Ivy_NotCond( Ivy_ManObj(p, Ivy_EdgeId(Edge)), Ivy_EdgeIsComplement(Edge) ); }
213 
214 static inline int Ivy_LeafCreate( int Id, int Lat ) { return (Id << IVY_LEAF_BITS) | Lat; }
215 static inline int Ivy_LeafId( int Leaf ) { return Leaf >> IVY_LEAF_BITS; }
216 static inline int Ivy_LeafLat( int Leaf ) { return Leaf & IVY_LEAF_MASK; }
217 
218 static inline int Ivy_ManPiNum( Ivy_Man_t * p ) { return p->nObjs[IVY_PI]; }
219 static inline int Ivy_ManPoNum( Ivy_Man_t * p ) { return p->nObjs[IVY_PO]; }
220 static inline int Ivy_ManAssertNum( Ivy_Man_t * p ) { return p->nObjs[IVY_ASSERT]; }
221 static inline int Ivy_ManLatchNum( Ivy_Man_t * p ) { return p->nObjs[IVY_LATCH]; }
222 static inline int Ivy_ManAndNum( Ivy_Man_t * p ) { return p->nObjs[IVY_AND]; }
223 static inline int Ivy_ManExorNum( Ivy_Man_t * p ) { return p->nObjs[IVY_EXOR]; }
224 static inline int Ivy_ManBufNum( Ivy_Man_t * p ) { return p->nObjs[IVY_BUF]; }
225 static inline int Ivy_ManObjNum( Ivy_Man_t * p ) { return p->nCreated - p->nDeleted; }
226 static inline int Ivy_ManObjIdMax( Ivy_Man_t * p ) { return Vec_PtrSize(p->vObjs)-1; }
227 static inline int Ivy_ManNodeNum( Ivy_Man_t * p ) { return p->nObjs[IVY_AND]+p->nObjs[IVY_EXOR];}
228 static inline int Ivy_ManHashObjNum( Ivy_Man_t * p ) { return p->nObjs[IVY_AND]+p->nObjs[IVY_EXOR]+p->nObjs[IVY_LATCH]; }
229 static inline int Ivy_ManGetCost( Ivy_Man_t * p ) { return p->nObjs[IVY_AND]+3*p->nObjs[IVY_EXOR]+8*p->nObjs[IVY_LATCH]; }
230 
231 static inline Ivy_Type_t Ivy_ObjType( Ivy_Obj_t * pObj ) { return (Ivy_Type_t)pObj->Type; }
232 static inline Ivy_Init_t Ivy_ObjInit( Ivy_Obj_t * pObj ) { return (Ivy_Init_t)pObj->Init; }
233 static inline int Ivy_ObjIsConst1( Ivy_Obj_t * pObj ) { return pObj->Id == 0; }
234 static inline int Ivy_ObjIsGhost( Ivy_Obj_t * pObj ) { return pObj->Id < 0; }
235 static inline int Ivy_ObjIsNone( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_NONE; }
236 static inline int Ivy_ObjIsPi( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_PI; }
237 static inline int Ivy_ObjIsPo( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_PO; }
238 static inline int Ivy_ObjIsCi( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_PI || pObj->Type == IVY_LATCH; }
239 static inline int Ivy_ObjIsCo( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_PO || pObj->Type == IVY_LATCH; }
240 static inline int Ivy_ObjIsAssert( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_ASSERT; }
241 static inline int Ivy_ObjIsLatch( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_LATCH; }
242 static inline int Ivy_ObjIsAnd( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_AND; }
243 static inline int Ivy_ObjIsExor( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_EXOR; }
244 static inline int Ivy_ObjIsBuf( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_BUF; }
245 static inline int Ivy_ObjIsNode( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_AND || pObj->Type == IVY_EXOR; }
246 static inline int Ivy_ObjIsTerm( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_PI || pObj->Type == IVY_PO || pObj->Type == IVY_ASSERT; }
247 static inline int Ivy_ObjIsHash( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_AND || pObj->Type == IVY_EXOR || pObj->Type == IVY_LATCH; }
248 static inline int Ivy_ObjIsOneFanin( Ivy_Obj_t * pObj ) { return pObj->Type == IVY_PO || pObj->Type == IVY_ASSERT || pObj->Type == IVY_BUF || pObj->Type == IVY_LATCH; }
249 
250 static inline int Ivy_ObjIsMarkA( Ivy_Obj_t * pObj ) { return pObj->fMarkA; }
251 static inline void Ivy_ObjSetMarkA( Ivy_Obj_t * pObj ) { pObj->fMarkA = 1; }
252 static inline void Ivy_ObjClearMarkA( Ivy_Obj_t * pObj ) { pObj->fMarkA = 0; }
253 
254 static inline void Ivy_ObjSetTravId( Ivy_Obj_t * pObj, int TravId ) { pObj->TravId = TravId; }
255 static inline void Ivy_ObjSetTravIdCurrent( Ivy_Man_t * p, Ivy_Obj_t * pObj ) { pObj->TravId = p->nTravIds; }
256 static inline void Ivy_ObjSetTravIdPrevious( Ivy_Man_t * p, Ivy_Obj_t * pObj ) { pObj->TravId = p->nTravIds - 1; }
257 static inline int Ivy_ObjIsTravIdCurrent( Ivy_Man_t * p, Ivy_Obj_t * pObj ) { return (int )((int)pObj->TravId == p->nTravIds); }
258 static inline int Ivy_ObjIsTravIdPrevious( Ivy_Man_t * p, Ivy_Obj_t * pObj ) { return (int )((int)pObj->TravId == p->nTravIds - 1); }
259 
260 static inline int Ivy_ObjId( Ivy_Obj_t * pObj ) { return pObj->Id; }
261 static inline int Ivy_ObjTravId( Ivy_Obj_t * pObj ) { return pObj->TravId; }
262 static inline int Ivy_ObjPhase( Ivy_Obj_t * pObj ) { return pObj->fPhase; }
263 static inline int Ivy_ObjExorFanout( Ivy_Obj_t * pObj ) { return pObj->fExFan; }
264 static inline int Ivy_ObjRefs( Ivy_Obj_t * pObj ) { return pObj->nRefs; }
265 static inline void Ivy_ObjRefsInc( Ivy_Obj_t * pObj ) { pObj->nRefs++; }
266 static inline void Ivy_ObjRefsDec( Ivy_Obj_t * pObj ) { assert( pObj->nRefs > 0 ); pObj->nRefs--; }
267 static inline int Ivy_ObjFaninId0( Ivy_Obj_t * pObj ) { return pObj->pFanin0? Ivy_ObjId(Ivy_Regular(pObj->pFanin0)) : 0; }
268 static inline int Ivy_ObjFaninId1( Ivy_Obj_t * pObj ) { return pObj->pFanin1? Ivy_ObjId(Ivy_Regular(pObj->pFanin1)) : 0; }
269 static inline int Ivy_ObjFaninC0( Ivy_Obj_t * pObj ) { return Ivy_IsComplement(pObj->pFanin0); }
270 static inline int Ivy_ObjFaninC1( Ivy_Obj_t * pObj ) { return Ivy_IsComplement(pObj->pFanin1); }
271 static inline Ivy_Obj_t * Ivy_ObjFanin0( Ivy_Obj_t * pObj ) { return Ivy_Regular(pObj->pFanin0); }
272 static inline Ivy_Obj_t * Ivy_ObjFanin1( Ivy_Obj_t * pObj ) { return Ivy_Regular(pObj->pFanin1); }
273 static inline Ivy_Obj_t * Ivy_ObjChild0( Ivy_Obj_t * pObj ) { return pObj->pFanin0; }
274 static inline Ivy_Obj_t * Ivy_ObjChild1( Ivy_Obj_t * pObj ) { return pObj->pFanin1; }
275 static inline Ivy_Obj_t * Ivy_ObjChild0Equiv( Ivy_Obj_t * pObj ) { assert( !Ivy_IsComplement(pObj) ); return Ivy_ObjFanin0(pObj)? Ivy_NotCond(Ivy_ObjFanin0(pObj)->pEquiv, Ivy_ObjFaninC0(pObj)) : NULL; }
276 static inline Ivy_Obj_t * Ivy_ObjChild1Equiv( Ivy_Obj_t * pObj ) { assert( !Ivy_IsComplement(pObj) ); return Ivy_ObjFanin1(pObj)? Ivy_NotCond(Ivy_ObjFanin1(pObj)->pEquiv, Ivy_ObjFaninC1(pObj)) : NULL; }
277 static inline Ivy_Obj_t * Ivy_ObjEquiv( Ivy_Obj_t * pObj ) { return Ivy_Regular(pObj)->pEquiv? Ivy_NotCond(Ivy_Regular(pObj)->pEquiv, Ivy_IsComplement(pObj)) : NULL; }
278 static inline int Ivy_ObjLevel( Ivy_Obj_t * pObj ) { return pObj->Level; }
279 static inline int Ivy_ObjLevelNew( Ivy_Obj_t * pObj ) { return 1 + Ivy_ObjIsExor(pObj) + IVY_MAX(Ivy_ObjFanin0(pObj)->Level, Ivy_ObjFanin1(pObj)->Level); }
280 static inline int Ivy_ObjFaninPhase( Ivy_Obj_t * pObj ) { return Ivy_IsComplement(pObj)? !Ivy_Regular(pObj)->fPhase : pObj->fPhase; }
281 
282 static inline void Ivy_ObjClean( Ivy_Obj_t * pObj )
283 {
284  int IdSaved = pObj->Id;
285  memset( pObj, 0, sizeof(Ivy_Obj_t) );
286  pObj->Id = IdSaved;
287 }
288 static inline void Ivy_ObjOverwrite( Ivy_Obj_t * pBase, Ivy_Obj_t * pData )
289 {
290  int IdSaved = pBase->Id;
291  memcpy( pBase, pData, sizeof(Ivy_Obj_t) );
292  pBase->Id = IdSaved;
293 }
294 static inline int Ivy_ObjWhatFanin( Ivy_Obj_t * pObj, Ivy_Obj_t * pFanin )
295 {
296  if ( Ivy_ObjFanin0(pObj) == pFanin ) return 0;
297  if ( Ivy_ObjFanin1(pObj) == pFanin ) return 1;
298  assert(0); return -1;
299 }
300 static inline int Ivy_ObjFanoutC( Ivy_Obj_t * pObj, Ivy_Obj_t * pFanout )
301 {
302  if ( Ivy_ObjFanin0(pFanout) == pObj ) return Ivy_ObjFaninC0(pObj);
303  if ( Ivy_ObjFanin1(pFanout) == pObj ) return Ivy_ObjFaninC1(pObj);
304  assert(0); return -1;
305 }
306 
307 // create the ghost of the new node
308 static inline Ivy_Obj_t * Ivy_ObjCreateGhost( Ivy_Man_t * p, Ivy_Obj_t * p0, Ivy_Obj_t * p1, Ivy_Type_t Type, Ivy_Init_t Init )
309 {
310  Ivy_Obj_t * pGhost, * pTemp;
311  assert( Type != IVY_AND || !Ivy_ObjIsConst1(Ivy_Regular(p0)) );
312  assert( p1 == NULL || !Ivy_ObjIsConst1(Ivy_Regular(p1)) );
313  assert( Type == IVY_PI || Ivy_Regular(p0) != Ivy_Regular(p1) );
314  assert( Type != IVY_LATCH || !Ivy_IsComplement(p0) );
315 // assert( p1 == NULL || (!Ivy_ObjIsLatch(Ivy_Regular(p0)) || !Ivy_ObjIsLatch(Ivy_Regular(p1))) );
316  pGhost = Ivy_ManGhost(p);
317  pGhost->Type = Type;
318  pGhost->Init = Init;
319  pGhost->pFanin0 = p0;
320  pGhost->pFanin1 = p1;
321  if ( p1 && Ivy_ObjFaninId0(pGhost) > Ivy_ObjFaninId1(pGhost) )
322  pTemp = pGhost->pFanin0, pGhost->pFanin0 = pGhost->pFanin1, pGhost->pFanin1 = pTemp;
323  return pGhost;
324 }
325 
326 // get the complemented initial state
327 static Ivy_Init_t Ivy_InitNotCond( Ivy_Init_t Init, int fCompl )
328 {
329  assert( Init != IVY_INIT_NONE );
330  if ( fCompl == 0 )
331  return Init;
332  if ( Init == IVY_INIT_0 )
333  return IVY_INIT_1;
334  if ( Init == IVY_INIT_1 )
335  return IVY_INIT_0;
336  return IVY_INIT_DC;
337 }
338 
339 // get the initial state after forward retiming over AND gate
341 {
342  assert( InitA != IVY_INIT_NONE && InitB != IVY_INIT_NONE );
343  if ( InitA == IVY_INIT_0 || InitB == IVY_INIT_0 )
344  return IVY_INIT_0;
345  if ( InitA == IVY_INIT_DC || InitB == IVY_INIT_DC )
346  return IVY_INIT_DC;
347  return IVY_INIT_1;
348 }
349 
350 // get the initial state after forward retiming over EXOR gate
352 {
353  assert( InitA != IVY_INIT_NONE && InitB != IVY_INIT_NONE );
354  if ( InitA == IVY_INIT_DC || InitB == IVY_INIT_DC )
355  return IVY_INIT_DC;
356  if ( InitA == IVY_INIT_0 && InitB == IVY_INIT_1 )
357  return IVY_INIT_1;
358  if ( InitA == IVY_INIT_1 && InitB == IVY_INIT_0 )
359  return IVY_INIT_1;
360  return IVY_INIT_0;
361 }
362 
363 // internal memory manager
365 {
366  Ivy_Obj_t * pTemp;
367  if ( p->pListFree == NULL )
368  Ivy_ManAddMemory( p );
369  pTemp = p->pListFree;
370  p->pListFree = *((Ivy_Obj_t **)pTemp);
371  memset( pTemp, 0, sizeof(Ivy_Obj_t) );
372  return pTemp;
373 }
374 static inline void Ivy_ManRecycleMemory( Ivy_Man_t * p, Ivy_Obj_t * pEntry )
375 {
376  pEntry->Type = IVY_NONE; // distinquishes dead node from live node
377  *((Ivy_Obj_t **)pEntry) = p->pListFree;
378  p->pListFree = pEntry;
379 }
380 
381 
382 ////////////////////////////////////////////////////////////////////////
383 /// ITERATORS ///
384 ////////////////////////////////////////////////////////////////////////
385 
386 // iterator over the primary inputs
387 #define Ivy_ManForEachPi( p, pObj, i ) \
388  Vec_PtrForEachEntry( Ivy_Obj_t *, p->vPis, pObj, i )
389 // iterator over the primary outputs
390 #define Ivy_ManForEachPo( p, pObj, i ) \
391  Vec_PtrForEachEntry( Ivy_Obj_t *, p->vPos, pObj, i )
392 // iterator over all objects, including those currently not used
393 #define Ivy_ManForEachObj( p, pObj, i ) \
394  Vec_PtrForEachEntry( Ivy_Obj_t *, p->vObjs, pObj, i ) if ( (pObj) == NULL ) {} else
395 // iterator over the combinational inputs
396 #define Ivy_ManForEachCi( p, pObj, i ) \
397  Ivy_ManForEachObj( p, pObj, i ) if ( !Ivy_ObjIsCi(pObj) ) {} else
398 // iterator over the combinational outputs
399 #define Ivy_ManForEachCo( p, pObj, i ) \
400  Ivy_ManForEachObj( p, pObj, i ) if ( !Ivy_ObjIsCo(pObj) ) {} else
401 // iterator over logic nodes (AND and EXOR gates)
402 #define Ivy_ManForEachNode( p, pObj, i ) \
403  Ivy_ManForEachObj( p, pObj, i ) if ( !Ivy_ObjIsNode(pObj) ) {} else
404 // iterator over logic latches
405 #define Ivy_ManForEachLatch( p, pObj, i ) \
406  Ivy_ManForEachObj( p, pObj, i ) if ( !Ivy_ObjIsLatch(pObj) ) {} else
407 // iterator over the nodes whose IDs are stored in the array
408 #define Ivy_ManForEachNodeVec( p, vIds, pObj, i ) \
409  for ( i = 0; i < Vec_IntSize(vIds) && ((pObj) = Ivy_ManObj(p, Vec_IntEntry(vIds,i))); i++ )
410 // iterator over the fanouts of an object
411 #define Ivy_ObjForEachFanout( p, pObj, vArray, pFanout, i ) \
412  for ( i = 0, Ivy_ObjCollectFanouts(p, pObj, vArray); \
413  i < Vec_PtrSize(vArray) && ((pFanout) = (Ivy_Obj_t *)Vec_PtrEntry(vArray,i)); i++ )
414 
415 ////////////////////////////////////////////////////////////////////////
416 /// FUNCTION DECLARATIONS ///
417 ////////////////////////////////////////////////////////////////////////
418 
419 /*=== ivyBalance.c ========================================================*/
420 extern Ivy_Man_t * Ivy_ManBalance( Ivy_Man_t * p, int fUpdateLevel );
421 extern Ivy_Obj_t * Ivy_NodeBalanceBuildSuper( Ivy_Man_t * p, Vec_Ptr_t * vSuper, Ivy_Type_t Type, int fUpdateLevel );
422 /*=== ivyCanon.c ========================================================*/
423 extern Ivy_Obj_t * Ivy_CanonAnd( Ivy_Man_t * p, Ivy_Obj_t * p0, Ivy_Obj_t * p1 );
424 extern Ivy_Obj_t * Ivy_CanonExor( Ivy_Man_t * p, Ivy_Obj_t * p0, Ivy_Obj_t * p1 );
425 extern Ivy_Obj_t * Ivy_CanonLatch( Ivy_Man_t * p, Ivy_Obj_t * pObj, Ivy_Init_t Init );
426 /*=== ivyCheck.c ========================================================*/
427 extern int Ivy_ManCheck( Ivy_Man_t * p );
428 extern int Ivy_ManCheckFanoutNums( Ivy_Man_t * p );
429 extern int Ivy_ManCheckFanouts( Ivy_Man_t * p );
430 extern int Ivy_ManCheckChoices( Ivy_Man_t * p );
431 /*=== ivyCut.c ==========================================================*/
432 extern void Ivy_ManSeqFindCut( Ivy_Man_t * p, Ivy_Obj_t * pNode, Vec_Int_t * vFront, Vec_Int_t * vInside, int nSize );
433 extern Ivy_Store_t * Ivy_NodeFindCutsAll( Ivy_Man_t * p, Ivy_Obj_t * pObj, int nLeaves );
434 /*=== ivyDfs.c ==========================================================*/
435 extern Vec_Int_t * Ivy_ManDfs( Ivy_Man_t * p );
436 extern Vec_Int_t * Ivy_ManDfsSeq( Ivy_Man_t * p, Vec_Int_t ** pvLatches );
437 extern void Ivy_ManCollectCone( Ivy_Obj_t * pObj, Vec_Ptr_t * vFront, Vec_Ptr_t * vCone );
438 extern Vec_Vec_t * Ivy_ManLevelize( Ivy_Man_t * p );
440 extern int Ivy_ManIsAcyclic( Ivy_Man_t * p );
441 extern int Ivy_ManSetLevels( Ivy_Man_t * p, int fHaig );
442 /*=== ivyDsd.c ==========================================================*/
443 extern int Ivy_TruthDsd( unsigned uTruth, Vec_Int_t * vTree );
444 extern void Ivy_TruthDsdPrint( FILE * pFile, Vec_Int_t * vTree );
445 extern unsigned Ivy_TruthDsdCompute( Vec_Int_t * vTree );
446 extern void Ivy_TruthDsdComputePrint( unsigned uTruth );
447 extern Ivy_Obj_t * Ivy_ManDsdConstruct( Ivy_Man_t * p, Vec_Int_t * vFront, Vec_Int_t * vTree );
448 /*=== ivyFanout.c ==========================================================*/
449 extern void Ivy_ManStartFanout( Ivy_Man_t * p );
450 extern void Ivy_ManStopFanout( Ivy_Man_t * p );
451 extern void Ivy_ObjAddFanout( Ivy_Man_t * p, Ivy_Obj_t * pObj, Ivy_Obj_t * pFanout );
452 extern void Ivy_ObjDeleteFanout( Ivy_Man_t * p, Ivy_Obj_t * pObj, Ivy_Obj_t * pFanout );
453 extern void Ivy_ObjPatchFanout( Ivy_Man_t * p, Ivy_Obj_t * pObj, Ivy_Obj_t * pFanoutOld, Ivy_Obj_t * pFanoutNew );
454 extern void Ivy_ObjCollectFanouts( Ivy_Man_t * p, Ivy_Obj_t * pObj, Vec_Ptr_t * vArray );
456 extern int Ivy_ObjFanoutNum( Ivy_Man_t * p, Ivy_Obj_t * pObj );
457 /*=== ivyFastMap.c =============================================================*/
458 extern void Ivy_FastMapPerform( Ivy_Man_t * pAig, int nLimit, int fRecovery, int fVerbose );
459 extern void Ivy_FastMapStop( Ivy_Man_t * pAig );
460 extern void Ivy_FastMapReadSupp( Ivy_Man_t * pAig, Ivy_Obj_t * pObj, Vec_Int_t * vLeaves );
461 extern void Ivy_FastMapReverseLevel( Ivy_Man_t * pAig );
462 /*=== ivyFraig.c ==========================================================*/
463 extern int Ivy_FraigProve( Ivy_Man_t ** ppManAig, void * pPars );
464 extern Ivy_Man_t * Ivy_FraigPerform( Ivy_Man_t * pManAig, Ivy_FraigParams_t * pParams );
465 extern Ivy_Man_t * Ivy_FraigMiter( Ivy_Man_t * pManAig, Ivy_FraigParams_t * pParams );
466 extern void Ivy_FraigParamsDefault( Ivy_FraigParams_t * pParams );
467 /*=== ivyHaig.c ==========================================================*/
468 extern void Ivy_ManHaigStart( Ivy_Man_t * p, int fVerbose );
469 extern void Ivy_ManHaigTrasfer( Ivy_Man_t * p, Ivy_Man_t * pNew );
470 extern void Ivy_ManHaigStop( Ivy_Man_t * p );
471 extern void Ivy_ManHaigPostprocess( Ivy_Man_t * p, int fVerbose );
472 extern void Ivy_ManHaigCreateObj( Ivy_Man_t * p, Ivy_Obj_t * pObj );
473 extern void Ivy_ManHaigCreateChoice( Ivy_Man_t * p, Ivy_Obj_t * pObjOld, Ivy_Obj_t * pObjNew );
474 extern void Ivy_ManHaigSimulate( Ivy_Man_t * p );
475 /*=== ivyMan.c ==========================================================*/
476 extern Ivy_Man_t * Ivy_ManStart();
477 extern Ivy_Man_t * Ivy_ManStartFrom( Ivy_Man_t * p );
478 extern Ivy_Man_t * Ivy_ManDup( Ivy_Man_t * p );
479 extern Ivy_Man_t * Ivy_ManFrames( Ivy_Man_t * pMan, int nLatches, int nFrames, int fInit, Vec_Ptr_t ** pvMapping );
480 extern void Ivy_ManStop( Ivy_Man_t * p );
481 extern int Ivy_ManCleanup( Ivy_Man_t * p );
482 extern int Ivy_ManPropagateBuffers( Ivy_Man_t * p, int fUpdateLevel );
483 extern void Ivy_ManPrintStats( Ivy_Man_t * p );
484 extern void Ivy_ManMakeSeq( Ivy_Man_t * p, int nLatches, int * pInits );
485 /*=== ivyMem.c ==========================================================*/
486 extern void Ivy_ManStartMemory( Ivy_Man_t * p );
487 extern void Ivy_ManStopMemory( Ivy_Man_t * p );
488 /*=== ivyMulti.c ==========================================================*/
489 extern Ivy_Obj_t * Ivy_Multi( Ivy_Man_t * p, Ivy_Obj_t ** pArgs, int nArgs, Ivy_Type_t Type );
490 extern Ivy_Obj_t * Ivy_Multi1( Ivy_Man_t * p, Ivy_Obj_t ** pArgs, int nArgs, Ivy_Type_t Type );
491 extern Ivy_Obj_t * Ivy_Multi_rec( Ivy_Man_t * p, Ivy_Obj_t ** ppObjs, int nObjs, Ivy_Type_t Type );
492 extern Ivy_Obj_t * Ivy_MultiBalance_rec( Ivy_Man_t * p, Ivy_Obj_t ** pArgs, int nArgs, Ivy_Type_t Type );
493 extern int Ivy_MultiPlus( Ivy_Man_t * p, Vec_Ptr_t * vLeaves, Vec_Ptr_t * vCone, Ivy_Type_t Type, int nLimit, Vec_Ptr_t * vSol );
494 /*=== ivyObj.c ==========================================================*/
495 extern Ivy_Obj_t * Ivy_ObjCreatePi( Ivy_Man_t * p );
496 extern Ivy_Obj_t * Ivy_ObjCreatePo( Ivy_Man_t * p, Ivy_Obj_t * pDriver );
497 extern Ivy_Obj_t * Ivy_ObjCreate( Ivy_Man_t * p, Ivy_Obj_t * pGhost );
498 extern void Ivy_ObjConnect( Ivy_Man_t * p, Ivy_Obj_t * pObj, Ivy_Obj_t * pFan0, Ivy_Obj_t * pFan1 );
499 extern void Ivy_ObjDisconnect( Ivy_Man_t * p, Ivy_Obj_t * pObj );
500 extern void Ivy_ObjPatchFanin0( Ivy_Man_t * p, Ivy_Obj_t * pObj, Ivy_Obj_t * pFaninNew );
501 extern void Ivy_ObjDelete( Ivy_Man_t * p, Ivy_Obj_t * pObj, int fFreeTop );
502 extern void Ivy_ObjDelete_rec( Ivy_Man_t * p, Ivy_Obj_t * pObj, int fFreeTop );
503 extern void Ivy_ObjReplace( Ivy_Man_t * p, Ivy_Obj_t * pObjOld, Ivy_Obj_t * pObjNew, int fDeleteOld, int fFreeTop, int fUpdateLevel );
504 extern void Ivy_NodeFixBufferFanins( Ivy_Man_t * p, Ivy_Obj_t * pNode, int fUpdateLevel );
505 /*=== ivyOper.c =========================================================*/
506 extern Ivy_Obj_t * Ivy_Oper( Ivy_Man_t * p, Ivy_Obj_t * p0, Ivy_Obj_t * p1, Ivy_Type_t Type );
507 extern Ivy_Obj_t * Ivy_And( Ivy_Man_t * p, Ivy_Obj_t * p0, Ivy_Obj_t * p1 );
508 extern Ivy_Obj_t * Ivy_Or( Ivy_Man_t * p, Ivy_Obj_t * p0, Ivy_Obj_t * p1 );
509 extern Ivy_Obj_t * Ivy_Exor( Ivy_Man_t * p, Ivy_Obj_t * p0, Ivy_Obj_t * p1 );
510 extern Ivy_Obj_t * Ivy_Mux( Ivy_Man_t * p, Ivy_Obj_t * pC, Ivy_Obj_t * p1, Ivy_Obj_t * p0 );
511 extern Ivy_Obj_t * Ivy_Maj( Ivy_Man_t * p, Ivy_Obj_t * pA, Ivy_Obj_t * pB, Ivy_Obj_t * pC );
512 extern Ivy_Obj_t * Ivy_Miter( Ivy_Man_t * p, Vec_Ptr_t * vPairs );
513 extern Ivy_Obj_t * Ivy_Latch( Ivy_Man_t * p, Ivy_Obj_t * pObj, Ivy_Init_t Init );
514 /*=== ivyResyn.c =========================================================*/
515 extern Ivy_Man_t * Ivy_ManResyn0( Ivy_Man_t * p, int fUpdateLevel, int fVerbose );
516 extern Ivy_Man_t * Ivy_ManResyn( Ivy_Man_t * p, int fUpdateLevel, int fVerbose );
517 extern Ivy_Man_t * Ivy_ManRwsat( Ivy_Man_t * pMan, int fVerbose );
518 /*=== ivyRewrite.c =========================================================*/
519 extern int Ivy_ManSeqRewrite( Ivy_Man_t * p, int fUpdateLevel, int fUseZeroCost );
520 extern int Ivy_ManRewriteAlg( Ivy_Man_t * p, int fUpdateLevel, int fUseZeroCost );
521 extern int Ivy_ManRewritePre( Ivy_Man_t * p, int fUpdateLevel, int fUseZeroCost, int fVerbose );
522 /*=== ivySeq.c =========================================================*/
523 extern int Ivy_ManRewriteSeq( Ivy_Man_t * p, int fUseZeroCost, int fVerbose );
524 /*=== ivyShow.c =========================================================*/
525 extern void Ivy_ManShow( Ivy_Man_t * pMan, int fHaig, Vec_Ptr_t * vBold );
526 /*=== ivyTable.c ========================================================*/
527 extern Ivy_Obj_t * Ivy_TableLookup( Ivy_Man_t * p, Ivy_Obj_t * pObj );
528 extern void Ivy_TableInsert( Ivy_Man_t * p, Ivy_Obj_t * pObj );
529 extern void Ivy_TableDelete( Ivy_Man_t * p, Ivy_Obj_t * pObj );
530 extern void Ivy_TableUpdate( Ivy_Man_t * p, Ivy_Obj_t * pObj, int ObjIdNew );
531 extern int Ivy_TableCountEntries( Ivy_Man_t * p );
532 extern void Ivy_TableProfile( Ivy_Man_t * p );
533 /*=== ivyUtil.c =========================================================*/
534 extern void Ivy_ManIncrementTravId( Ivy_Man_t * p );
535 extern void Ivy_ManCleanTravId( Ivy_Man_t * p );
536 extern unsigned * Ivy_ManCutTruth( Ivy_Man_t * p, Ivy_Obj_t * pRoot, Vec_Int_t * vLeaves, Vec_Int_t * vNodes, Vec_Int_t * vTruth );
537 extern void Ivy_ManCollectCut( Ivy_Man_t * p, Ivy_Obj_t * pRoot, Vec_Int_t * vLeaves, Vec_Int_t * vNodes );
538 extern Vec_Int_t * Ivy_ManLatches( Ivy_Man_t * p );
539 extern int Ivy_ManLevels( Ivy_Man_t * p );
540 extern void Ivy_ManResetLevels( Ivy_Man_t * p );
541 extern int Ivy_ObjMffcLabel( Ivy_Man_t * p, Ivy_Obj_t * pObj );
542 extern void Ivy_ObjUpdateLevel_rec( Ivy_Man_t * p, Ivy_Obj_t * pObj );
543 extern void Ivy_ObjUpdateLevelR_rec( Ivy_Man_t * p, Ivy_Obj_t * pObj, int ReqNew );
544 extern int Ivy_ObjIsMuxType( Ivy_Obj_t * pObj );
545 extern Ivy_Obj_t * Ivy_ObjRecognizeMux( Ivy_Obj_t * pObj, Ivy_Obj_t ** ppObjT, Ivy_Obj_t ** ppObjE );
546 extern Ivy_Obj_t * Ivy_ObjReal( Ivy_Obj_t * pObj );
547 extern void Ivy_ObjPrintVerbose( Ivy_Man_t * p, Ivy_Obj_t * pObj, int fHaig );
548 extern void Ivy_ManPrintVerbose( Ivy_Man_t * p, int fHaig );
549 extern int Ivy_CutTruthPrint( Ivy_Man_t * p, Ivy_Cut_t * pCut, unsigned uTruth );
550 
551 
552 
554 
555 
556 
557 #endif
558 
559 ////////////////////////////////////////////////////////////////////////
560 /// END OF FILE ///
561 ////////////////////////////////////////////////////////////////////////
562 
int TravId
Definition: ivy.h:76
static int Ivy_ObjIsHash(Ivy_Obj_t *pObj)
Definition: ivy.h:247
char * memset()
int nCutsMax
Definition: ivy.h:170
Ivy_Obj_t * Ivy_Latch(Ivy_Man_t *p, Ivy_Obj_t *pObj, Ivy_Init_t Init)
Definition: ivyOper.c:287
static int Ivy_IsComplement(Ivy_Obj_t *p)
Definition: ivy.h:196
static Ivy_Obj_t * Ivy_EdgeToNode(Ivy_Man_t *p, Ivy_Edge_t Edge)
Definition: ivy.h:212
Ivy_Obj_t * Ivy_Multi_rec(Ivy_Man_t *p, Ivy_Obj_t **ppObjs, int nObjs, Ivy_Type_t Type)
Definition: ivyOper.c:225
void Ivy_ManHaigSimulate(Ivy_Man_t *p)
Definition: ivyHaig.c:440
unsigned Level
Definition: ivy.h:84
Vec_Ptr_t * vPos
Definition: ivy.h:101
static int Ivy_ObjExorFanout(Ivy_Obj_t *pObj)
Definition: ivy.h:263
static int Ivy_ObjTravId(Ivy_Obj_t *pObj)
Definition: ivy.h:261
#define IVY_MAX(a, b)
Definition: ivy.h:183
static int Ivy_BitWordNum(int nBits)
Definition: ivy.h:187
static Ivy_Edge_t Ivy_EdgeFromNode(Ivy_Obj_t *pNode)
Definition: ivy.h:211
int Ivy_ManIsAcyclic(Ivy_Man_t *p)
Definition: ivyDfs.c:373
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Definition: vecPtr.h:42
static Ivy_Edge_t Ivy_EdgeNot(Ivy_Edge_t Edge)
Definition: ivy.h:209
unsigned Init
Definition: ivy.h:83
static int Ivy_InfoHasBit(unsigned *p, int i)
Definition: ivy.h:189
abctime time2
Definition: ivy.h:129
void Ivy_ObjReplace(Ivy_Man_t *p, Ivy_Obj_t *pObjOld, Ivy_Obj_t *pObjNew, int fDeleteOld, int fFreeTop, int fUpdateLevel)
Definition: ivyObj.c:328
Definition: ivy.h:68
static Ivy_Obj_t * Ivy_ManConst1(Ivy_Man_t *p)
Definition: ivy.h:199
Definition: ivy.h:58
Definition: ivy.h:55
int Ivy_ManSetLevels(Ivy_Man_t *p, int fHaig)
Definition: ivyDfs.c:457
static Ivy_Obj_t * Ivy_ManPi(Ivy_Man_t *p, int i)
Definition: ivy.h:201
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.
Definition: vecVec.h:42
void Ivy_ManPrintVerbose(Ivy_Man_t *p, int fHaig)
Definition: ivyUtil.c:714
Ivy_Obj_t * pPrevFan0
Definition: ivy.h:91
int nCutsM
Definition: ivy.h:169
double dActConeRatio
Definition: ivy.h:138
Vec_Int_t * Ivy_ManLatches(Ivy_Man_t *p)
Definition: ivyUtil.c:227
static int Ivy_ObjLevelNew(Ivy_Obj_t *pObj)
Definition: ivy.h:279
Ivy_Obj_t * Ivy_CanonExor(Ivy_Man_t *p, Ivy_Obj_t *p0, Ivy_Obj_t *p1)
Definition: ivyCanon.c:109
static Llb_Mgr_t * p
Definition: llb3Image.c:950
static int Ivy_TruthWordNum(int nVars)
Definition: ivy.h:188
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition: bblif.c:37
Vec_Ptr_t * vPis
Definition: ivy.h:100
Ivy_Obj_t * Ivy_Mux(Ivy_Man_t *p, Ivy_Obj_t *pC, Ivy_Obj_t *p1, Ivy_Obj_t *p0)
Definition: ivyOper.c:158
int nDeleted
Definition: ivy.h:109
static int Ivy_ObjIsTerm(Ivy_Obj_t *pObj)
Definition: ivy.h:246
void Ivy_ManStopFanout(Ivy_Man_t *p)
Definition: ivyFanout.c:162
int Ivy_ObjIsMuxType(Ivy_Obj_t *pObj)
Definition: ivyUtil.c:479
static int Ivy_ObjFaninId1(Ivy_Obj_t *pObj)
Definition: ivy.h:268
Definition: ivy.h:57
static Ivy_Obj_t * Ivy_ManConst0(Ivy_Man_t *p)
Definition: ivy.h:198
int Ivy_TableCountEntries(Ivy_Man_t *p)
Definition: ivyTable.c:187
static int Ivy_ObjIsPi(Ivy_Obj_t *pObj)
Definition: ivy.h:236
Ivy_Cut_t pCuts[IVY_CUT_LIMIT]
Definition: ivy.h:172
static void Ivy_ObjOverwrite(Ivy_Obj_t *pBase, Ivy_Obj_t *pData)
Definition: ivy.h:288
static int Ivy_ManBufNum(Ivy_Man_t *p)
Definition: ivy.h:224
int * pTable
Definition: ivy.h:111
Vec_Int_t * Ivy_ManDfs(Ivy_Man_t *p)
Definition: ivyDfs.c:87
void Ivy_FraigParamsDefault(Ivy_FraigParams_t *pParams)
FUNCTION DEFINITIONS ///.
Definition: ivyFraig.c:225
Ivy_Obj_t * Ivy_ObjCreate(Ivy_Man_t *p, Ivy_Obj_t *pGhost)
Definition: ivyObj.c:77
Ivy_Obj_t * pFanin1
Definition: ivy.h:87
static int Ivy_ManAssertNum(Ivy_Man_t *p)
Definition: ivy.h:220
void Ivy_TruthDsdPrint(FILE *pFile, Vec_Int_t *vTree)
Definition: ivyDsd.c:568
Ivy_Obj_t * Ivy_Exor(Ivy_Man_t *p, Ivy_Obj_t *p0, Ivy_Obj_t *p1)
Definition: ivyOper.c:113
int Ivy_ObjMffcLabel(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Definition: ivyUtil.c:359
static int Ivy_LeafId(int Leaf)
Definition: ivy.h:215
int nBTLimitNode
Definition: ivy.h:143
Vec_Ptr_t * vPages
Definition: ivy.h:125
char * memcpy()
double dActConeBumpMax
Definition: ivy.h:139
static int Ivy_ManExorNum(Ivy_Man_t *p)
Definition: ivy.h:223
static int Ivy_ObjIsNone(Ivy_Obj_t *pObj)
Definition: ivy.h:235
static int Ivy_ManLatchNum(Ivy_Man_t *p)
Definition: ivy.h:221
Ivy_Obj_t * pFanout
Definition: ivy.h:88
int Id
Definition: ivy.h:75
void Ivy_ManHaigPostprocess(Ivy_Man_t *p, int fVerbose)
Definition: ivyHaig.c:350
void Ivy_ManMakeSeq(Ivy_Man_t *p, int nLatches, int *pInits)
Definition: ivyMan.c:482
Ivy_Man_t * Ivy_ManDup(Ivy_Man_t *p)
Definition: ivyMan.c:110
void * pCopy
Definition: ivy.h:120
Ivy_Obj_t * Ivy_Oper(Ivy_Man_t *p, Ivy_Obj_t *p0, Ivy_Obj_t *p1, Ivy_Type_t Type)
FUNCTION DEFINITIONS ///.
Definition: ivyOper.c:63
static int Ivy_ManPoNum(Ivy_Man_t *p)
Definition: ivy.h:219
static int Ivy_ObjIsMarkA(Ivy_Obj_t *pObj)
Definition: ivy.h:250
Vec_Ptr_t * vObjs
Definition: ivy.h:103
Ivy_Store_t * Ivy_NodeFindCutsAll(Ivy_Man_t *p, Ivy_Obj_t *pObj, int nLeaves)
Definition: ivyCut.c:892
void Ivy_TableDelete(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Definition: ivyTable.c:132
static void Ivy_ObjRefsInc(Ivy_Obj_t *pObj)
Definition: ivy.h:265
short nSizeMax
Definition: ivy.h:160
int fSatur
Definition: ivy.h:171
int Ivy_ManCheckFanouts(Ivy_Man_t *p)
Definition: ivyCheck.c:171
#define IVY_CUT_INPUT
Definition: ivy.h:153
static int Vec_PtrSize(Vec_Ptr_t *p)
Definition: vecPtr.h:295
int Ivy_FraigProve(Ivy_Man_t **ppManAig, void *pPars)
Definition: ivyFraig.c:255
Ivy_Man_t * Ivy_FraigMiter(Ivy_Man_t *pManAig, Ivy_FraigParams_t *pParams)
Definition: ivyFraig.c:480
static Ivy_Init_t Ivy_InitNotCond(Ivy_Init_t Init, int fCompl)
Definition: ivy.h:327
static int Ivy_ObjIsLatch(Ivy_Obj_t *pObj)
Definition: ivy.h:241
Ivy_Man_t * Ivy_ManStart()
DECLARATIONS ///.
Definition: ivyMan.c:45
void Ivy_ManStop(Ivy_Man_t *p)
Definition: ivyMan.c:238
static int Ivy_ObjPhase(Ivy_Obj_t *pObj)
Definition: ivy.h:262
Ivy_Obj_t * pNextFan0
Definition: ivy.h:89
void Ivy_ObjUpdateLevel_rec(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Definition: ivyUtil.c:382
Ivy_Obj_t * pListFree
Definition: ivy.h:126
void Ivy_ManShow(Ivy_Man_t *pMan, int fHaig, Vec_Ptr_t *vBold)
FUNCTION DEFINITIONS ///.
Definition: ivyShow.c:47
static int Ivy_LeafCreate(int Id, int Lat)
Definition: ivy.h:214
Ivy_Obj_t * Ivy_ObjRecognizeMux(Ivy_Obj_t *pObj, Ivy_Obj_t **ppObjT, Ivy_Obj_t **ppObjE)
Definition: ivyUtil.c:517
static Ivy_Obj_t * Ivy_ObjFanin1(Ivy_Obj_t *pObj)
Definition: ivy.h:272
Vec_Ptr_t * vBufs
Definition: ivy.h:102
static Ivy_Obj_t * Ivy_ObjChild1Equiv(Ivy_Obj_t *pObj)
Definition: ivy.h:276
static void Ivy_ObjSetTravId(Ivy_Obj_t *pObj, int TravId)
Definition: ivy.h:254
static int Ivy_ObjLevel(Ivy_Obj_t *pObj)
Definition: ivy.h:278
void Ivy_TableProfile(Ivy_Man_t *p)
Definition: ivyTable.c:250
unsigned fExFan
Definition: ivy.h:80
Ivy_Obj_t * Ivy_Or(Ivy_Man_t *p, Ivy_Obj_t *p0, Ivy_Obj_t *p1)
Definition: ivyOper.c:142
void Ivy_ManStopMemory(Ivy_Man_t *p)
Definition: ivyMem.c:66
int Ivy_ManPropagateBuffers(Ivy_Man_t *p, int fUpdateLevel)
Definition: ivyMan.c:414
void Ivy_ObjAddFanout(Ivy_Man_t *p, Ivy_Obj_t *pObj, Ivy_Obj_t *pFanout)
Definition: ivyFanout.c:183
Vec_Int_t * Ivy_ManDfsSeq(Ivy_Man_t *p, Vec_Int_t **pvLatches)
Definition: ivyDfs.c:121
Ivy_Obj_t * pNextFan1
Definition: ivy.h:90
void Ivy_ManResetLevels(Ivy_Man_t *p)
Definition: ivyUtil.c:292
void Ivy_ObjDelete(Ivy_Man_t *p, Ivy_Obj_t *pObj, int fFreeTop)
Definition: ivyObj.c:255
Definition: ivy.h:97
Ivy_Obj_t * pFanin0
Definition: ivy.h:86
Ivy_Obj_t Ghost
Definition: ivy.h:105
void Ivy_ObjDeleteFanout(Ivy_Man_t *p, Ivy_Obj_t *pObj, Ivy_Obj_t *pFanout)
Definition: ivyFanout.c:205
void Ivy_TableInsert(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Definition: ivyTable.c:105
static Ivy_Obj_t * Ivy_ObjFanin0(Ivy_Obj_t *pObj)
Definition: ivy.h:271
static int Ivy_ObjIsTravIdPrevious(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Definition: ivy.h:258
Ivy_Obj_t * Ivy_ObjReal(Ivy_Obj_t *pObj)
Definition: ivyUtil.c:609
int Ivy_ManLevels(Ivy_Man_t *p)
Definition: ivyUtil.c:249
static int Ivy_ManObjIdMax(Ivy_Man_t *p)
Definition: ivy.h:226
static int Ivy_ObjFaninId0(Ivy_Obj_t *pObj)
Definition: ivy.h:267
Ivy_Obj_t * Ivy_TableLookup(Ivy_Man_t *p, Ivy_Obj_t *pObj)
FUNCTION DEFINITIONS ///.
Definition: ivyTable.c:71
void Ivy_ObjConnect(Ivy_Man_t *p, Ivy_Obj_t *pObj, Ivy_Obj_t *pFan0, Ivy_Obj_t *pFan1)
Definition: ivyObj.c:150
int Ivy_ManCheckFanoutNums(Ivy_Man_t *p)
Definition: ivyCheck.c:148
Ivy_Obj_t * Ivy_ManDsdConstruct(Ivy_Man_t *p, Vec_Int_t *vFront, Vec_Int_t *vTree)
Definition: ivyDsd.c:655
void Ivy_FastMapStop(Ivy_Man_t *pAig)
Definition: ivyFastMap.c:194
void Ivy_NodeFixBufferFanins(Ivy_Man_t *p, Ivy_Obj_t *pNode, int fUpdateLevel)
Definition: ivyObj.c:442
int Ivy_MultiPlus(Ivy_Man_t *p, Vec_Ptr_t *vLeaves, Vec_Ptr_t *vCone, Ivy_Type_t Type, int nLimit, Vec_Ptr_t *vSol)
FUNCTION DEFINITIONS ///.
Definition: ivyMulti.c:58
Ivy_Obj_t * Ivy_ObjCreatePo(Ivy_Man_t *p, Ivy_Obj_t *pDriver)
Definition: ivyObj.c:61
void Ivy_ManIncrementTravId(Ivy_Man_t *p)
DECLARATIONS ///.
Definition: ivyUtil.c:45
Ivy_Man_t * Ivy_ManResyn(Ivy_Man_t *p, int fUpdateLevel, int fVerbose)
Definition: ivyResyn.c:86
int nTableSize
Definition: ivy.h:112
void Ivy_ManHaigTrasfer(Ivy_Man_t *p, Ivy_Man_t *pNew)
Definition: ivyHaig.c:137
static void Ivy_ObjSetTravIdPrevious(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Definition: ivy.h:256
static void Ivy_ObjSetMarkA(Ivy_Obj_t *pObj)
Definition: ivy.h:251
int nCuts
Definition: ivy.h:168
static int Ivy_ObjFaninC1(Ivy_Obj_t *pObj)
Definition: ivy.h:270
static Ivy_Obj_t * Ivy_ManObj(Ivy_Man_t *p, int i)
Definition: ivy.h:203
static void Ivy_ObjClearMarkA(Ivy_Obj_t *pObj)
Definition: ivy.h:252
static Ivy_Obj_t * Ivy_ObjChild0Equiv(Ivy_Obj_t *pObj)
Definition: ivy.h:275
int nObjs[IVY_VOID]
Definition: ivy.h:107
short nSize
Definition: ivy.h:159
unsigned fPhase
Definition: ivy.h:81
int fCatchExor
Definition: ivy.h:114
Ivy_Init_t
Definition: ivy.h:65
static int Ivy_ObjRefs(Ivy_Obj_t *pObj)
Definition: ivy.h:264
void Ivy_ManHaigCreateChoice(Ivy_Man_t *p, Ivy_Obj_t *pObjOld, Ivy_Obj_t *pObjNew)
Definition: ivyHaig.c:246
Definition: ivy.h:53
void Ivy_FastMapPerform(Ivy_Man_t *pAig, int nLimit, int fRecovery, int fVerbose)
FUNCTION DEFINITIONS ///.
Definition: ivyFastMap.c:105
static void Ivy_ObjRefsDec(Ivy_Obj_t *pObj)
Definition: ivy.h:266
Definition: ivy.h:60
unsigned Type
Definition: ivy.h:77
int Ivy_ManRewriteSeq(Ivy_Man_t *p, int fUseZeroCost, int fVerbose)
FUNCTION DEFINITIONS ///.
Definition: ivySeq.c:63
Ivy_Obj_t * Ivy_Multi(Ivy_Man_t *p, Ivy_Obj_t **pArgs, int nArgs, Ivy_Type_t Type)
Definition: ivyOper.c:246
int Ivy_TruthDsd(unsigned uTruth, Vec_Int_t *vTree)
FUNCTION DEFINITIONS ///.
Definition: ivyDsd.c:166
Ivy_Man_t * Ivy_ManRwsat(Ivy_Man_t *pMan, int fVerbose)
Definition: ivyResyn.c:155
int pArray[IVY_CUT_INPUT]
Definition: ivy.h:161
static Ivy_Edge_t Ivy_EdgeNotCond(Ivy_Edge_t Edge, int fCond)
Definition: ivy.h:210
static int Ivy_ObjIsOneFanin(Ivy_Obj_t *pObj)
Definition: ivy.h:248
Definition: ivy.h:73
static Ivy_Obj_t * Ivy_Regular(Ivy_Obj_t *p)
Definition: ivy.h:193
static int Ivy_ObjIsCo(Ivy_Obj_t *pObj)
Definition: ivy.h:239
static Ivy_Type_t Ivy_ObjType(Ivy_Obj_t *pObj)
Definition: ivy.h:231
static int Ivy_EdgeIsComplement(Ivy_Edge_t Edge)
Definition: ivy.h:207
void Ivy_ObjPatchFanout(Ivy_Man_t *p, Ivy_Obj_t *pObj, Ivy_Obj_t *pFanoutOld, Ivy_Obj_t *pFanoutNew)
Definition: ivyFanout.c:237
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
Definition: abc_global.h:105
static int Ivy_ObjIsTravIdCurrent(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Definition: ivy.h:257
static int Ivy_ObjIsNode(Ivy_Obj_t *pObj)
Definition: ivy.h:245
Ivy_Obj_t * Ivy_CanonAnd(Ivy_Man_t *p, Ivy_Obj_t *p0, Ivy_Obj_t *p1)
Definition: ivyCanon.c:90
static Ivy_Obj_t * Ivy_ObjChild0(Ivy_Obj_t *pObj)
Definition: ivy.h:273
Ivy_Obj_t * Ivy_CanonLatch(Ivy_Man_t *p, Ivy_Obj_t *pObj, Ivy_Init_t Init)
Definition: ivyCanon.c:131
Ivy_Obj_t * Ivy_NodeBalanceBuildSuper(Ivy_Man_t *p, Vec_Ptr_t *vSuper, Ivy_Type_t Type, int fUpdateLevel)
Definition: ivyBalance.c:175
unsigned fFailTfo
Definition: ivy.h:82
Vec_Ptr_t * vChunks
Definition: ivy.h:124
void Ivy_ManCollectCut(Ivy_Man_t *p, Ivy_Obj_t *pRoot, Vec_Int_t *vLeaves, Vec_Int_t *vNodes)
Definition: ivyUtil.c:106
void Ivy_ManPrintStats(Ivy_Man_t *p)
Definition: ivyMan.c:456
static void Ivy_InfoSetBit(unsigned *p, int i)
Definition: ivy.h:190
#define ABC_NAMESPACE_HEADER_END
Definition: abc_global.h:106
void Ivy_TruthDsdComputePrint(unsigned uTruth)
Definition: ivyDsd.c:678
int Ivy_ManCheckChoices(Ivy_Man_t *p)
Definition: ivyCheck.c:255
static void Ivy_ObjClean(Ivy_Obj_t *pObj)
Definition: ivy.h:282
void Ivy_ManStartFanout(Ivy_Man_t *p)
FUNCTION DEFINITIONS ///.
Definition: ivyFanout.c:136
unsigned fMarkA
Definition: ivy.h:78
int Ivy_ManRewriteAlg(Ivy_Man_t *p, int fUpdateLevel, int fUseZeroCost)
FUNCTION DEFINITIONS ///.
Definition: ivyRwrAlg.c:49
int Ivy_Edge_t
Definition: ivy.h:48
static Ivy_Init_t Ivy_InitAnd(Ivy_Init_t InitA, Ivy_Init_t InitB)
Definition: ivy.h:340
int nCreated
Definition: ivy.h:108
Ivy_Man_t * Ivy_ManFrames(Ivy_Man_t *pMan, int nLatches, int nFrames, int fInit, Vec_Ptr_t **pvMapping)
Definition: ivyMan.c:172
int nTravIds
Definition: ivy.h:115
Vec_Int_t * Ivy_ManRequiredLevels(Ivy_Man_t *p)
Definition: ivyDfs.c:250
typedefABC_NAMESPACE_HEADER_START struct Ivy_Man_t_ Ivy_Man_t
INCLUDES ///.
Definition: ivy.h:46
static int Ivy_ManPiNum(Ivy_Man_t *p)
Definition: ivy.h:218
void Ivy_ManHaigStart(Ivy_Man_t *p, int fVerbose)
FUNCTION DEFINITIONS ///.
Definition: ivyHaig.c:94
double dSimSatur
Definition: ivy.h:135
int fFanout
Definition: ivy.h:118
static void * Vec_PtrEntry(Vec_Ptr_t *p, int i)
Definition: vecPtr.h:362
unsigned fMarkB
Definition: ivy.h:79
void Ivy_ObjDelete_rec(Ivy_Man_t *p, Ivy_Obj_t *pObj, int fFreeTop)
Definition: ivyObj.c:299
unsigned Ivy_TruthDsdCompute(Vec_Int_t *vTree)
Definition: ivyDsd.c:478
#define IVY_LEAF_BITS
Definition: ivy.h:176
static Ivy_Obj_t * Ivy_ObjCreateGhost(Ivy_Man_t *p, Ivy_Obj_t *p0, Ivy_Obj_t *p1, Ivy_Type_t Type, Ivy_Init_t Init)
Definition: ivy.h:308
Ivy_Man_t * pHaig
Definition: ivy.h:121
Definition: ivy.h:61
Definition: ivy.h:59
void Ivy_ManAddMemory(Ivy_Man_t *p)
Definition: ivyMem.c:89
void Ivy_ManHaigStop(Ivy_Man_t *p)
Definition: ivyHaig.c:159
static int Ivy_ObjIsAnd(Ivy_Obj_t *pObj)
Definition: ivy.h:242
static Ivy_Edge_t Ivy_EdgeCreate(int Id, int fCompl)
Definition: ivy.h:205
void Ivy_ManCleanTravId(Ivy_Man_t *p)
Definition: ivyUtil.c:63
int nLevelMax
Definition: ivy.h:116
int Ivy_ObjFanoutNum(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Definition: ivyFanout.c:299
static int Ivy_ObjIsExor(Ivy_Obj_t *pObj)
Definition: ivy.h:243
void Ivy_ObjDisconnect(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Definition: ivyObj.c:185
static int Ivy_ObjIsConst1(Ivy_Obj_t *pObj)
Definition: ivy.h:233
static void Ivy_InfoXorBit(unsigned *p, int i)
Definition: ivy.h:191
static int Ivy_ObjWhatFanin(Ivy_Obj_t *pObj, Ivy_Obj_t *pFanin)
Definition: ivy.h:294
Ivy_Man_t * Ivy_ManStartFrom(Ivy_Man_t *p)
Definition: ivyMan.c:85
static Ivy_Obj_t * Ivy_ManGhost(Ivy_Man_t *p)
Definition: ivy.h:200
Vec_Int_t * vRequired
Definition: ivy.h:117
static void Ivy_ManRecycleMemory(Ivy_Man_t *p, Ivy_Obj_t *pEntry)
Definition: ivy.h:374
static int Ivy_ManHashObjNum(Ivy_Man_t *p)
Definition: ivy.h:228
static Ivy_Obj_t * Ivy_Not(Ivy_Obj_t *p)
Definition: ivy.h:194
#define IVY_LEAF_MASK
Definition: ivy.h:175
static int Ivy_ObjIsGhost(Ivy_Obj_t *pObj)
Definition: ivy.h:234
static Ivy_Obj_t * Ivy_NotCond(Ivy_Obj_t *p, int c)
Definition: ivy.h:195
void Ivy_ManSeqFindCut(Ivy_Man_t *p, Ivy_Obj_t *pNode, Vec_Int_t *vFront, Vec_Int_t *vInside, int nSize)
Definition: ivyCut.c:183
static int Ivy_ObjIsBuf(Ivy_Obj_t *pObj)
Definition: ivy.h:244
static int Ivy_ManObjNum(Ivy_Man_t *p)
Definition: ivy.h:225
static Ivy_Init_t Ivy_InitExor(Ivy_Init_t InitA, Ivy_Init_t InitB)
Definition: ivy.h:351
Ivy_Obj_t * pConst1
Definition: ivy.h:104
static Ivy_Obj_t * Ivy_ObjChild1(Ivy_Obj_t *pObj)
Definition: ivy.h:274
unsigned uHash
Definition: ivy.h:162
Ivy_Man_t * Ivy_FraigPerform(Ivy_Man_t *pManAig, Ivy_FraigParams_t *pParams)
Definition: ivyFraig.c:451
static int Ivy_ObjFaninPhase(Ivy_Obj_t *pObj)
Definition: ivy.h:280
void Ivy_FastMapReverseLevel(Ivy_Man_t *pAig)
static int Ivy_ObjIsPo(Ivy_Obj_t *pObj)
Definition: ivy.h:237
void Ivy_ObjUpdateLevelR_rec(Ivy_Man_t *p, Ivy_Obj_t *pObj, int ReqNew)
Definition: ivyUtil.c:444
void Ivy_TableUpdate(Ivy_Man_t *p, Ivy_Obj_t *pObj, int ObjIdNew)
Definition: ivyTable.c:165
Definition: ivy.h:67
static int Ivy_ManAndNum(Ivy_Man_t *p)
Definition: ivy.h:222
Ivy_Obj_t * Ivy_Miter(Ivy_Man_t *p, Vec_Ptr_t *vPairs)
Definition: ivyOper.c:264
#define assert(ex)
Definition: util_old.h:213
static int Ivy_ObjIsAssert(Ivy_Obj_t *pObj)
Definition: ivy.h:240
Ivy_Man_t * Ivy_ManResyn0(Ivy_Man_t *p, int fUpdateLevel, int fVerbose)
DECLARATIONS ///.
Definition: ivyResyn.c:45
static Ivy_Edge_t Ivy_EdgeRegular(Ivy_Edge_t Edge)
Definition: ivy.h:208
static int Ivy_EdgeId(Ivy_Edge_t Edge)
Definition: ivy.h:206
Ivy_Obj_t * Ivy_ObjCreatePi(Ivy_Man_t *p)
DECLARATIONS ///.
Definition: ivyObj.c:45
static int Ivy_ObjIsCi(Ivy_Obj_t *pObj)
Definition: ivy.h:238
int Ivy_ManSeqRewrite(Ivy_Man_t *p, int fUpdateLevel, int fUseZeroCost)
Ivy_Man_t * Ivy_ManBalance(Ivy_Man_t *p, int fUpdateLevel)
FUNCTION DECLARATIONS ///.
Definition: ivyBalance.c:51
Ivy_Obj_t * Ivy_Maj(Ivy_Man_t *p, Ivy_Obj_t *pA, Ivy_Obj_t *pB, Ivy_Obj_t *pC)
Definition: ivyOper.c:209
static int Ivy_ManNodeNum(Ivy_Man_t *p)
Definition: ivy.h:227
int Ivy_ManRewritePre(Ivy_Man_t *p, int fUpdateLevel, int fUseZeroCost, int fVerbose)
FUNCTION DEFINITIONS ///.
Definition: ivyRwr.c:55
static Ivy_Obj_t * Ivy_ManPo(Ivy_Man_t *p, int i)
Definition: ivy.h:202
void Ivy_ObjPrintVerbose(Ivy_Man_t *p, Ivy_Obj_t *pObj, int fHaig)
Definition: ivyUtil.c:629
static Ivy_Obj_t * Ivy_ObjEquiv(Ivy_Obj_t *pObj)
Definition: ivy.h:277
int Ivy_CutTruthPrint(Ivy_Man_t *p, Ivy_Cut_t *pCut, unsigned uTruth)
Definition: ivyUtil.c:771
Ivy_Obj_t * Ivy_MultiBalance_rec(Ivy_Man_t *p, Ivy_Obj_t **pArgs, int nArgs, Ivy_Type_t Type)
int fPatScores
Definition: ivy.h:136
void Ivy_FastMapReadSupp(Ivy_Man_t *pAig, Ivy_Obj_t *pObj, Vec_Int_t *vLeaves)
Definition: ivyFastMap.c:793
Vec_Vec_t * Ivy_ManLevelize(Ivy_Man_t *p)
Definition: ivyDfs.c:224
ABC_INT64_T abctime
Definition: abc_global.h:278
int nClassesSkip
Definition: ivy.h:122
Ivy_Type_t
Definition: ivy.h:52
Definition: ivy.h:54
static Ivy_Obj_t * Ivy_ManFetchMemory(Ivy_Man_t *p)
Definition: ivy.h:364
Ivy_Obj_t * Ivy_Multi1(Ivy_Man_t *p, Ivy_Obj_t **pArgs, int nArgs, Ivy_Type_t Type)
void Ivy_ManStartMemory(Ivy_Man_t *p)
FUNCTION DEFINITIONS ///.
Definition: ivyMem.c:49
#define IVY_CUT_LIMIT
Definition: ivy.h:152
int nLatches
Definition: ivy.h:158
static int Ivy_LeafLat(int Leaf)
Definition: ivy.h:216
static int Ivy_ObjFaninC0(Ivy_Obj_t *pObj)
Definition: ivy.h:269
void Ivy_ObjCollectFanouts(Ivy_Man_t *p, Ivy_Obj_t *pObj, Vec_Ptr_t *vArray)
Definition: ivyFanout.c:262
static Ivy_Init_t Ivy_ObjInit(Ivy_Obj_t *pObj)
Definition: ivy.h:232
void * pData
Definition: ivy.h:119
Definition: ivy.h:56
int nRefs
Definition: ivy.h:85
Ivy_Obj_t * Ivy_And(Ivy_Man_t *p, Ivy_Obj_t *p0, Ivy_Obj_t *p1)
Definition: ivyOper.c:84
int Ivy_ManCheck(Ivy_Man_t *p)
DECLARATIONS ///.
Definition: ivyCheck.c:45
static int Ivy_ObjFanoutC(Ivy_Obj_t *pObj, Ivy_Obj_t *pFanout)
Definition: ivy.h:300
int Ivy_ManCleanup(Ivy_Man_t *p)
Definition: ivyMan.c:265
Ivy_Obj_t * pPrevFan1
Definition: ivy.h:92
static int Ivy_ObjId(Ivy_Obj_t *pObj)
Definition: ivy.h:260
abctime time1
Definition: ivy.h:128
int nBTLimitMiter
Definition: ivy.h:144
static void Ivy_ObjSetTravIdCurrent(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Definition: ivy.h:255
static int Ivy_ManGetCost(Ivy_Man_t *p)
Definition: ivy.h:229
Ivy_Obj_t * Ivy_ObjReadFirstFanout(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Definition: ivyFanout.c:283
void Ivy_ManCollectCone(Ivy_Obj_t *pObj, Vec_Ptr_t *vFront, Vec_Ptr_t *vCone)
Definition: ivyDfs.c:195
unsigned * Ivy_ManCutTruth(Ivy_Man_t *p, Ivy_Obj_t *pRoot, Vec_Int_t *vLeaves, Vec_Int_t *vNodes, Vec_Int_t *vTruth)
Definition: ivyUtil.c:186
Ivy_Obj_t * pEquiv
Definition: ivy.h:93
void Ivy_ObjPatchFanin0(Ivy_Man_t *p, Ivy_Obj_t *pObj, Ivy_Obj_t *pFaninNew)
Definition: ivyObj.c:224
void Ivy_ManHaigCreateObj(Ivy_Man_t *p, Ivy_Obj_t *pObj)
Definition: ivyHaig.c:183