ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
ivyFanout.c File Reference
#include "ivy.h"
Include dependency graph for ivyFanout.c:

Go to the source code of this file.

Macros

#define Ivy_ObjForEachFanoutInt(pObj, pFanout)
 
#define Ivy_ObjForEachFanoutIntSafe(pObj, pFanout, pFanout2)
 

Functions

void Ivy_ManStartFanout (Ivy_Man_t *p)
 FUNCTION DEFINITIONS ///.
 
void Ivy_ManStopFanout (Ivy_Man_t *p)
 
void Ivy_ObjAddFanout (Ivy_Man_t *p, Ivy_Obj_t *pFanin, Ivy_Obj_t *pFanout)
 
void Ivy_ObjDeleteFanout (Ivy_Man_t *p, Ivy_Obj_t *pFanin, Ivy_Obj_t *pFanout)
 
void Ivy_ObjPatchFanout (Ivy_Man_t *p, Ivy_Obj_t *pFanin, Ivy_Obj_t *pFanoutOld, Ivy_Obj_t *pFanoutNew)
 
void Ivy_ObjCollectFanouts (Ivy_Man_t *p, Ivy_Obj_t *pObj, Vec_Ptr_t *vArray)
 
Ivy_Obj_tIvy_ObjReadFirstFanout (Ivy_Man_t *p, Ivy_Obj_t *pObj)
 
int Ivy_ObjFanoutNum (Ivy_Man_t *p, Ivy_Obj_t *pObj)
 

Macro Definition Documentation

◆ Ivy_ObjForEachFanoutInt

#define Ivy_ObjForEachFanoutInt ( pObj,
pFanout )
Value:
for ( pFanout = (pObj)->pFanout; pFanout; \
pFanout = Ivy_ObjNextFanout(pObj, pFanout) )

Definition at line 109 of file ivyFanout.c.

109#define Ivy_ObjForEachFanoutInt( pObj, pFanout ) \
110 for ( pFanout = (pObj)->pFanout; pFanout; \
111 pFanout = Ivy_ObjNextFanout(pObj, pFanout) )

◆ Ivy_ObjForEachFanoutIntSafe

#define Ivy_ObjForEachFanoutIntSafe ( pObj,
pFanout,
pFanout2 )
Value:
for ( pFanout = (pObj)->pFanout, \
pFanout2 = Ivy_ObjNextFanout(pObj, pFanout); \
pFanout; \
pFanout = pFanout2, \
pFanout2 = Ivy_ObjNextFanout(pObj, pFanout) )

Definition at line 114 of file ivyFanout.c.

114#define Ivy_ObjForEachFanoutIntSafe( pObj, pFanout, pFanout2 ) \
115 for ( pFanout = (pObj)->pFanout, \
116 pFanout2 = Ivy_ObjNextFanout(pObj, pFanout); \
117 pFanout; \
118 pFanout = pFanout2, \
119 pFanout2 = Ivy_ObjNextFanout(pObj, pFanout) )

Function Documentation

◆ Ivy_ManStartFanout()

void Ivy_ManStartFanout ( Ivy_Man_t * p)

FUNCTION DEFINITIONS ///.

Function*************************************************************

Synopsis [Starts the fanout representation.]

Description []

SideEffects []

SeeAlso []

Definition at line 136 of file ivyFanout.c.

137{
138 Ivy_Obj_t * pObj;
139 int i;
140 assert( !p->fFanout );
141 p->fFanout = 1;
142 Ivy_ManForEachObj( p, pObj, i )
143 {
144 if ( Ivy_ObjFanin0(pObj) )
145 Ivy_ObjAddFanout( p, Ivy_ObjFanin0(pObj), pObj );
146 if ( Ivy_ObjFanin1(pObj) )
147 Ivy_ObjAddFanout( p, Ivy_ObjFanin1(pObj), pObj );
148 }
149}
Cube * p
Definition exorList.c:222
void Ivy_ObjAddFanout(Ivy_Man_t *p, Ivy_Obj_t *pFanin, Ivy_Obj_t *pFanout)
Definition ivyFanout.c:183
#define Ivy_ManForEachObj(p, pObj, i)
Definition ivy.h:393
struct Ivy_Obj_t_ Ivy_Obj_t
Definition ivy.h:47
#define assert(ex)
Definition util_old.h:213
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Ivy_ManStopFanout()

void Ivy_ManStopFanout ( Ivy_Man_t * p)

Function*************************************************************

Synopsis [Stops the fanout representation.]

Description []

SideEffects []

SeeAlso []

Definition at line 162 of file ivyFanout.c.

163{
164 Ivy_Obj_t * pObj;
165 int i;
166 assert( p->fFanout );
167 p->fFanout = 0;
168 Ivy_ManForEachObj( p, pObj, i )
169 pObj->pFanout = pObj->pNextFan0 = pObj->pNextFan1 = pObj->pPrevFan0 = pObj->pPrevFan1 = NULL;
170}
Ivy_Obj_t * pPrevFan0
Definition ivy.h:91
Ivy_Obj_t * pFanout
Definition ivy.h:88
Ivy_Obj_t * pPrevFan1
Definition ivy.h:92
Ivy_Obj_t * pNextFan1
Definition ivy.h:90
Ivy_Obj_t * pNextFan0
Definition ivy.h:89

