abc-master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
aig.h
Go to the documentation of this file.
1 /**CFile****************************************************************
2 
3  FileName [aig.h]
4 
5  SystemName [ABC: Logic synthesis and verification system.]
6 
7  PackageName [AIG package.]
8 
9  Synopsis [External declarations.]
10 
11  Author [Alan Mishchenko]
12 
13  Affiliation [UC Berkeley]
14 
15  Date [Ver. 1.0. Started - April 28, 2007.]
16 
17  Revision [$Id: aig.h,v 1.00 2007/04/28 00:00:00 alanmi Exp $]
18 
19 ***********************************************************************/
20 
21 #ifndef ABC__aig__aig__aig_h
22 #define ABC__aig__aig__aig_h
23 
24 
25 ////////////////////////////////////////////////////////////////////////
26 /// INCLUDES ///
27 ////////////////////////////////////////////////////////////////////////
28 
29 #include <stdio.h>
30 #include <stdlib.h>
31 #include <string.h>
32 #include <assert.h>
33 
34 #include "misc/vec/vec.h"
35 #include "misc/util/utilCex.h"
36 
37 ////////////////////////////////////////////////////////////////////////
38 /// PARAMETERS ///
39 ////////////////////////////////////////////////////////////////////////
40 
41 
42 
44 
45 
46 ////////////////////////////////////////////////////////////////////////
47 /// BASIC TYPES ///
48 ////////////////////////////////////////////////////////////////////////
49 
50 typedef struct Aig_Man_t_ Aig_Man_t;
51 typedef struct Aig_Obj_t_ Aig_Obj_t;
52 typedef struct Aig_MmFixed_t_ Aig_MmFixed_t;
53 typedef struct Aig_MmFlex_t_ Aig_MmFlex_t;
54 typedef struct Aig_MmStep_t_ Aig_MmStep_t;
55 
56 // object types
57 typedef enum {
58  AIG_OBJ_NONE, // 0: non-existent object
59  AIG_OBJ_CONST1, // 1: constant 1
60  AIG_OBJ_CI, // 2: combinational input
61  AIG_OBJ_CO, // 3: combinational output
62  AIG_OBJ_BUF, // 4: buffer node
63  AIG_OBJ_AND, // 5: AND node
64  AIG_OBJ_EXOR, // 6: EXOR node
65  AIG_OBJ_VOID // 7: unused object
66 } Aig_Type_t;
67 
68 // the AIG node
69 struct Aig_Obj_t_ // 8 words
70 {
71  union {
72  Aig_Obj_t * pNext; // strashing table
73  int CioId; // 0-based number of CI/CO
74  };
75  Aig_Obj_t * pFanin0; // fanin
76  Aig_Obj_t * pFanin1; // fanin
77  unsigned int Type : 3; // object type
78  unsigned int fPhase : 1; // value under 000...0 pattern
79  unsigned int fMarkA : 1; // multipurpose mask
80  unsigned int fMarkB : 1; // multipurpose mask
81  unsigned int nRefs : 26; // reference count
82  unsigned Level : 24; // the level of this node
83  unsigned nCuts : 8; // the number of cuts
84  int TravId; // unique ID of last traversal involving the node
85  int Id; // unique ID of the node
86  union { // temporary store for user's data
87  void * pData;
88  int iData;
89  float dData;
90  };
91 };
92 
93 // the AIG manager
94 struct Aig_Man_t_
95 {
96  char * pName; // the design name
97  char * pSpec; // the input file name
98  // AIG nodes
99  Vec_Ptr_t * vCis; // the array of PIs
100  Vec_Ptr_t * vCos; // the array of POs
101  Vec_Ptr_t * vObjs; // the array of all nodes (optional)
102  Vec_Ptr_t * vBufs; // the array of buffers
103  Aig_Obj_t * pConst1; // the constant 1 node
104  Aig_Obj_t Ghost; // the ghost node
105  int nRegs; // the number of registers (registers are last POs)
106  int nTruePis; // the number of true primary inputs
107  int nTruePos; // the number of true primary outputs
108  int nAsserts; // the number of asserts among POs (asserts are first POs)
109  int nConstrs; // the number of constraints (model checking only)
110  int nBarBufs; // the number of barrier buffers
111  // AIG node counters
112  int nObjs[AIG_OBJ_VOID];// the number of objects by type
113  int nDeleted; // the number of deleted objects
114  // structural hash table
115  Aig_Obj_t ** pTable; // structural hash table
116  int nTableSize; // structural hash table size
117  // representation of fanouts
118  int * pFanData; // the database to store fanout information
119  int nFansAlloc; // the size of fanout representation
120  Vec_Vec_t * vLevels; // used to update timing information
121  int nBufReplaces; // the number of times replacement led to a buffer
122  int nBufFixes; // the number of times buffers were propagated
123  int nBufMax; // the maximum number of buffers during computation
124  // topological order
125  unsigned * pOrderData;
127  int iPrev;
128  int iNext;
130  int nAndPrev;
131  // representatives
132  Aig_Obj_t ** pEquivs; // linked list of equivalent nodes (when choices are used)
133  Aig_Obj_t ** pReprs; // representatives of each node
134  int nReprsAlloc; // the number of allocated representatives
135  // various data members
136  Aig_MmFixed_t * pMemObjs; // memory manager for objects
137  Vec_Int_t * vLevelR; // the reverse level of the nodes
138  int nLevelMax; // maximum number of levels
139  void * pData; // the temporary data
140  void * pData2; // the temporary data
141  int nTravIds; // the current traversal ID
142  int fCatchExor; // enables EXOR nodes
143  int fAddStrash; // performs additional strashing
144  Aig_Obj_t ** pObjCopies; // mapping of AIG nodes into FRAIG nodes
145  void (*pImpFunc) (void*, void*); // implication checking precedure
146  void * pImpData; // implication checking data
147  void * pManTime; // the timing manager
148  void * pManCuts;
149  int * pFastSim;
150  unsigned * pTerSimData; // ternary simulation data
155  Vec_Ptr_t * vSeqModelVec; // vector of counter-examples (for sequential miters)
161  Vec_Int_t * vProbs; // probability of node being 1
162  Vec_Int_t * vCiNumsOrig; // original CI names
163  int nComplEdges; // complemented edges
165  // timing statistics
168  //-- jlong -- begin
171  //-- jlong -- end
172 };
173 
174 // cut computation
176 typedef struct Aig_Cut_t_ Aig_Cut_t;
177 
178 // the cut used to represent node in the AIG
180 {
181  Aig_Cut_t * pNext; // the next cut in the table
182  int Cost; // the cost of the cut
183  unsigned uSign; // cut signature
184  int iNode; // the node, for which it is the cut
185  short nCutSize; // the number of bytes in the cut
186  char nLeafMax; // the maximum number of fanins
187  char nFanins; // the current number of fanins
188  int pFanins[0]; // the fanins (followed by the truth table)
189 };
190 
191 // the CNF computation manager
193 {
194  // AIG manager
195  Aig_Man_t * pAig; // the input AIG manager
196  Aig_Cut_t ** pCuts; // the cuts for each node in the output manager
197  // parameters
198  int nCutsMax; // the max number of cuts at the node
199  int nLeafMax; // the max number of leaves of a cut
200  int fTruth; // enables truth table computation
201  int fVerbose; // enables verbose output
202  // internal variables
203  int nCutSize; // the number of bytes needed to store one cut
204  int nTruthWords; // the number of truth table words
205  Aig_MmFixed_t * pMemCuts; // memory manager for cuts
206  unsigned * puTemp[4]; // used for the truth table computation
207 };
208 
209 static inline Aig_Cut_t * Aig_ObjCuts( Aig_ManCut_t * p, Aig_Obj_t * pObj ) { return p->pCuts[pObj->Id]; }
210 static inline void Aig_ObjSetCuts( Aig_ManCut_t * p, Aig_Obj_t * pObj, Aig_Cut_t * pCuts ) { p->pCuts[pObj->Id] = pCuts; }
211 
212 static inline int Aig_CutLeaveNum( Aig_Cut_t * pCut ) { return pCut->nFanins; }
213 static inline int * Aig_CutLeaves( Aig_Cut_t * pCut ) { return pCut->pFanins; }
214 static inline unsigned * Aig_CutTruth( Aig_Cut_t * pCut ) { return (unsigned *)(pCut->pFanins + pCut->nLeafMax); }
215 static inline Aig_Cut_t * Aig_CutNext( Aig_Cut_t * pCut ) { return (Aig_Cut_t *)(((char *)pCut) + pCut->nCutSize); }
216 
217 // iterator over cuts of the node
218 #define Aig_ObjForEachCut( p, pObj, pCut, i ) \
219  for ( i = 0, pCut = Aig_ObjCuts(p, pObj); i < p->nCutsMax; i++, pCut = Aig_CutNext(pCut) )
220 // iterator over leaves of the cut
221 #define Aig_CutForEachLeaf( p, pCut, pLeaf, i ) \
222  for ( i = 0; (i < (int)(pCut)->nFanins) && ((pLeaf) = Aig_ManObj(p, (pCut)->pFanins[i])); i++ )
223 
224 ////////////////////////////////////////////////////////////////////////
225 /// MACRO DEFINITIONS ///
226 ////////////////////////////////////////////////////////////////////////
227 
228 static inline unsigned Aig_ObjCutSign( unsigned ObjId ) { return (1 << (ObjId & 31)); }
229 static inline int Aig_WordCountOnes( unsigned uWord )
230 {
231  uWord = (uWord & 0x55555555) + ((uWord>>1) & 0x55555555);
232  uWord = (uWord & 0x33333333) + ((uWord>>2) & 0x33333333);
233  uWord = (uWord & 0x0F0F0F0F) + ((uWord>>4) & 0x0F0F0F0F);
234  uWord = (uWord & 0x00FF00FF) + ((uWord>>8) & 0x00FF00FF);
235  return (uWord & 0x0000FFFF) + (uWord>>16);
236 }
237 static inline int Aig_WordFindFirstBit( unsigned uWord )
238 {
239  int i;
240  for ( i = 0; i < 32; i++ )
241  if ( uWord & (1 << i) )
242  return i;
243  return -1;
244 }
245 
246 static inline Aig_Obj_t * Aig_Regular( Aig_Obj_t * p ) { return (Aig_Obj_t *)((ABC_PTRUINT_T)(p) & ~01); }
247 static inline Aig_Obj_t * Aig_Not( Aig_Obj_t * p ) { return (Aig_Obj_t *)((ABC_PTRUINT_T)(p) ^ 01); }
248 static inline Aig_Obj_t * Aig_NotCond( Aig_Obj_t * p, int c ) { return (Aig_Obj_t *)((ABC_PTRUINT_T)(p) ^ (c)); }
249 static inline int Aig_IsComplement( Aig_Obj_t * p ) { return (int)((ABC_PTRUINT_T)(p) & 01); }
250 
251 static inline int Aig_ManCiNum( Aig_Man_t * p ) { return p->nObjs[AIG_OBJ_CI]; }
252 static inline int Aig_ManCoNum( Aig_Man_t * p ) { return p->nObjs[AIG_OBJ_CO]; }
253 static inline int Aig_ManBufNum( Aig_Man_t * p ) { return p->nObjs[AIG_OBJ_BUF]; }
254 static inline int Aig_ManAndNum( Aig_Man_t * p ) { return p->nObjs[AIG_OBJ_AND]; }
255 static inline int Aig_ManExorNum( Aig_Man_t * p ) { return p->nObjs[AIG_OBJ_EXOR]; }
256 static inline int Aig_ManNodeNum( Aig_Man_t * p ) { return p->nObjs[AIG_OBJ_AND]+p->nObjs[AIG_OBJ_EXOR]; }
257 static inline int Aig_ManGetCost( Aig_Man_t * p ) { return p->nObjs[AIG_OBJ_AND]+3*p->nObjs[AIG_OBJ_EXOR]; }
258 static inline int Aig_ManObjNum( Aig_Man_t * p ) { return Vec_PtrSize(p->vObjs) - p->nDeleted; }
259 static inline int Aig_ManObjNumMax( Aig_Man_t * p ) { return Vec_PtrSize(p->vObjs); }
260 static inline int Aig_ManRegNum( Aig_Man_t * p ) { return p->nRegs; }
261 static inline int Aig_ManConstrNum( Aig_Man_t * p ) { return p->nConstrs; }
262 
263 static inline Aig_Obj_t * Aig_ManConst0( Aig_Man_t * p ) { return Aig_Not(p->pConst1); }
264 static inline Aig_Obj_t * Aig_ManConst1( Aig_Man_t * p ) { return p->pConst1; }
265 static inline Aig_Obj_t * Aig_ManGhost( Aig_Man_t * p ) { return &p->Ghost; }
266 static inline Aig_Obj_t * Aig_ManCi( Aig_Man_t * p, int i ) { return (Aig_Obj_t *)Vec_PtrEntry(p->vCis, i); }
267 static inline Aig_Obj_t * Aig_ManCo( Aig_Man_t * p, int i ) { return (Aig_Obj_t *)Vec_PtrEntry(p->vCos, i); }
268 static inline Aig_Obj_t * Aig_ManLo( Aig_Man_t * p, int i ) { return (Aig_Obj_t *)Vec_PtrEntry(p->vCis, Aig_ManCiNum(p)-Aig_ManRegNum(p)+i); }
269 static inline Aig_Obj_t * Aig_ManLi( Aig_Man_t * p, int i ) { return (Aig_Obj_t *)Vec_PtrEntry(p->vCos, Aig_ManCoNum(p)-Aig_ManRegNum(p)+i); }
270 static inline Aig_Obj_t * Aig_ManObj( Aig_Man_t * p, int i ) { return p->vObjs ? (Aig_Obj_t *)Vec_PtrEntry(p->vObjs, i) : NULL; }
271 
272 static inline Aig_Type_t Aig_ObjType( Aig_Obj_t * pObj ) { return (Aig_Type_t)pObj->Type; }
273 static inline int Aig_ObjIsNone( Aig_Obj_t * pObj ) { return pObj->Type == AIG_OBJ_NONE; }
274 static inline int Aig_ObjIsConst1( Aig_Obj_t * pObj ) { assert(!Aig_IsComplement(pObj)); return pObj->Type == AIG_OBJ_CONST1; }
275 static inline int Aig_ObjIsCi( Aig_Obj_t * pObj ) { return pObj->Type == AIG_OBJ_CI; }
276 static inline int Aig_ObjIsCo( Aig_Obj_t * pObj ) { return pObj->Type == AIG_OBJ_CO; }
277 static inline int Aig_ObjIsBuf( Aig_Obj_t * pObj ) { return pObj->Type == AIG_OBJ_BUF; }
278 static inline int Aig_ObjIsAnd( Aig_Obj_t * pObj ) { return pObj->Type == AIG_OBJ_AND; }
279 static inline int Aig_ObjIsExor( Aig_Obj_t * pObj ) { return pObj->Type == AIG_OBJ_EXOR; }
280 static inline int Aig_ObjIsNode( Aig_Obj_t * pObj ) { return pObj->Type == AIG_OBJ_AND || pObj->Type == AIG_OBJ_EXOR; }
281 static inline int Aig_ObjIsTerm( Aig_Obj_t * pObj ) { return pObj->Type == AIG_OBJ_CI || pObj->Type == AIG_OBJ_CO || pObj->Type == AIG_OBJ_CONST1; }
282 static inline int Aig_ObjIsHash( Aig_Obj_t * pObj ) { return pObj->Type == AIG_OBJ_AND || pObj->Type == AIG_OBJ_EXOR; }
283 static inline int Aig_ObjIsChoice( Aig_Man_t * p, Aig_Obj_t * pObj ) { return p->pEquivs && p->pEquivs[pObj->Id] && pObj->nRefs > 0; }
284 static inline int Aig_ObjIsCand( Aig_Obj_t * pObj ) { return pObj->Type == AIG_OBJ_CI || pObj->Type == AIG_OBJ_AND || pObj->Type == AIG_OBJ_EXOR; }
285 static inline int Aig_ObjCioId( Aig_Obj_t * pObj ) { assert( !Aig_ObjIsNode(pObj) ); return pObj->CioId; }
286 static inline int Aig_ObjId( Aig_Obj_t * pObj ) { return pObj->Id; }
287 
288 static inline int Aig_ObjIsMarkA( Aig_Obj_t * pObj ) { return pObj->fMarkA; }
289 static inline void Aig_ObjSetMarkA( Aig_Obj_t * pObj ) { pObj->fMarkA = 1; }
290 static inline void Aig_ObjClearMarkA( Aig_Obj_t * pObj ) { pObj->fMarkA = 0; }
291 
292 static inline void Aig_ObjSetTravId( Aig_Obj_t * pObj, int TravId ) { pObj->TravId = TravId; }
293 static inline void Aig_ObjSetTravIdCurrent( Aig_Man_t * p, Aig_Obj_t * pObj ) { pObj->TravId = p->nTravIds; }
294 static inline void Aig_ObjSetTravIdPrevious( Aig_Man_t * p, Aig_Obj_t * pObj ) { pObj->TravId = p->nTravIds - 1; }
295 static inline int Aig_ObjIsTravIdCurrent( Aig_Man_t * p, Aig_Obj_t * pObj ) { return (int)(pObj->TravId == p->nTravIds); }
296 static inline int Aig_ObjIsTravIdPrevious( Aig_Man_t * p, Aig_Obj_t * pObj ) { return (int)(pObj->TravId == p->nTravIds - 1); }
297 
298 static inline int Aig_ObjPhase( Aig_Obj_t * pObj ) { return pObj->fPhase; }
299 static inline int Aig_ObjPhaseReal( Aig_Obj_t * pObj ) { return pObj? Aig_Regular(pObj)->fPhase ^ Aig_IsComplement(pObj) : 1; }
300 static inline int Aig_ObjRefs( Aig_Obj_t * pObj ) { return pObj->nRefs; }
301 static inline void Aig_ObjRef( Aig_Obj_t * pObj ) { pObj->nRefs++; }
302 static inline void Aig_ObjDeref( Aig_Obj_t * pObj ) { assert( pObj->nRefs > 0 ); pObj->nRefs--; }
303 static inline void Aig_ObjClearRef( Aig_Obj_t * pObj ) { pObj->nRefs = 0; }
304 static inline int Aig_ObjFaninId0( Aig_Obj_t * pObj ) { return pObj->pFanin0? Aig_Regular(pObj->pFanin0)->Id : -1; }
305 static inline int Aig_ObjFaninId1( Aig_Obj_t * pObj ) { return pObj->pFanin1? Aig_Regular(pObj->pFanin1)->Id : -1; }
306 static inline int Aig_ObjFaninC0( Aig_Obj_t * pObj ) { return Aig_IsComplement(pObj->pFanin0); }
307 static inline int Aig_ObjFaninC1( Aig_Obj_t * pObj ) { return Aig_IsComplement(pObj->pFanin1); }
308 static inline Aig_Obj_t * Aig_ObjFanin0( Aig_Obj_t * pObj ) { return Aig_Regular(pObj->pFanin0); }
309 static inline Aig_Obj_t * Aig_ObjFanin1( Aig_Obj_t * pObj ) { return Aig_Regular(pObj->pFanin1); }
310 static inline Aig_Obj_t * Aig_ObjChild0( Aig_Obj_t * pObj ) { return pObj->pFanin0; }
311 static inline Aig_Obj_t * Aig_ObjChild1( Aig_Obj_t * pObj ) { return pObj->pFanin1; }
312 static inline Aig_Obj_t * Aig_ObjChild0Copy( Aig_Obj_t * pObj ) { assert( !Aig_IsComplement(pObj) ); return Aig_ObjFanin0(pObj)? Aig_NotCond((Aig_Obj_t *)Aig_ObjFanin0(pObj)->pData, Aig_ObjFaninC0(pObj)) : NULL; }
313 static inline Aig_Obj_t * Aig_ObjChild1Copy( Aig_Obj_t * pObj ) { assert( !Aig_IsComplement(pObj) ); return Aig_ObjFanin1(pObj)? Aig_NotCond((Aig_Obj_t *)Aig_ObjFanin1(pObj)->pData, Aig_ObjFaninC1(pObj)) : NULL; }
314 static inline Aig_Obj_t * Aig_ObjChild0Next( Aig_Obj_t * pObj ) { assert( !Aig_IsComplement(pObj) ); return Aig_ObjFanin0(pObj)? Aig_NotCond((Aig_Obj_t *)Aig_ObjFanin0(pObj)->pNext, Aig_ObjFaninC0(pObj)) : NULL; }
315 static inline Aig_Obj_t * Aig_ObjChild1Next( Aig_Obj_t * pObj ) { assert( !Aig_IsComplement(pObj) ); return Aig_ObjFanin1(pObj)? Aig_NotCond((Aig_Obj_t *)Aig_ObjFanin1(pObj)->pNext, Aig_ObjFaninC1(pObj)) : NULL; }
316 static inline void Aig_ObjChild0Flip( Aig_Obj_t * pObj ) { assert( !Aig_IsComplement(pObj) ); pObj->pFanin0 = Aig_Not(pObj->pFanin0); }
317 static inline void Aig_ObjChild1Flip( Aig_Obj_t * pObj ) { assert( !Aig_IsComplement(pObj) ); pObj->pFanin1 = Aig_Not(pObj->pFanin1); }
318 static inline Aig_Obj_t * Aig_ObjCopy( Aig_Obj_t * pObj ) { assert( !Aig_IsComplement(pObj) ); return (Aig_Obj_t *)pObj->pData; }
319 static inline void Aig_ObjSetCopy( Aig_Obj_t * pObj, Aig_Obj_t * pCopy ) { assert( !Aig_IsComplement(pObj) ); pObj->pData = pCopy; }
320 static inline Aig_Obj_t * Aig_ObjRealCopy( Aig_Obj_t * pObj ) { return Aig_NotCond((Aig_Obj_t *)Aig_Regular(pObj)->pData, Aig_IsComplement(pObj));}
321 static inline int Aig_ObjToLit( Aig_Obj_t * pObj ) { return Abc_Var2Lit( Aig_ObjId(Aig_Regular(pObj)), Aig_IsComplement(pObj) ); }
322 static inline Aig_Obj_t * Aig_ObjFromLit( Aig_Man_t * p,int iLit){ return Aig_NotCond( Aig_ManObj(p, Abc_Lit2Var(iLit)), Abc_LitIsCompl(iLit) ); }
323 static inline int Aig_ObjLevel( Aig_Obj_t * pObj ) { assert( !Aig_IsComplement(pObj) ); return pObj->Level; }
324 static inline int Aig_ObjLevelNew( Aig_Obj_t * pObj ) { assert( !Aig_IsComplement(pObj) ); return Aig_ObjFanin1(pObj)? 1 + Aig_ObjIsExor(pObj) + Abc_MaxInt(Aig_ObjFanin0(pObj)->Level, Aig_ObjFanin1(pObj)->Level) : Aig_ObjFanin0(pObj)->Level; }
325 static inline int Aig_ObjSetLevel( Aig_Obj_t * pObj, int i ) { assert( !Aig_IsComplement(pObj) ); return pObj->Level = i; }
326 static inline void Aig_ObjClean( Aig_Obj_t * pObj ) { memset( pObj, 0, sizeof(Aig_Obj_t) ); }
327 static inline Aig_Obj_t * Aig_ObjFanout0( Aig_Man_t * p, Aig_Obj_t * pObj ) { assert(p->pFanData && pObj->Id < p->nFansAlloc); return Aig_ManObj(p, p->pFanData[5*pObj->Id] >> 1); }
328 static inline Aig_Obj_t * Aig_ObjEquiv( Aig_Man_t * p, Aig_Obj_t * pObj ) { return p->pEquivs? p->pEquivs[pObj->Id] : NULL; }
329 static inline void Aig_ObjSetEquiv( Aig_Man_t * p, Aig_Obj_t * pObj, Aig_Obj_t * pEqu ) { assert(p->pEquivs); p->pEquivs[pObj->Id] = pEqu; }
330 static inline Aig_Obj_t * Aig_ObjRepr( Aig_Man_t * p, Aig_Obj_t * pObj ) { return p->pReprs? p->pReprs[pObj->Id] : NULL; }
331 static inline void Aig_ObjSetRepr( Aig_Man_t * p, Aig_Obj_t * pObj, Aig_Obj_t * pRepr ) { assert(p->pReprs); p->pReprs[pObj->Id] = pRepr; }
332 static inline int Aig_ObjWhatFanin( Aig_Obj_t * pObj, Aig_Obj_t * pFanin )
333 {
334  if ( Aig_ObjFanin0(pObj) == pFanin ) return 0;
335  if ( Aig_ObjFanin1(pObj) == pFanin ) return 1;
336  assert(0); return -1;
337 }
338 static inline int Aig_ObjFanoutC( Aig_Obj_t * pObj, Aig_Obj_t * pFanout )
339 {
340  if ( Aig_ObjFanin0(pFanout) == pObj ) return Aig_ObjFaninC0(pObj);
341  if ( Aig_ObjFanin1(pFanout) == pObj ) return Aig_ObjFaninC1(pObj);
342  assert(0); return -1;
343 }
344 
345 // create the ghost of the new node
346 static inline Aig_Obj_t * Aig_ObjCreateGhost( Aig_Man_t * p, Aig_Obj_t * p0, Aig_Obj_t * p1, Aig_Type_t Type )
347 {
348  Aig_Obj_t * pGhost;
349  assert( Type != AIG_OBJ_AND || !Aig_ObjIsConst1(Aig_Regular(p0)) );
350  assert( p1 == NULL || !Aig_ObjIsConst1(Aig_Regular(p1)) );
351  assert( Type == AIG_OBJ_CI || Aig_Regular(p0) != Aig_Regular(p1) );
352  pGhost = Aig_ManGhost(p);
353  pGhost->Type = Type;
354  if ( p1 == NULL || Aig_Regular(p0)->Id < Aig_Regular(p1)->Id )
355  {
356  pGhost->pFanin0 = p0;
357  pGhost->pFanin1 = p1;
358  }
359  else
360  {
361  pGhost->pFanin0 = p1;
362  pGhost->pFanin1 = p0;
363  }
364  return pGhost;
365 }
366 
367 // internal memory manager
369 {
370  extern char * Aig_MmFixedEntryFetch( Aig_MmFixed_t * p );
371  Aig_Obj_t * pTemp;
372  pTemp = (Aig_Obj_t *)Aig_MmFixedEntryFetch( p->pMemObjs );
373  memset( pTemp, 0, sizeof(Aig_Obj_t) );
374  pTemp->Id = Vec_PtrSize(p->vObjs);
375  Vec_PtrPush( p->vObjs, pTemp );
376  return pTemp;
377 }
378 static inline void Aig_ManRecycleMemory( Aig_Man_t * p, Aig_Obj_t * pEntry )
379 {
380  extern void Aig_MmFixedEntryRecycle( Aig_MmFixed_t * p, char * pEntry );
381  assert( pEntry->nRefs == 0 );
382  pEntry->Type = AIG_OBJ_NONE; // distinquishes a dead node from a live node
383  Aig_MmFixedEntryRecycle( p->pMemObjs, (char *)pEntry );
384  p->nDeleted++;
385 }
386 
387 
388 ////////////////////////////////////////////////////////////////////////
389 /// ITERATORS ///
390 ////////////////////////////////////////////////////////////////////////
391 
392 // iterator over the combinational inputs
393 #define Aig_ManForEachCi( p, pObj, i ) \
394  Vec_PtrForEachEntry( Aig_Obj_t *, p->vCis, pObj, i )
395 #define Aig_ManForEachCiReverse( p, pObj, i ) \
396  Vec_PtrForEachEntryReverse( Aig_Obj_t *, p->vCis, pObj, i )
397 // iterator over the combinational outputs
398 #define Aig_ManForEachCo( p, pObj, i ) \
399  Vec_PtrForEachEntry( Aig_Obj_t *, p->vCos, pObj, i )
400 #define Aig_ManForEachCoReverse( p, pObj, i ) \
401  Vec_PtrForEachEntryReverse( Aig_Obj_t *, p->vCos, pObj, i )
402 // iterators over all objects, including those currently not used
403 #define Aig_ManForEachObj( p, pObj, i ) \
404  Vec_PtrForEachEntry( Aig_Obj_t *, p->vObjs, pObj, i ) if ( (pObj) == NULL ) {} else
405 #define Aig_ManForEachObjReverse( p, pObj, i ) \
406  Vec_PtrForEachEntryReverse( Aig_Obj_t *, p->vObjs, pObj, i ) if ( (pObj) == NULL ) {} else
407 // iterators over the objects whose IDs are stored in an array
408 #define Aig_ManForEachObjVec( vIds, p, pObj, i ) \
409  for ( i = 0; i < Vec_IntSize(vIds) && (((pObj) = Aig_ManObj(p, Vec_IntEntry(vIds,i))), 1); i++ )
410 #define Aig_ManForEachObjVecReverse( vIds, p, pObj, i ) \
411  for ( i = Vec_IntSize(vIds) - 1; i >= 0 && (((pObj) = Aig_ManObj(p, Vec_IntEntry(vIds,i))), 1); i-- )
412 // iterators over all nodes
413 #define Aig_ManForEachNode( p, pObj, i ) \
414  Vec_PtrForEachEntry( Aig_Obj_t *, p->vObjs, pObj, i ) if ( (pObj) == NULL || !Aig_ObjIsNode(pObj) ) {} else
415 #define Aig_ManForEachNodeReverse( p, pObj, i ) \
416  Vec_PtrForEachEntryReverse( Aig_Obj_t *, p->vObjs, pObj, i ) if ( (pObj) == NULL || !Aig_ObjIsNode(pObj) ) {} else
417 // iterator over all nodes
418 #define Aig_ManForEachExor( p, pObj, i ) \
419  Vec_PtrForEachEntry( Aig_Obj_t *, p->vObjs, pObj, i ) if ( (pObj) == NULL || !Aig_ObjIsExor(pObj) ) {} else
420 #define Aig_ManForEachExorReverse( p, pObj, i ) \
421  Vec_PtrForEachEntryReverse( Aig_Obj_t *, p->vObjs, pObj, i ) if ( (pObj) == NULL || !Aig_ObjIsExor(pObj) ) {} else
422 
423 // these two procedures are only here for the use inside the iterator
424 static inline int Aig_ObjFanout0Int( Aig_Man_t * p, int ObjId ) { assert(ObjId < p->nFansAlloc); return p->pFanData[5*ObjId]; }
425 static inline int Aig_ObjFanoutNext( Aig_Man_t * p, int iFan ) { assert(iFan/2 < p->nFansAlloc); return p->pFanData[5*(iFan >> 1) + 3 + (iFan & 1)]; }
426 // iterator over the fanouts
427 #define Aig_ObjForEachFanout( p, pObj, pFanout, iFan, i ) \
428  for ( assert(p->pFanData), i = 0; (i < (int)(pObj)->nRefs) && \
429  (((iFan) = i? Aig_ObjFanoutNext(p, iFan) : Aig_ObjFanout0Int(p, pObj->Id)), 1) && \
430  (((pFanout) = Aig_ManObj(p, iFan>>1)), 1); i++ )
431 
432 
433 ////////////////////////////////////////////////////////////////////////
434 /// SEQUENTIAL ITERATORS ///
435 ////////////////////////////////////////////////////////////////////////
436 
437 // iterator over the primary inputs
438 #define Aig_ManForEachPiSeq( p, pObj, i ) \
439  Vec_PtrForEachEntryStop( Aig_Obj_t *, p->vCis, pObj, i, Aig_ManCiNum(p)-Aig_ManRegNum(p) )
440 // iterator over the latch outputs
441 #define Aig_ManForEachLoSeq( p, pObj, i ) \
442  Vec_PtrForEachEntryStart( Aig_Obj_t *, p->vCis, pObj, i, Aig_ManCiNum(p)-Aig_ManRegNum(p) )
443 // iterator over the primary outputs
444 #define Aig_ManForEachPoSeq( p, pObj, i ) \
445  Vec_PtrForEachEntryStop( Aig_Obj_t *, p->vCos, pObj, i, Aig_ManCoNum(p)-Aig_ManRegNum(p) )
446 // iterator over the latch inputs
447 #define Aig_ManForEachLiSeq( p, pObj, i ) \
448  Vec_PtrForEachEntryStart( Aig_Obj_t *, p->vCos, pObj, i, Aig_ManCoNum(p)-Aig_ManRegNum(p) )
449 // iterator over the latch input and outputs
450 #define Aig_ManForEachLiLoSeq( p, pObjLi, pObjLo, k ) \
451  for ( k = 0; (k < Aig_ManRegNum(p)) && (((pObjLi) = Aig_ManLi(p, k)), 1) \
452  && (((pObjLo)=Aig_ManLo(p, k)), 1); k++ )
453 
454 ////////////////////////////////////////////////////////////////////////
455 /// FUNCTION DECLARATIONS ///
456 ////////////////////////////////////////////////////////////////////////
457 
458 /*=== aigCheck.c ========================================================*/
459 extern ABC_DLL int Aig_ManCheck( Aig_Man_t * p );
460 extern void Aig_ManCheckMarkA( Aig_Man_t * p );
461 extern void Aig_ManCheckPhase( Aig_Man_t * p );
462 /*=== aigCuts.c ========================================================*/
463 extern Aig_ManCut_t * Aig_ComputeCuts( Aig_Man_t * pAig, int nCutsMax, int nLeafMax, int fTruth, int fVerbose );
464 extern void Aig_ManCutStop( Aig_ManCut_t * p );
465 /*=== aigDfs.c ==========================================================*/
466 extern int Aig_ManVerifyTopoOrder( Aig_Man_t * p );
467 extern Vec_Ptr_t * Aig_ManDfs( Aig_Man_t * p, int fNodesOnly );
468 extern Vec_Ptr_t * Aig_ManDfsAll( Aig_Man_t * p );
469 extern Vec_Ptr_t * Aig_ManDfsPreorder( Aig_Man_t * p, int fNodesOnly );
470 extern Vec_Vec_t * Aig_ManLevelize( Aig_Man_t * p );
471 extern Vec_Ptr_t * Aig_ManDfsNodes( Aig_Man_t * p, Aig_Obj_t ** ppNodes, int nNodes );
472 extern Vec_Ptr_t * Aig_ManDfsChoices( Aig_Man_t * p );
473 extern Vec_Ptr_t * Aig_ManDfsReverse( Aig_Man_t * p );
474 extern int Aig_ManLevelNum( Aig_Man_t * p );
475 extern int Aig_ManChoiceLevel( Aig_Man_t * p );
476 extern int Aig_DagSize( Aig_Obj_t * pObj );
477 extern int Aig_SupportSize( Aig_Man_t * p, Aig_Obj_t * pObj );
478 extern Vec_Ptr_t * Aig_Support( Aig_Man_t * p, Aig_Obj_t * pObj );
479 extern void Aig_SupportNodes( Aig_Man_t * p, Aig_Obj_t ** ppObjs, int nObjs, Vec_Ptr_t * vSupp );
480 extern void Aig_ConeUnmark_rec( Aig_Obj_t * pObj );
481 extern Aig_Obj_t * Aig_Transfer( Aig_Man_t * pSour, Aig_Man_t * pDest, Aig_Obj_t * pObj, int nVars );
482 extern Aig_Obj_t * Aig_Compose( Aig_Man_t * p, Aig_Obj_t * pRoot, Aig_Obj_t * pFunc, int iVar );
483 extern void Aig_ObjCollectCut( Aig_Obj_t * pRoot, Vec_Ptr_t * vLeaves, Vec_Ptr_t * vNodes );
484 extern int Aig_ObjCollectSuper( Aig_Obj_t * pObj, Vec_Ptr_t * vSuper );
485 /*=== aigDup.c ==========================================================*/
486 extern Aig_Obj_t * Aig_ManDupSimpleDfs_rec( Aig_Man_t * pNew, Aig_Man_t * p, Aig_Obj_t * pObj );
487 extern Aig_Man_t * Aig_ManDupSimple( Aig_Man_t * p );
490 extern Aig_Man_t * Aig_ManDupSimpleDfsPart( Aig_Man_t * p, Vec_Ptr_t * vPis, Vec_Ptr_t * vCos );
491 extern Aig_Man_t * Aig_ManDupOrdered( Aig_Man_t * p );
492 extern Aig_Man_t * Aig_ManDupCof( Aig_Man_t * p, int iInput, int Value );
493 extern Aig_Man_t * Aig_ManDupTrim( Aig_Man_t * p );
494 extern Aig_Man_t * Aig_ManDupExor( Aig_Man_t * p );
495 extern Aig_Man_t * Aig_ManDupDfs( Aig_Man_t * p );
496 extern Vec_Ptr_t * Aig_ManOrderPios( Aig_Man_t * p, Aig_Man_t * pOrder );
497 extern Aig_Man_t * Aig_ManDupDfsGuided( Aig_Man_t * p, Vec_Ptr_t * vPios );
501 extern Aig_Man_t * Aig_ManDupRepres( Aig_Man_t * p );
503 extern Aig_Man_t * Aig_ManCreateMiter( Aig_Man_t * p1, Aig_Man_t * p2, int fImpl );
504 extern Aig_Man_t * Aig_ManDupOrpos( Aig_Man_t * p, int fAddRegs );
505 extern Aig_Man_t * Aig_ManDupOneOutput( Aig_Man_t * p, int iPoNum, int fAddRegs );
506 extern Aig_Man_t * Aig_ManDupUnsolvedOutputs( Aig_Man_t * p, int fAddRegs );
507 extern Aig_Man_t * Aig_ManDupArray( Vec_Ptr_t * vArray );
508 extern Aig_Man_t * Aig_ManDupNodes( Aig_Man_t * pMan, Vec_Ptr_t * vArray );
509 /*=== aigFanout.c ==========================================================*/
510 extern void Aig_ObjAddFanout( Aig_Man_t * p, Aig_Obj_t * pObj, Aig_Obj_t * pFanout );
511 extern void Aig_ObjRemoveFanout( Aig_Man_t * p, Aig_Obj_t * pObj, Aig_Obj_t * pFanout );
512 extern void Aig_ManFanoutStart( Aig_Man_t * p );
513 extern void Aig_ManFanoutStop( Aig_Man_t * p );
514 /*=== aigFrames.c ==========================================================*/
515 extern Aig_Man_t * Aig_ManFrames( Aig_Man_t * pAig, int nFs, int fInit, int fOuts, int fRegs, int fEnlarge, Aig_Obj_t *** ppObjMap );
516 /*=== aigMan.c ==========================================================*/
517 extern Aig_Man_t * Aig_ManStart( int nNodesMax );
518 extern Aig_Man_t * Aig_ManStartFrom( Aig_Man_t * p );
519 extern Aig_Man_t * Aig_ManExtractMiter( Aig_Man_t * p, Aig_Obj_t * pNode1, Aig_Obj_t * pNode2 );
520 extern void Aig_ManStop( Aig_Man_t * p );
521 extern void Aig_ManStopP( Aig_Man_t ** p );
522 extern int Aig_ManCleanup( Aig_Man_t * p );
523 extern int Aig_ManAntiCleanup( Aig_Man_t * p );
524 extern int Aig_ManCiCleanup( Aig_Man_t * p );
525 extern int Aig_ManCoCleanup( Aig_Man_t * p );
526 extern void Aig_ManPrintStats( Aig_Man_t * p );
527 extern void Aig_ManReportImprovement( Aig_Man_t * p, Aig_Man_t * pNew );
528 extern void Aig_ManSetRegNum( Aig_Man_t * p, int nRegs );
529 extern void Aig_ManFlipFirstPo( Aig_Man_t * p );
530 extern void * Aig_ManReleaseData( Aig_Man_t * p );
531 /*=== aigMem.c ==========================================================*/
532 extern void Aig_ManStartMemory( Aig_Man_t * p );
533 extern void Aig_ManStopMemory( Aig_Man_t * p );
534 /*=== aigMffc.c ==========================================================*/
535 extern int Aig_NodeRef_rec( Aig_Obj_t * pNode, unsigned LevelMin );
536 extern int Aig_NodeDeref_rec( Aig_Obj_t * pNode, unsigned LevelMin, float * pPower, float * pProbs );
537 extern int Aig_NodeMffcSupp( Aig_Man_t * p, Aig_Obj_t * pNode, int LevelMin, Vec_Ptr_t * vSupp );
538 extern int Aig_NodeMffcLabel( Aig_Man_t * p, Aig_Obj_t * pNode, float * pPower );
539 extern int Aig_NodeMffcLabelCut( Aig_Man_t * p, Aig_Obj_t * pNode, Vec_Ptr_t * vLeaves );
540 extern int Aig_NodeMffcExtendCut( Aig_Man_t * p, Aig_Obj_t * pNode, Vec_Ptr_t * vLeaves, Vec_Ptr_t * vResult );
541 /*=== aigObj.c ==========================================================*/
542 extern Aig_Obj_t * Aig_ObjCreateCi( Aig_Man_t * p );
543 extern Aig_Obj_t * Aig_ObjCreateCo( Aig_Man_t * p, Aig_Obj_t * pDriver );
544 extern Aig_Obj_t * Aig_ObjCreate( Aig_Man_t * p, Aig_Obj_t * pGhost );
545 extern void Aig_ObjConnect( Aig_Man_t * p, Aig_Obj_t * pObj, Aig_Obj_t * pFan0, Aig_Obj_t * pFan1 );
546 extern void Aig_ObjDisconnect( Aig_Man_t * p, Aig_Obj_t * pObj );
547 extern void Aig_ObjDelete( Aig_Man_t * p, Aig_Obj_t * pObj );
548 extern void Aig_ObjDelete_rec( Aig_Man_t * p, Aig_Obj_t * pObj, int fFreeTop );
549 extern void Aig_ObjDeletePo( Aig_Man_t * p, Aig_Obj_t * pObj );
550 extern void Aig_ObjPrint( Aig_Man_t * p, Aig_Obj_t * pObj );
551 extern void Aig_ObjPatchFanin0( Aig_Man_t * p, Aig_Obj_t * pObj, Aig_Obj_t * pFaninNew );
552 extern void Aig_ObjReplace( Aig_Man_t * p, Aig_Obj_t * pObjOld, Aig_Obj_t * pObjNew, int fUpdateLevel );
553 /*=== aigOper.c =========================================================*/
554 extern Aig_Obj_t * Aig_IthVar( Aig_Man_t * p, int i );
555 extern Aig_Obj_t * Aig_Oper( Aig_Man_t * p, Aig_Obj_t * p0, Aig_Obj_t * p1, Aig_Type_t Type );
556 extern Aig_Obj_t * Aig_And( Aig_Man_t * p, Aig_Obj_t * p0, Aig_Obj_t * p1 );
557 extern Aig_Obj_t * Aig_Or( Aig_Man_t * p, Aig_Obj_t * p0, Aig_Obj_t * p1 );
558 extern Aig_Obj_t * Aig_Exor( Aig_Man_t * p, Aig_Obj_t * p0, Aig_Obj_t * p1 );
559 extern Aig_Obj_t * Aig_Mux( Aig_Man_t * p, Aig_Obj_t * pC, Aig_Obj_t * p1, Aig_Obj_t * p0 );
560 extern Aig_Obj_t * Aig_Maj( Aig_Man_t * p, Aig_Obj_t * pA, Aig_Obj_t * pB, Aig_Obj_t * pC );
561 extern Aig_Obj_t * Aig_Multi( Aig_Man_t * p, Aig_Obj_t ** pArgs, int nArgs, Aig_Type_t Type );
562 extern Aig_Obj_t * Aig_Miter( Aig_Man_t * p, Vec_Ptr_t * vPairs );
563 extern Aig_Obj_t * Aig_MiterTwo( Aig_Man_t * p, Vec_Ptr_t * vNodes1, Vec_Ptr_t * vNodes2 );
564 extern Aig_Obj_t * Aig_CreateAnd( Aig_Man_t * p, int nVars );
565 extern Aig_Obj_t * Aig_CreateOr( Aig_Man_t * p, int nVars );
566 extern Aig_Obj_t * Aig_CreateExor( Aig_Man_t * p, int nVars );
567 /*=== aigOrder.c =========================================================*/
568 extern void Aig_ManOrderStart( Aig_Man_t * p );
569 extern void Aig_ManOrderStop( Aig_Man_t * p );
570 extern void Aig_ObjOrderInsert( Aig_Man_t * p, int ObjId );
571 extern void Aig_ObjOrderRemove( Aig_Man_t * p, int ObjId );
572 extern void Aig_ObjOrderAdvance( Aig_Man_t * p );
573 /*=== aigPart.c =========================================================*/
574 extern Vec_Ptr_t * Aig_ManSupports( Aig_Man_t * p );
577 extern Vec_Ptr_t * Aig_ManPartitionSmart( Aig_Man_t * p, int nPartSizeLimit, int fVerbose, Vec_Ptr_t ** pvPartSupps );
578 extern Vec_Ptr_t * Aig_ManPartitionSmartRegisters( Aig_Man_t * pAig, int nSuppSizeLimit, int fVerbose );
579 extern Vec_Ptr_t * Aig_ManPartitionNaive( Aig_Man_t * p, int nPartSize );
580 extern Vec_Ptr_t * Aig_ManMiterPartitioned( Aig_Man_t * p1, Aig_Man_t * p2, int nPartSize, int fSmart );
581 extern Aig_Man_t * Aig_ManChoicePartitioned( Vec_Ptr_t * vAigs, int nPartSize, int nConfMax, int nLevelMax, int fVerbose );
582 extern Aig_Man_t * Aig_ManFraigPartitioned( Aig_Man_t * pAig, int nPartSize, int nConfMax, int nLevelMax, int fVerbose );
583 extern Aig_Man_t * Aig_ManChoiceConstructive( Vec_Ptr_t * vAigs, int fVerbose );
584 /*=== aigPartReg.c =========================================================*/
585 extern Vec_Ptr_t * Aig_ManRegPartitionSimple( Aig_Man_t * pAig, int nPartSize, int nOverSize );
586 extern void Aig_ManPartDivide( Vec_Ptr_t * vResult, Vec_Int_t * vDomain, int nPartSize, int nOverSize );
587 extern Vec_Ptr_t * Aig_ManRegPartitionSmart( Aig_Man_t * pAig, int nPartSize );
588 extern Aig_Man_t * Aig_ManRegCreatePart( Aig_Man_t * pAig, Vec_Int_t * vPart, int * pnCountPis, int * pnCountRegs, int ** ppMapBack );
589 extern Vec_Ptr_t * Aig_ManRegProjectOnehots( Aig_Man_t * pAig, Aig_Man_t * pPart, Vec_Ptr_t * vOnehots, int fVerbose );
590 /*=== aigRepr.c =========================================================*/
591 extern void Aig_ManReprStart( Aig_Man_t * p, int nIdMax );
592 extern void Aig_ManReprStop( Aig_Man_t * p );
593 extern void Aig_ObjCreateRepr( Aig_Man_t * p, Aig_Obj_t * pNode1, Aig_Obj_t * pNode2 );
594 extern void Aig_ManTransferRepr( Aig_Man_t * pNew, Aig_Man_t * p );
595 extern Aig_Man_t * Aig_ManDupRepr( Aig_Man_t * p, int fOrdered );
597 extern int Aig_ManCountReprs( Aig_Man_t * p );
598 extern Aig_Man_t * Aig_ManRehash( Aig_Man_t * p );
599 extern int Aig_ObjCheckTfi( Aig_Man_t * p, Aig_Obj_t * pNew, Aig_Obj_t * pOld );
600 extern void Aig_ManMarkValidChoices( Aig_Man_t * p );
601 extern int Aig_TransferMappedClasses( Aig_Man_t * pAig, Aig_Man_t * pPart, int * pMapBack );
602 /*=== aigRet.c ========================================================*/
603 extern Aig_Man_t * Rtm_ManRetime( Aig_Man_t * p, int fForward, int nStepsMax, int fVerbose );
604 /*=== aigRetF.c ========================================================*/
605 extern Aig_Man_t * Aig_ManRetimeFrontier( Aig_Man_t * p, int nStepsMax );
606 /*=== aigScl.c ==========================================================*/
607 extern Aig_Man_t * Aig_ManRemap( Aig_Man_t * p, Vec_Ptr_t * vMap );
608 extern int Aig_ManSeqCleanup( Aig_Man_t * p );
609 extern int Aig_ManSeqCleanupBasic( Aig_Man_t * p );
610 extern int Aig_ManCountMergeRegs( Aig_Man_t * p );
611 extern Aig_Man_t * Aig_ManReduceLaches( Aig_Man_t * p, int fVerbose );
612 extern void Aig_ManComputeSccs( Aig_Man_t * p );
613 extern Aig_Man_t * Aig_ManScl( Aig_Man_t * pAig, int fLatchConst, int fLatchEqual, int fUseMvSweep, int nFramesSymb, int nFramesSatur, int fVerbose, int fVeryVerbose );
614 /*=== aigShow.c ========================================================*/
615 extern void Aig_ManShow( Aig_Man_t * pMan, int fHaig, Vec_Ptr_t * vBold );
616 /*=== aigTable.c ========================================================*/
617 extern Aig_Obj_t * Aig_TableLookup( Aig_Man_t * p, Aig_Obj_t * pGhost );
618 extern Aig_Obj_t * Aig_TableLookupTwo( Aig_Man_t * p, Aig_Obj_t * pFanin0, Aig_Obj_t * pFanin1 );
619 extern void Aig_TableInsert( Aig_Man_t * p, Aig_Obj_t * pObj );
620 extern void Aig_TableDelete( Aig_Man_t * p, Aig_Obj_t * pObj );
621 extern int Aig_TableCountEntries( Aig_Man_t * p );
622 extern void Aig_TableProfile( Aig_Man_t * p );
623 extern void Aig_TableClear( Aig_Man_t * p );
624 /*=== aigTiming.c ========================================================*/
625 extern void Aig_ObjClearReverseLevel( Aig_Man_t * p, Aig_Obj_t * pObj );
626 extern int Aig_ObjRequiredLevel( Aig_Man_t * p, Aig_Obj_t * pObj );
627 extern void Aig_ManStartReverseLevels( Aig_Man_t * p, int nMaxLevelIncrease );
628 extern void Aig_ManStopReverseLevels( Aig_Man_t * p );
629 extern void Aig_ManUpdateLevel( Aig_Man_t * p, Aig_Obj_t * pObjNew );
630 extern void Aig_ManUpdateReverseLevel( Aig_Man_t * p, Aig_Obj_t * pObjNew );
631 extern void Aig_ManVerifyLevel( Aig_Man_t * p );
632 extern void Aig_ManVerifyReverseLevel( Aig_Man_t * p );
633 /*=== aigTruth.c ========================================================*/
634 extern unsigned * Aig_ManCutTruth( Aig_Obj_t * pRoot, Vec_Ptr_t * vLeaves, Vec_Ptr_t * vNodes, Vec_Ptr_t * vTruthElem, Vec_Ptr_t * vTruthStore );
635 /*=== aigTsim.c ========================================================*/
636 extern Aig_Man_t * Aig_ManConstReduce( Aig_Man_t * p, int fUseMvSweep, int nFramesSymb, int nFramesSatur, int fVerbose, int fVeryVerbose );
637 /*=== aigUtil.c =========================================================*/
638 extern void Aig_ManIncrementTravId( Aig_Man_t * p );
639 extern char * Aig_TimeStamp();
640 extern int Aig_ManHasNoGaps( Aig_Man_t * p );
641 extern int Aig_ManLevels( Aig_Man_t * p );
642 extern void Aig_ManResetRefs( Aig_Man_t * p );
643 extern void Aig_ManCleanMarkA( Aig_Man_t * p );
644 extern void Aig_ManCleanMarkB( Aig_Man_t * p );
645 extern void Aig_ManCleanMarkAB( Aig_Man_t * p );
646 extern void Aig_ManCleanData( Aig_Man_t * p );
647 extern void Aig_ObjCleanData_rec( Aig_Obj_t * pObj );
648 extern void Aig_ManCleanNext( Aig_Man_t * p );
649 extern void Aig_ObjCollectMulti( Aig_Obj_t * pFunc, Vec_Ptr_t * vSuper );
650 extern int Aig_ObjIsMuxType( Aig_Obj_t * pObj );
651 extern int Aig_ObjRecognizeExor( Aig_Obj_t * pObj, Aig_Obj_t ** ppFan0, Aig_Obj_t ** ppFan1 );
652 extern Aig_Obj_t * Aig_ObjRecognizeMux( Aig_Obj_t * pObj, Aig_Obj_t ** ppObjT, Aig_Obj_t ** ppObjE );
653 extern Aig_Obj_t * Aig_ObjReal_rec( Aig_Obj_t * pObj );
654 extern int Aig_ObjCompareIdIncrease( Aig_Obj_t ** pp1, Aig_Obj_t ** pp2 );
655 extern void Aig_ObjPrintEqn( FILE * pFile, Aig_Obj_t * pObj, Vec_Vec_t * vLevels, int Level );
656 extern void Aig_ObjPrintVerilog( FILE * pFile, Aig_Obj_t * pObj, Vec_Vec_t * vLevels, int Level );
657 extern void Aig_ObjPrintVerbose( Aig_Obj_t * pObj, int fHaig );
658 extern void Aig_ManPrintVerbose( Aig_Man_t * p, int fHaig );
659 extern void Aig_ManDump( Aig_Man_t * p );
660 extern void Aig_ManDumpBlif( Aig_Man_t * p, char * pFileName, Vec_Ptr_t * vPiNames, Vec_Ptr_t * vPoNames );
661 extern void Aig_ManDumpVerilog( Aig_Man_t * p, char * pFileName );
662 extern void Aig_ManSetCioIds( Aig_Man_t * p );
663 extern void Aig_ManCleanCioIds( Aig_Man_t * p );
664 extern int Aig_ManChoiceNum( Aig_Man_t * p );
665 extern char * Aig_FileNameGenericAppend( char * pBase, char * pSuffix );
666 extern unsigned Aig_ManRandom( int fReset );
667 extern word Aig_ManRandom64( int fReset );
668 extern void Aig_ManRandomInfo( Vec_Ptr_t * vInfo, int iInputStart, int iWordStart, int iWordStop );
669 extern void Aig_NodeUnionLists( Vec_Ptr_t * vArr1, Vec_Ptr_t * vArr2, Vec_Ptr_t * vArr );
670 extern void Aig_NodeIntersectLists( Vec_Ptr_t * vArr1, Vec_Ptr_t * vArr2, Vec_Ptr_t * vArr );
671 extern void Aig_ManSetPhase( Aig_Man_t * pAig );
672 extern Vec_Ptr_t * Aig_ManMuxesCollect( Aig_Man_t * pAig );
673 extern void Aig_ManMuxesDeref( Aig_Man_t * pAig, Vec_Ptr_t * vMuxes );
674 extern void Aig_ManMuxesRef( Aig_Man_t * pAig, Vec_Ptr_t * vMuxes );
675 extern void Aig_ManInvertConstraints( Aig_Man_t * pAig );
676 
677 /*=== aigWin.c =========================================================*/
678 extern void Aig_ManFindCut( Aig_Obj_t * pRoot, Vec_Ptr_t * vFront, Vec_Ptr_t * vVisited, int nSizeLimit, int nFanoutLimit );
679 
680 /*=== aigMem.c ===========================================================*/
681 // fixed-size-block memory manager
682 extern Aig_MmFixed_t * Aig_MmFixedStart( int nEntrySize, int nEntriesMax );
683 extern void Aig_MmFixedStop( Aig_MmFixed_t * p, int fVerbose );
684 extern char * Aig_MmFixedEntryFetch( Aig_MmFixed_t * p );
685 extern void Aig_MmFixedEntryRecycle( Aig_MmFixed_t * p, char * pEntry );
686 extern void Aig_MmFixedRestart( Aig_MmFixed_t * p );
687 extern int Aig_MmFixedReadMemUsage( Aig_MmFixed_t * p );
689 // flexible-size-block memory manager
690 extern Aig_MmFlex_t * Aig_MmFlexStart();
691 extern void Aig_MmFlexStop( Aig_MmFlex_t * p, int fVerbose );
692 extern char * Aig_MmFlexEntryFetch( Aig_MmFlex_t * p, int nBytes );
693 extern void Aig_MmFlexRestart( Aig_MmFlex_t * p );
694 extern int Aig_MmFlexReadMemUsage( Aig_MmFlex_t * p );
695 // hierarchical memory manager
696 extern Aig_MmStep_t * Aig_MmStepStart( int nSteps );
697 extern void Aig_MmStepStop( Aig_MmStep_t * p, int fVerbose );
698 extern char * Aig_MmStepEntryFetch( Aig_MmStep_t * p, int nBytes );
699 extern void Aig_MmStepEntryRecycle( Aig_MmStep_t * p, char * pEntry, int nBytes );
700 extern int Aig_MmStepReadMemUsage( Aig_MmStep_t * p );
701 
702 
703 
705 
706 
707 
708 #endif
709 
710 ////////////////////////////////////////////////////////////////////////
711 /// END OF FILE ///
712 ////////////////////////////////////////////////////////////////////////
713 
char * memset()
Aig_Obj_t * Aig_ObjCreateCo(Aig_Man_t *p, Aig_Obj_t *pDriver)
Definition: aigObj.c:66
Vec_Ptr_t * Aig_ManSupportsRegisters(Aig_Man_t *p)
Definition: aigPart.c:418
static int Aig_ManGetCost(Aig_Man_t *p)
Definition: aig.h:257
static int Aig_ObjIsTravIdPrevious(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition: aig.h:296
int Aig_ObjCompareIdIncrease(Aig_Obj_t **pp1, Aig_Obj_t **pp2)
Definition: aigUtil.c:496
int fCreatePios
Definition: aig.h:158
void Aig_ManDumpVerilog(Aig_Man_t *p, char *pFileName)
Definition: aigUtil.c:848
static int Aig_ObjIsMarkA(Aig_Obj_t *pObj)
Definition: aig.h:288
Aig_Man_t * Aig_ManDupExor(Aig_Man_t *p)
Definition: aigDup.c:462
char * pName
Definition: aig.h:96
int Aig_NodeDeref_rec(Aig_Obj_t *pNode, unsigned LevelMin, float *pPower, float *pProbs)
DECLARATIONS ///.
Definition: aigMffc.c:45
static void Aig_ObjSetEquiv(Aig_Man_t *p, Aig_Obj_t *pObj, Aig_Obj_t *pEqu)
Definition: aig.h:329
int CioId
Definition: aig.h:73
Aig_Man_t * Aig_ManRemap(Aig_Man_t *p, Vec_Ptr_t *vMap)
DECLARATIONS ///.
Definition: aigScl.c:46
int iNode
Definition: aig.h:184
static int Aig_ObjSetLevel(Aig_Obj_t *pObj, int i)
Definition: aig.h:325
int Aig_NodeMffcLabel(Aig_Man_t *p, Aig_Obj_t *pNode, float *pPower)
Definition: aigMffc.c:211
void Aig_ManVerifyReverseLevel(Aig_Man_t *p)
Definition: aigTiming.c:334
static int Aig_ObjLevelNew(Aig_Obj_t *pObj)
Definition: aig.h:324
Aig_Man_t * Aig_ManDupArray(Vec_Ptr_t *vArray)
Definition: aigDup.c:1255
Abc_Cex_t * pSeqModel
Definition: aig.h:154
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Definition: vecPtr.h:42
Aig_Man_t * Aig_ManRegCreatePart(Aig_Man_t *pAig, Vec_Int_t *vPart, int *pnCountPis, int *pnCountRegs, int **ppMapBack)
Definition: aigPartReg.c:308
Vec_Ptr_t * Aig_ManRegPartitionSmart(Aig_Man_t *pAig, int nPartSize)
Definition: aigPartReg.c:413
void Aig_ManShow(Aig_Man_t *pMan, int fHaig, Vec_Ptr_t *vBold)
Definition: aigShow.c:340
Aig_Type_t
Definition: aig.h:57
ABC_DLL int Aig_ManCheck(Aig_Man_t *p)
FUNCTION DECLARATIONS ///.
Definition: aigCheck.c:45
static int Aig_ObjPhase(Aig_Obj_t *pObj)
Definition: aig.h:298
static Aig_Obj_t * Aig_ObjRepr(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition: aig.h:330
int Aig_ObjCollectSuper(Aig_Obj_t *pObj, Vec_Ptr_t *vSuper)
Definition: aigDfs.c:1097
unsigned Level
Definition: aig.h:82
Aig_Obj_t ** pReprs
Definition: aig.h:133
static Aig_Type_t Aig_ObjType(Aig_Obj_t *pObj)
Definition: aig.h:272
static int Aig_ObjFanoutNext(Aig_Man_t *p, int iFan)
Definition: aig.h:425
static int Aig_ObjFaninId0(Aig_Obj_t *pObj)
Definition: aig.h:304
void Aig_ObjOrderRemove(Aig_Man_t *p, int ObjId)
Definition: aigOrder.c:130
char * Aig_FileNameGenericAppend(char *pBase, char *pSuffix)
Definition: aigUtil.c:1070
static int Aig_ObjFanoutC(Aig_Obj_t *pObj, Aig_Obj_t *pFanout)
Definition: aig.h:338
static int Aig_ManConstrNum(Aig_Man_t *p)
Definition: aig.h:261
static Aig_Obj_t * Aig_ManFetchMemory(Aig_Man_t *p)
Definition: aig.h:368
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.
Definition: vecVec.h:42
int nTravIds
Definition: aig.h:141
unsigned * puTemp[4]
Definition: aig.h:206
int Aig_ManVerifyTopoOrder(Aig_Man_t *p)
DECLARATIONS ///.
Definition: aigDfs.c:46
Vec_Ptr_t * Aig_ManPartitionSmart(Aig_Man_t *p, int nPartSizeLimit, int fVerbose, Vec_Ptr_t **pvPartSupps)
Definition: aigPart.c:686
int Aig_ManCoCleanup(Aig_Man_t *p)
Definition: aigMan.c:345
static Aig_Cut_t * Aig_CutNext(Aig_Cut_t *pCut)
Definition: aig.h:215
unsigned * pOrderData
Definition: aig.h:125
void Aig_ManCheckMarkA(Aig_Man_t *p)
Definition: aigCheck.c:132
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
Definition: aig.h:50
void Aig_MmFlexRestart(Aig_MmFlex_t *p)
Definition: aigMem.c:411
int fTruth
Definition: aig.h:200
static Aig_Obj_t * Aig_ObjChild0(Aig_Obj_t *pObj)
Definition: aig.h:310
static Llb_Mgr_t * p
Definition: llb3Image.c:950
Vec_Ptr_t * vObjs
Definition: aig.h:101
static void Aig_ObjDeref(Aig_Obj_t *pObj)
Definition: aig.h:302
void Aig_ManCheckPhase(Aig_Man_t *p)
Definition: aigCheck.c:151
int nRegs
Definition: aig.h:105
Aig_Obj_t * Aig_TableLookup(Aig_Man_t *p, Aig_Obj_t *pGhost)
Definition: aigTable.c:116
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition: bblif.c:37
void Aig_ManPartDivide(Vec_Ptr_t *vResult, Vec_Int_t *vDomain, int nPartSize, int nOverSize)
Definition: aigPartReg.c:513
Aig_Man_t * Aig_ManCreateMiter(Aig_Man_t *p1, Aig_Man_t *p2, int fImpl)
Definition: aigDup.c:1049
void Aig_ManStop(Aig_Man_t *p)
Definition: aigMan.c:187
int nLeafMax
Definition: aig.h:199
int Aig_ManSeqCleanupBasic(Aig_Man_t *p)
Definition: aigScl.c:257
Definition: aig.h:61
int Aig_ManSeqCleanup(Aig_Man_t *p)
Definition: aigScl.c:158
static int Aig_ObjIsTravIdCurrent(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition: aig.h:295
Aig_Obj_t * pFanin1
Definition: aig.h:76
Aig_Obj_t * Aig_ObjReal_rec(Aig_Obj_t *pObj)
Definition: aigUtil.c:476
static int Aig_ManObjNum(Aig_Man_t *p)
Definition: aig.h:258
unsigned int Type
Definition: aig.h:77
void Aig_ManVerifyLevel(Aig_Man_t *p)
Definition: aigTiming.c:307
char * Aig_TimeStamp()
Definition: aigUtil.c:62
void Aig_ManReprStop(Aig_Man_t *p)
Definition: aigRepr.c:65
Aig_Obj_t Ghost
Definition: aig.h:104
Vec_Int_t * vFlopNums
Definition: aig.h:152
unsigned int fMarkB
Definition: aig.h:80
void * pData
Definition: aig.h:87
Aig_Obj_t * Aig_Exor(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
Definition: aigOper.c:220
void Aig_MmFixedStop(Aig_MmFixed_t *p, int fVerbose)
Definition: aigMem.c:132
Aig_Man_t * Aig_ManDupOrdered(Aig_Man_t *p)
Definition: aigDup.c:277
int nAndPrev
Definition: aig.h:130
static Aig_Obj_t * Aig_ObjFanin0(Aig_Obj_t *pObj)
Definition: aig.h:308
int nTruePis
Definition: aig.h:106
Vec_Ptr_t * Aig_ManDfsChoices(Aig_Man_t *p)
Definition: aigDfs.c:391
static int Abc_Var2Lit(int Var, int fCompl)
Definition: abc_global.h:263
Aig_Man_t * Aig_ManStart(int nNodesMax)
DECLARATIONS ///.
Definition: aigMan.c:47
Aig_Man_t * Aig_ManDupDfs(Aig_Man_t *p)
Definition: aigDup.c:563
char * Aig_MmFlexEntryFetch(Aig_MmFlex_t *p, int nBytes)
Definition: aigMem.c:366
static Aig_Obj_t * Aig_ManGhost(Aig_Man_t *p)
Definition: aig.h:265
Aig_MmFixed_t * pMemCuts
Definition: aig.h:205
void Aig_ManPrintStats(Aig_Man_t *p)
Definition: aigMan.c:379
Vec_Ptr_t * Aig_ManRegProjectOnehots(Aig_Man_t *pAig, Aig_Man_t *pPart, Vec_Ptr_t *vOnehots, int fVerbose)
Definition: aigPartReg.c:248
static Aig_Obj_t * Aig_ManLi(Aig_Man_t *p, int i)
Definition: aig.h:269
short nCutSize
Definition: aig.h:185
Vec_Ptr_t * Aig_ManMuxesCollect(Aig_Man_t *pAig)
Definition: aigUtil.c:1460
void Aig_ManCleanMarkB(Aig_Man_t *p)
Definition: aigUtil.c:167
static int Aig_IsComplement(Aig_Obj_t *p)
Definition: aig.h:249
Vec_Ptr_t * Aig_ManSupports(Aig_Man_t *p)
Definition: aigPart.c:273
int * pFastSim
Definition: aig.h:149
int Cost
Definition: aig.h:182
Aig_Man_t * Aig_ManRetimeFrontier(Aig_Man_t *p, int nStepsMax)
Definition: aigRetF.c:125
void * pImpData
Definition: aig.h:146
static Aig_Obj_t * Aig_Regular(Aig_Obj_t *p)
Definition: aig.h:246
Vec_Ptr_t * unfold2_type_II
Definition: aig.h:170
Aig_Obj_t * Aig_ObjCreateCi(Aig_Man_t *p)
DECLARATIONS ///.
Definition: aigObj.c:45
void Aig_ManStartMemory(Aig_Man_t *p)
static unsigned * Aig_CutTruth(Aig_Cut_t *pCut)
Definition: aig.h:214
int nComplEdges
Definition: aig.h:163
Aig_MmStep_t * Aig_MmStepStart(int nSteps)
Definition: aigMem.c:468
static void Vec_PtrPush(Vec_Ptr_t *p, void *Entry)
Definition: vecPtr.h:606
Aig_Obj_t * Aig_Maj(Aig_Man_t *p, Aig_Obj_t *pA, Aig_Obj_t *pB, Aig_Obj_t *pC)
Definition: aigOper.c:376
unsigned int fMarkA
Definition: aig.h:79
static Aig_Obj_t * Aig_ManConst0(Aig_Man_t *p)
Definition: aig.h:263
void Aig_SupportNodes(Aig_Man_t *p, Aig_Obj_t **ppObjs, int nObjs, Vec_Ptr_t *vSupp)
Definition: aigDfs.c:854
static void Aig_ObjRef(Aig_Obj_t *pObj)
Definition: aig.h:301
static Aig_Obj_t * Aig_ManObj(Aig_Man_t *p, int i)
Definition: aig.h:270
int Aig_ObjRequiredLevel(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition: aigTiming.c:100
word Aig_ManRandom64(int fReset)
Definition: aigUtil.c:1182
static void Aig_ObjClean(Aig_Obj_t *pObj)
Definition: aig.h:326
unsigned Aig_ManRandom(int fReset)
Definition: aigUtil.c:1157
void Aig_ManStopP(Aig_Man_t **p)
Definition: aigMan.c:246
static Aig_Obj_t * Aig_Not(Aig_Obj_t *p)
Definition: aig.h:247
void Aig_MmFixedEntryRecycle(Aig_MmFixed_t *p, char *pEntry)
Definition: aigMem.c:212
Aig_Man_t * Aig_ManRehash(Aig_Man_t *p)
Definition: aigRepr.c:454
Aig_Man_t * Aig_ManChoiceConstructive(Vec_Ptr_t *vAigs, int fVerbose)
Definition: aigPart.c:1564
Vec_Ptr_t * Aig_ManPartitionNaive(Aig_Man_t *p, int nPartSize)
Definition: aigPart.c:941
Vec_Ptr_t * vSeqModelVec
Definition: aig.h:155
static int Aig_ObjFaninId1(Aig_Obj_t *pObj)
Definition: aig.h:305
static int Abc_MaxInt(int a, int b)
Definition: abc_global.h:238
void Aig_ManUpdateReverseLevel(Aig_Man_t *p, Aig_Obj_t *pObjNew)
Definition: aigTiming.c:247
static Aig_Obj_t * Aig_ObjFanin1(Aig_Obj_t *pObj)
Definition: aig.h:309
static int Vec_PtrSize(Vec_Ptr_t *p)
Definition: vecPtr.h:295
Aig_MmFixed_t * Aig_MmFixedStart(int nEntrySize, int nEntriesMax)
FUNCTION DEFINITIONS ///.
Definition: aigMem.c:96
int fCatchExor
Definition: aig.h:142
Aig_Obj_t * Aig_Transfer(Aig_Man_t *pSour, Aig_Man_t *pDest, Aig_Obj_t *pObj, int nVars)
Definition: aigDfs.c:904
Vec_Ptr_t * vMapped
Definition: aig.h:151
Aig_Obj_t * Aig_Oper(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1, Aig_Type_t Type)
Definition: aigOper.c:83
int nOrderAlloc
Definition: aig.h:126
static void Aig_ObjSetTravIdCurrent(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition: aig.h:293
void Aig_ObjDelete(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition: aigObj.c:209
static void Aig_ObjSetMarkA(Aig_Obj_t *pObj)
Definition: aig.h:289
static int Aig_ManNodeNum(Aig_Man_t *p)
Definition: aig.h:256
void Aig_TableDelete(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition: aigTable.c:196
void Aig_ObjOrderAdvance(Aig_Man_t *p)
Definition: aigOrder.c:162
int fVerbose
Definition: aig.h:201
Vec_Ptr_t * Aig_ManDfsAll(Aig_Man_t *p)
Definition: aigDfs.c:214
int TravId
Definition: aig.h:84
void Aig_ObjCleanData_rec(Aig_Obj_t *pObj)
Definition: aigUtil.c:243
#define ABC_DLL
Definition: abc_global.h:53
void Aig_ManRandomInfo(Vec_Ptr_t *vInfo, int iInputStart, int iWordStart, int iWordStop)
Definition: aigUtil.c:1200
abctime Time2Quit
Definition: aig.h:164
DECLARATIONS ///.
Definition: aigMem.c:30
int Aig_SupportSize(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition: aigDfs.c:758
static unsigned Aig_ObjCutSign(unsigned ObjId)
MACRO DEFINITIONS ///.
Definition: aig.h:228
Aig_Obj_t * Aig_And(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
Definition: aigOper.c:104
void Aig_ManFanoutStart(Aig_Man_t *p)
FUNCTION DEFINITIONS ///.
Definition: aigFanout.c:56
Aig_Obj_t * Aig_ObjCreate(Aig_Man_t *p, Aig_Obj_t *pGhost)
Definition: aigObj.c:89
Aig_Man_t * Aig_ManFrames(Aig_Man_t *pAig, int nFs, int fInit, int fOuts, int fRegs, int fEnlarge, Aig_Obj_t ***ppObjMap)
FUNCTION DEFINITIONS ///.
Definition: aigFrames.c:51
int Aig_ManChoiceLevel(Aig_Man_t *p)
Definition: aigDfs.c:581
void Aig_ObjPrint(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition: aigObj.c:316
void Aig_ManStartReverseLevels(Aig_Man_t *p, int nMaxLevelIncrease)
Definition: aigTiming.c:142
int nBufReplaces
Definition: aig.h:121
unsigned * Aig_ManCutTruth(Aig_Obj_t *pRoot, Vec_Ptr_t *vLeaves, Vec_Ptr_t *vNodes, Vec_Ptr_t *vTruthElem, Vec_Ptr_t *vTruthStore)
Definition: aigTruth.c:80
static void Aig_ObjSetCuts(Aig_ManCut_t *p, Aig_Obj_t *pObj, Aig_Cut_t *pCuts)
Definition: aig.h:210
void Aig_ManSetPhase(Aig_Man_t *pAig)
Definition: aigUtil.c:1431
void Aig_ManFanoutStop(Aig_Man_t *p)
Definition: aigFanout.c:89
char nLeafMax
Definition: aig.h:186
void Aig_ManCutStop(Aig_ManCut_t *p)
Definition: aigCuts.c:86
Aig_Obj_t * Aig_Miter(Aig_Man_t *p, Vec_Ptr_t *vPairs)
Definition: aigOper.c:431
static void Aig_ObjClearMarkA(Aig_Obj_t *pObj)
Definition: aig.h:290
void Aig_MmStepEntryRecycle(Aig_MmStep_t *p, char *pEntry, int nBytes)
Definition: aigMem.c:563
Aig_Man_t * Aig_ManDupRepresDfs(Aig_Man_t *p)
Definition: aigDup.c:995
void Aig_ManIncrementTravId(Aig_Man_t *p)
DECLARATIONS ///.
Definition: aigUtil.c:44
int Aig_NodeMffcSupp(Aig_Man_t *p, Aig_Obj_t *pNode, int LevelMin, Vec_Ptr_t *vSupp)
Definition: aigMffc.c:179
unsigned uSign
Definition: aig.h:183
static int Aig_ManBufNum(Aig_Man_t *p)
Definition: aig.h:253
void Aig_ManMuxesRef(Aig_Man_t *pAig, Vec_Ptr_t *vMuxes)
Definition: aigUtil.c:1513
static void Aig_ObjClearRef(Aig_Obj_t *pObj)
Definition: aig.h:303
static int Aig_ObjIsNode(Aig_Obj_t *pObj)
Definition: aig.h:280
int nTruthWords
Definition: aig.h:204
static Aig_Obj_t * Aig_ObjRealCopy(Aig_Obj_t *pObj)
Definition: aig.h:320
int Aig_ManAntiCleanup(Aig_Man_t *p)
Definition: aigMan.c:293
static int Aig_ManCoNum(Aig_Man_t *p)
Definition: aig.h:252
void Aig_ObjDeletePo(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition: aigObj.c:261
void Aig_ObjConnect(Aig_Man_t *p, Aig_Obj_t *pObj, Aig_Obj_t *pFan0, Aig_Obj_t *pFan1)
Definition: aigObj.c:126
static void Aig_ObjChild1Flip(Aig_Obj_t *pObj)
Definition: aig.h:317
int iPrev
Definition: aig.h:127
static int Aig_ObjIsBuf(Aig_Obj_t *pObj)
Definition: aig.h:277
Aig_Man_t * Aig_ManDupDfsGuided(Aig_Man_t *p, Vec_Ptr_t *vPios)
Definition: aigDup.c:694
static int Abc_LitIsCompl(int Lit)
Definition: abc_global.h:265
int Aig_MmStepReadMemUsage(Aig_MmStep_t *p)
Definition: aigMem.c:586
void Aig_ManStopReverseLevels(Aig_Man_t *p)
Definition: aigTiming.c:175
static int Aig_WordCountOnes(unsigned uWord)
Definition: aig.h:229
static int Aig_ObjIsTerm(Aig_Obj_t *pObj)
Definition: aig.h:281
static Aig_Obj_t * Aig_ManLo(Aig_Man_t *p, int i)
Definition: aig.h:268
Vec_Int_t * vLevelR
Definition: aig.h:137
static void Aig_ManRecycleMemory(Aig_Man_t *p, Aig_Obj_t *pEntry)
Definition: aig.h:378
void Aig_ObjCollectCut(Aig_Obj_t *pRoot, Vec_Ptr_t *vLeaves, Vec_Ptr_t *vNodes)
Definition: aigDfs.c:1017
static int * Aig_CutLeaves(Aig_Cut_t *pCut)
Definition: aig.h:213
static void Aig_ObjSetRepr(Aig_Man_t *p, Aig_Obj_t *pObj, Aig_Obj_t *pRepr)
Definition: aig.h:331
Aig_Man_t * Aig_ManReduceLaches(Aig_Man_t *p, int fVerbose)
Definition: aigScl.c:455
void Aig_ManFlipFirstPo(Aig_Man_t *p)
Definition: aigMan.c:457
void Aig_ManReprStart(Aig_Man_t *p, int nIdMax)
DECLARATIONS ///.
Definition: aigRepr.c:45
Vec_Ptr_t * Aig_Support(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition: aigDfs.c:832
Definition: aig.h:94
Aig_Obj_t * Aig_ObjRecognizeMux(Aig_Obj_t *pObj, Aig_Obj_t **ppObjT, Aig_Obj_t **ppObjE)
Definition: aigUtil.c:387
void Aig_ObjPatchFanin0(Aig_Man_t *p, Aig_Obj_t *pObj, Aig_Obj_t *pFaninNew)
Definition: aigObj.c:282
int Aig_ManHasNoGaps(Aig_Man_t *p)
Definition: aigUtil.c:86
unsigned * pTerSimData
Definition: aig.h:150
static Aig_Obj_t * Aig_ObjFromLit(Aig_Man_t *p, int iLit)
Definition: aig.h:322
void Aig_ManSetRegNum(Aig_Man_t *p, int nRegs)
Definition: aigMan.c:438
Aig_ManCut_t * Aig_ComputeCuts(Aig_Man_t *pAig, int nCutsMax, int nLeafMax, int fTruth, int fVerbose)
Definition: aigCuts.c:631
void Aig_ManReportImprovement(Aig_Man_t *p, Aig_Man_t *pNew)
Definition: aigMan.c:415
Vec_Int_t * vFlopReprs
Definition: aig.h:153
Aig_Obj_t * Aig_IthVar(Aig_Man_t *p, int i)
FUNCTION DEFINITIONS ///.
Definition: aigOper.c:63
void * pData2
Definition: aig.h:140
Aig_Man_t * Aig_ManScl(Aig_Man_t *pAig, int fLatchConst, int fLatchEqual, int fUseMvSweep, int nFramesSymb, int nFramesSatur, int fVerbose, int fVeryVerbose)
Definition: aigScl.c:650
static Aig_Obj_t * Aig_ManCi(Aig_Man_t *p, int i)
Definition: aig.h:266
Vec_Ptr_t * vBufs
Definition: aig.h:102
Vec_Ptr_t * Aig_ManDfsNodes(Aig_Man_t *p, Aig_Obj_t **ppNodes, int nNodes)
Definition: aigDfs.c:333
Vec_Int_t * vProbs
Definition: aig.h:161
Aig_Obj_t * Aig_CreateOr(Aig_Man_t *p, int nVars)
Definition: aigOper.c:495
static int Aig_ObjIsNone(Aig_Obj_t *pObj)
Definition: aig.h:273
void Aig_ManStopMemory(Aig_Man_t *p)
void Aig_ObjReplace(Aig_Man_t *p, Aig_Obj_t *pObjOld, Aig_Obj_t *pObjNew, int fUpdateLevel)
Definition: aigObj.c:467
int Aig_TransferMappedClasses(Aig_Man_t *pAig, Aig_Man_t *pPart, int *pMapBack)
Definition: aigRepr.c:533
Aig_Man_t * Aig_ManDupSimpleWithHints(Aig_Man_t *p, Vec_Int_t *vHints)
Definition: aigDup.c:107
static int Aig_WordFindFirstBit(unsigned uWord)
Definition: aig.h:237
int fAddStrash
Definition: aig.h:143
unsigned __int64 word
DECLARATIONS ///.
Definition: kitPerm.c:36
void Aig_ManPrintVerbose(Aig_Man_t *p, int fHaig)
Definition: aigUtil.c:685
Aig_Man_t * Aig_ManConstReduce(Aig_Man_t *p, int fUseMvSweep, int nFramesSymb, int nFramesSatur, int fVerbose, int fVeryVerbose)
Definition: aigTsim.c:498
static int Aig_ManCiNum(Aig_Man_t *p)
Definition: aig.h:251
void Aig_ManMarkValidChoices(Aig_Man_t *p)
Definition: aigRepr.c:481
static int Aig_ObjWhatFanin(Aig_Obj_t *pObj, Aig_Obj_t *pFanin)
Definition: aig.h:332
Aig_Man_t * Aig_ManDupFlopsOnly(Aig_Man_t *p)
Definition: aigDup.c:871
void Aig_ObjClearReverseLevel(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition: aigTiming.c:83
Vec_Ptr_t * Aig_ManOrderPios(Aig_Man_t *p, Aig_Man_t *pOrder)
Definition: aigDup.c:626
Aig_Man_t * pAig
Definition: aig.h:195
Vec_Ptr_t * Aig_ManDfsPreorder(Aig_Man_t *p, int fNodesOnly)
Definition: aigDfs.c:271
Aig_Man_t * Aig_ManDupNodes(Aig_Man_t *pMan, Vec_Ptr_t *vArray)
Definition: aigDup.c:1302
static Aig_Obj_t * Aig_ObjChild1(Aig_Obj_t *pObj)
Definition: aig.h:311
static int Aig_ObjIsConst1(Aig_Obj_t *pObj)
Definition: aig.h:274
int Aig_ManCountMergeRegs(Aig_Man_t *p)
Definition: aigScl.c:310
static Aig_Obj_t * Aig_ObjEquiv(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition: aig.h:328
static Aig_Obj_t * Aig_ObjChild1Copy(Aig_Obj_t *pObj)
Definition: aig.h:313
Aig_Obj_t * Aig_Or(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
Definition: aigOper.c:259
int Aig_ObjRecognizeExor(Aig_Obj_t *pObj, Aig_Obj_t **ppFan0, Aig_Obj_t **ppFan1)
Definition: aigUtil.c:343
Aig_Obj_t * Aig_ManDupSimpleDfs_rec(Aig_Man_t *pNew, Aig_Man_t *p, Aig_Obj_t *pObj)
Definition: aigDup.c:157
Vec_Vec_t * Aig_ManLevelize(Aig_Man_t *p)
Definition: aigDfs.c:307
static int Aig_ObjPhaseReal(Aig_Obj_t *pObj)
Definition: aig.h:299
Vec_Ptr_t * Aig_ManDfs(Aig_Man_t *p, int fNodesOnly)
Definition: aigDfs.c:145
void Aig_ManMuxesDeref(Aig_Man_t *pAig, Vec_Ptr_t *vMuxes)
Definition: aigUtil.c:1483
char * Aig_MmFixedEntryFetch(Aig_MmFixed_t *p)
Definition: aigMem.c:161
abctime time2
Definition: aig.h:167
Definition: aig.h:69
int Aig_MmFlexReadMemUsage(Aig_MmFlex_t *p)
Definition: aigMem.c:439
Aig_Obj_t * pNext
Definition: aig.h:72
Aig_Cut_t ** pCuts
Definition: aig.h:196
int nBufMax
Definition: aig.h:123
int nConstrs
Definition: aig.h:109
char nFanins
Definition: aig.h:187
int * pFanData
Definition: aig.h:118
Vec_Vec_t * vLevels
Definition: aig.h:120
static Aig_Obj_t * Aig_ObjCreateGhost(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1, Aig_Type_t Type)
Definition: aig.h:346
void Aig_NodeUnionLists(Vec_Ptr_t *vArr1, Vec_Ptr_t *vArr2, Vec_Ptr_t *vArr)
Definition: aigUtil.c:1220
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
Definition: abc_global.h:105
int nTableSize
Definition: aig.h:116
static Aig_Obj_t * Aig_ObjChild0Copy(Aig_Obj_t *pObj)
Definition: aig.h:312
Aig_Obj_t ** pTable
Definition: aig.h:115
Aig_Obj_t * Aig_MiterTwo(Aig_Man_t *p, Vec_Ptr_t *vNodes1, Vec_Ptr_t *vNodes2)
Definition: aigOper.c:453
void Aig_ManSetCioIds(Aig_Man_t *p)
Definition: aigUtil.c:965
void Aig_ManDumpBlif(Aig_Man_t *p, char *pFileName, Vec_Ptr_t *vPiNames, Vec_Ptr_t *vPoNames)
Definition: aigUtil.c:733
Aig_Obj_t * Aig_TableLookupTwo(Aig_Man_t *p, Aig_Obj_t *pFanin0, Aig_Obj_t *pFanin1)
Definition: aigTable.c:146
abctime time1
Definition: aig.h:166
Vec_Ptr_t * Aig_ManPartitionSmartRegisters(Aig_Man_t *pAig, int nSuppSizeLimit, int fVerbose)
Definition: aigPart.c:811
static void Aig_ObjChild0Flip(Aig_Obj_t *pObj)
Definition: aig.h:316
Aig_Man_t * Aig_ManDupSimpleDfs(Aig_Man_t *p)
Definition: aigDup.c:184
Aig_Man_t * Aig_ManStartFrom(Aig_Man_t *p)
Definition: aigMan.c:92
Aig_Obj_t * Aig_Multi(Aig_Man_t *p, Aig_Obj_t **pArgs, int nArgs, Aig_Type_t Type)
Definition: aigOper.c:413
Aig_Man_t * Aig_ManDupCof(Aig_Man_t *p, int iInput, int Value)
Definition: aigDup.c:345
void Aig_ManInvertConstraints(Aig_Man_t *pAig)
Definition: aigUtil.c:1543
int Aig_TableCountEntries(Aig_Man_t *p)
Definition: aigTable.c:218
#define ABC_NAMESPACE_HEADER_END
Definition: abc_global.h:106
Aig_Man_t * Aig_ManDupRepr(Aig_Man_t *p, int fOrdered)
Definition: aigRepr.c:267
float dData
Definition: aig.h:89
static int Aig_ObjFaninC0(Aig_Obj_t *pObj)
Definition: aig.h:306
void Aig_ManDump(Aig_Man_t *p)
Definition: aigUtil.c:712
void Aig_ObjRemoveFanout(Aig_Man_t *p, Aig_Obj_t *pObj, Aig_Obj_t *pFanout)
Definition: aigFanout.c:154
static int Aig_ManObjNumMax(Aig_Man_t *p)
Definition: aig.h:259
Vec_Ptr_t * Aig_ManDfsReverse(Aig_Man_t *p)
Definition: aigDfs.c:458
static void Aig_ObjSetTravIdPrevious(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition: aig.h:294
Vec_Ptr_t * Aig_ManSupportsInverse(Aig_Man_t *p)
Definition: aigPart.c:385
static Aig_Obj_t * Aig_ManConst1(Aig_Man_t *p)
Definition: aig.h:264
int pFanins[0]
Definition: aig.h:188
int Aig_ManChoiceNum(Aig_Man_t *p)
Definition: aigUtil.c:1007
static Aig_Obj_t * Aig_ObjChild1Next(Aig_Obj_t *pObj)
Definition: aig.h:315
static void Aig_ObjSetCopy(Aig_Obj_t *pObj, Aig_Obj_t *pCopy)
Definition: aig.h:319
int Aig_NodeRef_rec(Aig_Obj_t *pNode, unsigned LevelMin)
Definition: aigMffc.c:86
void Aig_ObjPrintEqn(FILE *pFile, Aig_Obj_t *pObj, Vec_Vec_t *vLevels, int Level)
Definition: aigUtil.c:519
static int Aig_ObjIsExor(Aig_Obj_t *pObj)
Definition: aig.h:279
static void * Vec_PtrEntry(Vec_Ptr_t *p, int i)
Definition: vecPtr.h:362
static Aig_Obj_t * Aig_ManCo(Aig_Man_t *p, int i)
Definition: aig.h:267
Aig_Man_t * Aig_ManDupUnsolvedOutputs(Aig_Man_t *p, int fAddRegs)
Definition: aigDup.c:1199
void Aig_MmStepStop(Aig_MmStep_t *p, int fVerbose)
Definition: aigMem.c:507
int Aig_DagSize(Aig_Obj_t *pObj)
Definition: aigDfs.c:712
int Aig_ManLevelNum(Aig_Man_t *p)
Definition: aigDfs.c:486
int nLevelMax
Definition: aig.h:138
int iData
Definition: aig.h:88
static Aig_Obj_t * Aig_ObjCopy(Aig_Obj_t *pObj)
Definition: aig.h:318
void Aig_ObjDelete_rec(Aig_Man_t *p, Aig_Obj_t *pObj, int fFreeTop)
Definition: aigObj.c:232
static int Aig_ObjToLit(Aig_Obj_t *pObj)
Definition: aig.h:321
Aig_Man_t * pManExdc
Definition: aig.h:156
int nAsserts
Definition: aig.h:108
int nBufFixes
Definition: aig.h:122
static int Aig_ManRegNum(Aig_Man_t *p)
Definition: aig.h:260
Vec_Ptr_t * vOnehots
Definition: aig.h:157
Aig_Man_t * Aig_ManDupTrim(Aig_Man_t *p)
Definition: aigDup.c:413
void Aig_NodeIntersectLists(Vec_Ptr_t *vArr1, Vec_Ptr_t *vArr2, Vec_Ptr_t *vArr)
Definition: aigUtil.c:1259
int nTruePos
Definition: aig.h:107
Aig_Obj_t ** pEquivs
Definition: aig.h:132
static int Aig_ObjFanout0Int(Aig_Man_t *p, int ObjId)
Definition: aig.h:424
int nReprsAlloc
Definition: aig.h:134
Aig_Man_t * Aig_ManChoicePartitioned(Vec_Ptr_t *vAigs, int nPartSize, int nConfMax, int nLevelMax, int fVerbose)
Definition: aigPart.c:1247
Aig_Obj_t * Aig_Mux(Aig_Man_t *p, Aig_Obj_t *pC, Aig_Obj_t *p1, Aig_Obj_t *p0)
Definition: aigOper.c:317
unsigned int fPhase
Definition: aig.h:78
void Aig_ObjCollectMulti(Aig_Obj_t *pFunc, Vec_Ptr_t *vSuper)
Definition: aigUtil.c:289
int Aig_MmFixedReadMaxEntriesUsed(Aig_MmFixed_t *p)
Definition: aigMem.c:287
char * Aig_MmStepEntryFetch(Aig_MmStep_t *p, int nBytes)
Definition: aigMem.c:534
static Aig_Obj_t * Aig_ObjFanout0(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition: aig.h:327
Aig_MmFixed_t * pMemObjs
Definition: aig.h:136
Aig_Man_t * Aig_ManDupOneOutput(Aig_Man_t *p, int iPoNum, int fAddRegs)
Definition: aigDup.c:1152
void * pManTime
Definition: aig.h:147
void Aig_ManCleanMarkAB(Aig_Man_t *p)
Definition: aigUtil.c:186
int Aig_MmFixedReadMemUsage(Aig_MmFixed_t *p)
Definition: aigMem.c:271
Aig_MmFlex_t * Aig_MmFlexStart()
Definition: aigMem.c:305
int Aig_ObjCheckTfi(Aig_Man_t *p, Aig_Obj_t *pNew, Aig_Obj_t *pOld)
Definition: aigRepr.c:435
int Aig_ManCiCleanup(Aig_Man_t *p)
Definition: aigMan.c:314
Aig_Man_t * Aig_ManDupRepres(Aig_Man_t *p)
Definition: aigDup.c:920
void Aig_MmFlexStop(Aig_MmFlex_t *p, int fVerbose)
Definition: aigMem.c:337
static int Aig_CutLeaveNum(Aig_Cut_t *pCut)
Definition: aig.h:212
int nCutSize
Definition: aig.h:203
void Aig_ConeUnmark_rec(Aig_Obj_t *pObj)
Definition: aigDfs.c:690
void Aig_ManComputeSccs(Aig_Man_t *p)
Definition: aigScl.c:489
int Aig_ObjIsMuxType(Aig_Obj_t *pObj)
Definition: aigUtil.c:307
static int Aig_ObjIsCand(Aig_Obj_t *pObj)
Definition: aig.h:284
Aig_Man_t * Aig_ManFraigPartitioned(Aig_Man_t *pAig, int nPartSize, int nConfMax, int nLevelMax, int fVerbose)
Definition: aigPart.c:1379
void Aig_ManTransferRepr(Aig_Man_t *pNew, Aig_Man_t *p)
Definition: aigRepr.c:211
void Aig_ManCleanMarkA(Aig_Man_t *p)
Definition: aigUtil.c:148
Vec_Ptr_t * vCos
Definition: aig.h:100
static int Abc_Lit2Var(int Lit)
Definition: abc_global.h:264
int nObjs[AIG_OBJ_VOID]
Definition: aig.h:112
void Aig_MmFixedRestart(Aig_MmFixed_t *p)
Definition: aigMem.c:232
int nCutsMax
Definition: aig.h:198
int Aig_NodeMffcExtendCut(Aig_Man_t *p, Aig_Obj_t *pNode, Vec_Ptr_t *vLeaves, Vec_Ptr_t *vResult)
Definition: aigMffc.c:265
void Aig_TableInsert(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition: aigTable.c:173
static int Aig_ObjFaninC1(Aig_Obj_t *pObj)
Definition: aig.h:307
static int Aig_ObjLevel(Aig_Obj_t *pObj)
Definition: aig.h:323
Vec_Ptr_t * vCis
Definition: aig.h:99
static int Aig_ManAndNum(Aig_Man_t *p)
Definition: aig.h:254
void Aig_ManCleanCioIds(Aig_Man_t *p)
Definition: aigUtil.c:986
char * pSpec
Definition: aig.h:97
Aig_Obj_t * Aig_CreateExor(Aig_Man_t *p, int nVars)
Definition: aigOper.c:516
int nBarBufs
Definition: aig.h:110
int nFansAlloc
Definition: aig.h:119
void Aig_ObjPrintVerilog(FILE *pFile, Aig_Obj_t *pObj, Vec_Vec_t *vLevels, int Level)
Definition: aigUtil.c:566
static int Aig_ObjId(Aig_Obj_t *pObj)
Definition: aig.h:286
void Aig_ObjCreateRepr(Aig_Man_t *p, Aig_Obj_t *pNode1, Aig_Obj_t *pNode2)
Definition: aigRepr.c:83
Aig_Man_t * Aig_ManExtractMiter(Aig_Man_t *p, Aig_Obj_t *pNode1, Aig_Obj_t *pNode2)
Definition: aigMan.c:147
Definition: aig.h:60
#define assert(ex)
Definition: util_old.h:213
int nAndTotal
Definition: aig.h:129
Vec_Int_t * vCiNumsOrig
Definition: aig.h:162
int nDeleted
Definition: aig.h:113
int Aig_ManCountReprs(Aig_Man_t *p)
Definition: aigRepr.c:378
static Aig_Cut_t * Aig_ObjCuts(Aig_ManCut_t *p, Aig_Obj_t *pObj)
Definition: aig.h:209
typedefABC_NAMESPACE_HEADER_START struct Abc_Cex_t_ Abc_Cex_t
INCLUDES ///.
Definition: utilCex.h:39
static int Aig_ManExorNum(Aig_Man_t *p)
Definition: aig.h:255
int Aig_NodeMffcLabelCut(Aig_Man_t *p, Aig_Obj_t *pNode, Vec_Ptr_t *vLeaves)
Definition: aigMffc.c:236
void Aig_ManCleanNext(Aig_Man_t *p)
Definition: aigUtil.c:224
int iNext
Definition: aig.h:128
void Aig_ObjDisconnect(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition: aigObj.c:171
void Aig_ManFindCut(Aig_Obj_t *pRoot, Vec_Ptr_t *vFront, Vec_Ptr_t *vVisited, int nSizeLimit, int nFanoutLimit)
Definition: aigWin.c:145
Aig_Obj_t * Aig_Compose(Aig_Man_t *p, Aig_Obj_t *pRoot, Aig_Obj_t *pFunc, int iVar)
Definition: aigDfs.c:966
Aig_Obj_t * pConst1
Definition: aig.h:103
static int Aig_ObjRefs(Aig_Obj_t *pObj)
Definition: aig.h:300
void Aig_ObjAddFanout(Aig_Man_t *p, Aig_Obj_t *pObj, Aig_Obj_t *pFanout)
Definition: aigFanout.c:107
Vec_Ptr_t * Aig_ManMiterPartitioned(Aig_Man_t *p1, Aig_Man_t *p2, int nPartSize, int fSmart)
Definition: aigPart.c:1189
Vec_Ptr_t * unfold2_type_I
Definition: aig.h:169
void * pManCuts
Definition: aig.h:148
Vec_Vec_t * vClockDoms
Definition: aig.h:160
Aig_Obj_t ** pObjCopies
Definition: aig.h:144
void(* pImpFunc)(void *, void *)
Definition: aig.h:145
void Aig_ManUpdateLevel(Aig_Man_t *p, Aig_Obj_t *pObjNew)
Definition: aigTiming.c:195
static Aig_Obj_t * Aig_NotCond(Aig_Obj_t *p, int c)
Definition: aig.h:248
void Aig_ManOrderStop(Aig_Man_t *p)
Definition: aigOrder.c:76
static int Aig_ObjIsCi(Aig_Obj_t *pObj)
Definition: aig.h:275
ABC_INT64_T abctime
Definition: abc_global.h:278
void Aig_TableProfile(Aig_Man_t *p)
Definition: aigTable.c:239
Aig_Man_t * Aig_ManDupWithoutPos(Aig_Man_t *p)
Definition: aigDup.c:835
void Aig_ObjPrintVerbose(Aig_Obj_t *pObj, int fHaig)
Definition: aigUtil.c:653
int Aig_ManLevels(Aig_Man_t *p)
Definition: aigUtil.c:102
void Aig_ManOrderStart(Aig_Man_t *p)
DECLARATIONS ///.
Definition: aigOrder.c:45
Aig_Obj_t * pFanin0
Definition: aig.h:75
void Aig_ManCleanData(Aig_Man_t *p)
Definition: aigUtil.c:205
void Aig_ObjOrderInsert(Aig_Man_t *p, int ObjId)
Definition: aigOrder.c:95
int Id
Definition: aig.h:85
Aig_Man_t * Aig_ManDupLevelized(Aig_Man_t *p)
Definition: aigDup.c:763
Aig_Cut_t * pNext
Definition: aig.h:181
void Aig_ManResetRefs(Aig_Man_t *p)
Definition: aigUtil.c:122
int Aig_ManCleanup(Aig_Man_t *p)
Definition: aigMan.c:265
static int Aig_ObjIsCo(Aig_Obj_t *pObj)
Definition: aig.h:276
Aig_Man_t * Aig_ManDupOrpos(Aig_Man_t *p, int fAddRegs)
Definition: aigDup.c:1099
void Aig_TableClear(Aig_Man_t *p)
Definition: aigTable.c:265
unsigned int nRefs
Definition: aig.h:81
Aig_Man_t * Aig_ManDupSimple(Aig_Man_t *p)
DECLARATIONS ///.
Definition: aigDup.c:46
unsigned nCuts
Definition: aig.h:83
static int Aig_ObjIsChoice(Aig_Man_t *p, Aig_Obj_t *pObj)
Definition: aig.h:283
Aig_Man_t * Aig_ManDupSimpleDfsPart(Aig_Man_t *p, Vec_Ptr_t *vPis, Vec_Ptr_t *vCos)
Definition: aigDup.c:240
Vec_Ptr_t * Aig_ManRegPartitionSimple(Aig_Man_t *pAig, int nPartSize, int nOverSize)
Definition: aigPartReg.c:474
void * Aig_ManReleaseData(Aig_Man_t *p)
Definition: aigMan.c:473
Aig_Man_t * Rtm_ManRetime(Aig_Man_t *p, int fForward, int nStepsMax, int fVerbose)
Definition: aigRet.c:834
Aig_Man_t * Aig_ManDupReprBasic(Aig_Man_t *p)
Definition: aigRepr.c:323
void * pData
Definition: aig.h:139
Vec_Int_t * vEquPairs
Definition: aig.h:159
static int Aig_ObjIsAnd(Aig_Obj_t *pObj)
Definition: aig.h:278
static Aig_Obj_t * Aig_ObjChild0Next(Aig_Obj_t *pObj)
Definition: aig.h:314
static int Aig_ObjCioId(Aig_Obj_t *pObj)
Definition: aig.h:285
Aig_Obj_t * Aig_CreateAnd(Aig_Man_t *p, int nVars)
Definition: aigOper.c:474
static int Aig_ObjIsHash(Aig_Obj_t *pObj)
Definition: aig.h:282
static void Aig_ObjSetTravId(Aig_Obj_t *pObj, int TravId)
Definition: aig.h:292