◆ Ivy_ObjAddFanout()

void Ivy_ObjAddFanout ( Ivy_Man_t * p,
Ivy_Obj_t * pFanin,
Ivy_Obj_t * pFanout )

Function*************************************************************

Synopsis [Add the fanout.]

Description []

SideEffects []

SeeAlso []

Definition at line 183 of file ivyFanout.c.

184{
185 assert( p->fFanout );
186 if ( pFanin->pFanout )
187 {
188 *Ivy_ObjNextFanoutPlace(pFanin, pFanout) = pFanin->pFanout;
189 *Ivy_ObjPrevFanoutPlace(pFanin, pFanin->pFanout) = pFanout;
190 }
191 pFanin->pFanout = pFanout;
192}
Here is the caller graph for this function:

◆ Ivy_ObjCollectFanouts()

void Ivy_ObjCollectFanouts ( Ivy_Man_t * p,
Ivy_Obj_t * pObj,
Vec_Ptr_t * vArray )

Function*************************************************************

Synopsis [Starts iteration through the fanouts.]

Description [Copies the currently available fanouts into the array.]

SideEffects [Can be used while the fanouts are being removed.]

SeeAlso []

Definition at line 262 of file ivyFanout.c.

263{
264 Ivy_Obj_t * pFanout;
265 assert( p->fFanout );
266 assert( !Ivy_IsComplement(pObj) );
267 Vec_PtrClear( vArray );
268 Ivy_ObjForEachFanoutInt( pObj, pFanout )
269 Vec_PtrPush( vArray, pFanout );
270}
#define Ivy_ObjForEachFanoutInt(pObj, pFanout)
Definition ivyFanout.c:109

◆ Ivy_ObjDeleteFanout()

void Ivy_ObjDeleteFanout ( Ivy_Man_t * p,
Ivy_Obj_t * pFanin,
Ivy_Obj_t * pFanout )

Function*************************************************************

Synopsis [Removes the fanout.]

Description []

SideEffects []

SeeAlso []

Definition at line 205 of file ivyFanout.c.

206{
207 Ivy_Obj_t ** ppPlace1, ** ppPlace2, ** ppPlaceN;
208 assert( pFanin->pFanout != NULL );
209
210 ppPlace1 = Ivy_ObjNextFanoutPlace(pFanin, pFanout);
211 ppPlaceN = Ivy_ObjPrevNextFanoutPlace(pFanin, pFanout);
212 assert( *ppPlaceN == pFanout );
213 if ( ppPlaceN )
214 *ppPlaceN = *ppPlace1;
215
216 ppPlace2 = Ivy_ObjPrevFanoutPlace(pFanin, pFanout);
217 ppPlaceN = Ivy_ObjNextPrevFanoutPlace(pFanin, pFanout);
218 assert( ppPlaceN == NULL || *ppPlaceN == pFanout );
219 if ( ppPlaceN )
220 *ppPlaceN = *ppPlace2;
221
222 *ppPlace1 = NULL;
223 *ppPlace2 = NULL;
224}
Here is the caller graph for this function:

◆ Ivy_ObjFanoutNum()

int Ivy_ObjFanoutNum ( Ivy_Man_t * p,
Ivy_Obj_t * pObj )

Function*************************************************************

Synopsis [Reads one fanout.]

Description [Returns fanout if there is only one fanout.]

SideEffects []

SeeAlso []

Definition at line 299 of file ivyFanout.c.

300{
301 Ivy_Obj_t * pFanout;
302 int Counter = 0;
303 Ivy_ObjForEachFanoutInt( pObj, pFanout )
304 Counter++;
305 return Counter;
306}
Here is the caller graph for this function:

◆ Ivy_ObjPatchFanout()

void Ivy_ObjPatchFanout ( Ivy_Man_t * p,
Ivy_Obj_t * pFanin,
Ivy_Obj_t * pFanoutOld,
Ivy_Obj_t * pFanoutNew )

Function*************************************************************

Synopsis [Replaces the fanout of pOld to be pFanoutNew.]

Description []

SideEffects []

SeeAlso []

Definition at line 237 of file ivyFanout.c.

238{
239 Ivy_Obj_t ** ppPlace;
240 ppPlace = Ivy_ObjPrevNextFanoutPlace(pFanin, pFanoutOld);
241 assert( *ppPlace == pFanoutOld );
242 if ( ppPlace )
243 *ppPlace = pFanoutNew;
244 ppPlace = Ivy_ObjNextPrevFanoutPlace(pFanin, pFanoutOld);
245 assert( ppPlace == NULL || *ppPlace == pFanoutOld );
246 if ( ppPlace )
247 *ppPlace = pFanoutNew;
248 // assuming that pFanoutNew already points to the next fanout
249}
Here is the caller graph for this function:

◆ Ivy_ObjReadFirstFanout()

Ivy_Obj_t * Ivy_ObjReadFirstFanout ( Ivy_Man_t * p,
Ivy_Obj_t * pObj )

Function*************************************************************

Synopsis [Reads one fanout.]

Description [Returns fanout if there is only one fanout.]

SideEffects []

SeeAlso []

Definition at line 283 of file ivyFanout.c.

284{
285 return pObj->pFanout;
286}
Here is the caller graph for this function: