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

Go to the source code of this file.

Functions

ABC_NAMESPACE_IMPL_START void Gia_ManCollectCis_rec (Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vSupp)
 DECLARATIONS ///.
 
void Gia_ManCollectCis (Gia_Man_t *p, int *pNodes, int nNodes, Vec_Int_t *vSupp)
 
void Gia_ManCollectAnds_rec (Gia_Man_t *p, int iObj, Vec_Int_t *vNodes)
 
void Gia_ManCollectAnds (Gia_Man_t *p, int *pNodes, int nNodes, Vec_Int_t *vNodes, Vec_Int_t *vLeaves)
 
Vec_Int_tGia_ManCollectAndsAll (Gia_Man_t *p)
 
void Gia_ManCollectNodesCis_rec (Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vNodes)
 
Vec_Int_tGia_ManCollectNodesCis (Gia_Man_t *p, int *pNodes, int nNodes)
 
void Gia_ManCollectTest (Gia_Man_t *p)
 
int Gia_ManSuppSize_rec (Gia_Man_t *p, Gia_Obj_t *pObj)
 
int Gia_ManSuppSizeOne (Gia_Man_t *p, Gia_Obj_t *pObj)
 
int Gia_ManSuppSizeTest (Gia_Man_t *p)
 
int Gia_ManSuppSize (Gia_Man_t *p, int *pNodes, int nNodes)
 
int Gia_ManConeSize_rec (Gia_Man_t *p, Gia_Obj_t *pObj)
 
int Gia_ManConeSize (Gia_Man_t *p, int *pNodes, int nNodes)
 
Vec_Vec_tGia_ManLevelize (Gia_Man_t *p)
 
Vec_Wec_tGia_ManLevelizeR (Gia_Man_t *p)
 
Vec_Int_tGia_ManOrderReverse (Gia_Man_t *p)
 
void Gia_ManCollectSeq_rec (Gia_Man_t *p, int Id, Vec_Int_t *vRoots, Vec_Int_t *vObjs)
 
Vec_Int_tGia_ManCollectSeq (Gia_Man_t *p, int *pPos, int nPos)
 
void Gia_ManCollectSeqTest (Gia_Man_t *p)
 
void Gia_ManCollectTfi_rec (Gia_Man_t *p, int iObj, Vec_Int_t *vNodes)
 
void Gia_ManCollectTfi (Gia_Man_t *p, Vec_Int_t *vRoots, Vec_Int_t *vNodes)
 
void Gia_ManCollectTfo_rec (Gia_Man_t *p, int iObj, Vec_Int_t *vNodes)
 
void Gia_ManCollectTfo (Gia_Man_t *p, Vec_Int_t *vRoots, Vec_Int_t *vNodes)
 

Function Documentation

◆ Gia_ManCollectAnds()

void Gia_ManCollectAnds ( Gia_Man_t * p,
int * pNodes,
int nNodes,
Vec_Int_t * vNodes,
Vec_Int_t * vLeaves )

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

Synopsis [Collects support nodes.]

Description []

SideEffects []

SeeAlso []

Definition at line 125 of file giaDfs.c.

126{
127 int i, iLeaf;
128// Gia_ManIncrementTravId( p );
129 Gia_ObjSetTravIdCurrentId( p, 0 );
130 if ( vLeaves )
131 Vec_IntForEachEntry( vLeaves, iLeaf, i )
132 Gia_ObjSetTravIdCurrentId( p, iLeaf );
133 Vec_IntClear( vNodes );
134 for ( i = 0; i < nNodes; i++ )
135 {
136 Gia_Obj_t * pObj = Gia_ManObj( p, pNodes[i] );
137 if ( Gia_ObjIsCo(pObj) )
138 Gia_ManCollectAnds_rec( p, Gia_ObjFaninId0(pObj, pNodes[i]), vNodes );
139 else if ( Gia_ObjIsAnd(pObj) )
140 Gia_ManCollectAnds_rec( p, pNodes[i], vNodes );
141 }
142}
Cube * p
Definition exorList.c:222
void Gia_ManCollectAnds_rec(Gia_Man_t *p, int iObj, Vec_Int_t *vNodes)
Definition giaDfs.c:99
struct Gia_Obj_t_ Gia_Obj_t
Definition gia.h:76
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
Definition vecInt.h:54
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManCollectAnds_rec()

void Gia_ManCollectAnds_rec ( Gia_Man_t * p,
int iObj,
Vec_Int_t * vNodes )

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

Synopsis [Counts the support size of the node.]

Description []

SideEffects []

SeeAlso []

Definition at line 99 of file giaDfs.c.

100{
101 Gia_Obj_t * pObj;
102 if ( Gia_ObjIsTravIdCurrentId(p, iObj) )
103 return;
104 Gia_ObjSetTravIdCurrentId(p, iObj);
105 pObj = Gia_ManObj( p, iObj );
106 if ( Gia_ObjIsCi(pObj) )
107 return;
108 assert( Gia_ObjIsAnd(pObj) );
109 Gia_ManCollectAnds_rec( p, Gia_ObjFaninId0(pObj, iObj), vNodes );
110 Gia_ManCollectAnds_rec( p, Gia_ObjFaninId1(pObj, iObj), vNodes );
111 Vec_IntPush( vNodes, iObj );
112}
#define assert(ex)
Definition util_old.h:213
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManCollectAndsAll()

Vec_Int_t * Gia_ManCollectAndsAll ( Gia_Man_t * p)

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

Synopsis [Collects support nodes.]

Description []

SideEffects []

SeeAlso []

Definition at line 155 of file giaDfs.c.

156{
157 Gia_Obj_t * pObj; int i;
158 Vec_Int_t * vNodes = Vec_IntAlloc( Gia_ManAndNum(p) );
159 Gia_ManForEachAnd( p, pObj, i )
160 Vec_IntPush( vNodes, i );
161 return vNodes;
162}
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
#define Gia_ManForEachAnd(p, pObj, i)
Definition gia.h:1214

◆ Gia_ManCollectCis()

void Gia_ManCollectCis ( Gia_Man_t * p,
int * pNodes,
int nNodes,
Vec_Int_t * vSupp )

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

Synopsis [Collects support nodes.]

Description []

SideEffects []

SeeAlso []

Definition at line 71 of file giaDfs.c.

72{
73 Gia_Obj_t * pObj;
74 int i;
75 Vec_IntClear( vSupp );
77 Gia_ObjSetTravIdCurrent( p, Gia_ManConst0(p) );
78 for ( i = 0; i < nNodes; i++ )
79 {
80 pObj = Gia_ManObj( p, pNodes[i] );
81 if ( Gia_ObjIsCo(pObj) )
82 Gia_ManCollectCis_rec( p, Gia_ObjFanin0(pObj), vSupp );
83 else
84 Gia_ManCollectCis_rec( p, pObj, vSupp );
85 }
86}
ABC_NAMESPACE_IMPL_START void Gia_ManCollectCis_rec(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vSupp)
DECLARATIONS ///.
Definition giaDfs.c:45
void Gia_ManIncrementTravId(Gia_Man_t *p)
Definition giaUtil.c:190
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManCollectCis_rec()

ABC_NAMESPACE_IMPL_START void Gia_ManCollectCis_rec ( Gia_Man_t * p,
Gia_Obj_t * pObj,
Vec_Int_t * vSupp )

DECLARATIONS ///.

CFile****************************************************************

FileName [giaDfs.c]

SystemName [ABC: Logic synthesis and verification system.]

PackageName [Scalable AIG package.]

Synopsis [DFS procedures.]

Author [Alan Mishchenko]

Affiliation [UC Berkeley]

Date [Ver. 1.0. Started - June 20, 2005.]

Revision [

Id
giaDfs.c,v 1.00 2005/06/20 00:00:00 alanmi Exp

] FUNCTION DEFINITIONS /// Function*************************************************************

Synopsis [Counts the support size of the node.]

Description []

SideEffects []

SeeAlso []

Definition at line 45 of file giaDfs.c.

46{
47 if ( Gia_ObjIsTravIdCurrent(p, pObj) )
48 return;
49 Gia_ObjSetTravIdCurrent(p, pObj);
50 if ( Gia_ObjIsCi(pObj) )
51 {
52 Vec_IntPush( vSupp, Gia_ObjId(p, pObj) );
53 return;
54 }
55 assert( Gia_ObjIsAnd(pObj) );
56 Gia_ManCollectCis_rec( p, Gia_ObjFanin0(pObj), vSupp );
57 Gia_ManCollectCis_rec( p, Gia_ObjFanin1(pObj), vSupp );
58}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManCollectNodesCis()

Vec_Int_t * Gia_ManCollectNodesCis ( Gia_Man_t * p,
int * pNodes,
int nNodes )

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

Synopsis [Collects support nodes.]

Description []

SideEffects []

SeeAlso []

Definition at line 202 of file giaDfs.c.

203{
204 Vec_Int_t * vNodes;
205 Gia_Obj_t * pObj;
206 int i;
207 vNodes = Vec_IntAlloc( 10000 );
209 Gia_ObjSetTravIdCurrent( p, Gia_ManConst0(p) );
210 for ( i = 0; i < nNodes; i++ )
211 {
212 pObj = Gia_ManObj( p, pNodes[i] );
213 if ( Gia_ObjIsCo(pObj) )
214 Gia_ManCollectNodesCis_rec( p, Gia_ObjFanin0(pObj), vNodes );
215 else
216 Gia_ManCollectNodesCis_rec( p, pObj, vNodes );
217 }
218 return vNodes;
219}
void Gia_ManCollectNodesCis_rec(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vNodes)
Definition giaDfs.c:175
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManCollectNodesCis_rec()

void Gia_ManCollectNodesCis_rec ( Gia_Man_t * p,
Gia_Obj_t * pObj,
Vec_Int_t * vNodes )

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

Synopsis [Counts the support size of the node.]

Description []

SideEffects []

SeeAlso []

Definition at line 175 of file giaDfs.c.

176{
177 if ( Gia_ObjIsTravIdCurrent(p, pObj) )
178 return;
179 Gia_ObjSetTravIdCurrent(p, pObj);
180 if ( Gia_ObjIsCi(pObj) )
181 {
182 Vec_IntPush( vNodes, Gia_ObjId(p, pObj) );
183 return;
184 }
185 assert( Gia_ObjIsAnd(pObj) );
186 Gia_ManCollectNodesCis_rec( p, Gia_ObjFanin0(pObj), vNodes );
187 Gia_ManCollectNodesCis_rec( p, Gia_ObjFanin1(pObj), vNodes );
188 Vec_IntPush( vNodes, Gia_ObjId(p, pObj) );
189}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManCollectSeq()

Vec_Int_t * Gia_ManCollectSeq ( Gia_Man_t * p,
int * pPos,
int nPos )

Definition at line 519 of file giaDfs.c.

520{
521 Vec_Int_t * vObjs, * vRoots;
522 int i, iRoot;
523 // collect roots
524 vRoots = Vec_IntAlloc( 100 );
525 for ( i = 0; i < nPos; i++ )
526 Vec_IntPush( vRoots, Gia_ObjId(p, Gia_ManPo(p, pPos[i])) );
527 // start trav IDs
529 Gia_ObjSetTravIdCurrentId( p, 0 );
530 // collect objects
531 vObjs = Vec_IntAlloc( 1000 );
532 Vec_IntPush( vObjs, 0 );
533 Vec_IntForEachEntry( vRoots, iRoot, i )
534 Gia_ManCollectSeq_rec( p, iRoot, vRoots, vObjs );
535 Vec_IntFree( vRoots );
536 return vObjs;
537}
void Gia_ManCollectSeq_rec(Gia_Man_t *p, int Id, Vec_Int_t *vRoots, Vec_Int_t *vObjs)
Definition giaDfs.c:497
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManCollectSeq_rec()

void Gia_ManCollectSeq_rec ( Gia_Man_t * p,
int Id,
Vec_Int_t * vRoots,
Vec_Int_t * vObjs )

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

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 497 of file giaDfs.c.

498{
499 Gia_Obj_t * pObj;
500 if ( Gia_ObjIsTravIdCurrentId( p, Id ) )
501 return;
502 Gia_ObjSetTravIdCurrentId( p, Id );
503 pObj = Gia_ManObj( p, Id );
504 if ( Gia_ObjIsAnd(pObj) )
505 {
506 Gia_ManCollectSeq_rec( p, Gia_ObjFaninId0(pObj, Id), vRoots, vObjs );
507 Gia_ManCollectSeq_rec( p, Gia_ObjFaninId1(pObj, Id), vRoots, vObjs );
508 }
509 else if ( Gia_ObjIsCi(pObj) )
510 {
511 if ( Gia_ObjIsRo(p, pObj) )
512 Vec_IntPush( vRoots, Gia_ObjId(p, Gia_ObjRoToRi(p, pObj)) );
513 }
514 else if ( Gia_ObjIsCo(pObj) )
515 Gia_ManCollectSeq_rec( p, Gia_ObjFaninId0(pObj, Id), vRoots, vObjs );
516 else assert( 0 );
517 Vec_IntPush( vObjs, Id );
518}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManCollectSeqTest()

void Gia_ManCollectSeqTest ( Gia_Man_t * p)

Definition at line 538 of file giaDfs.c.

539{
540 Vec_Int_t * vObjs;
541 int i;
542 abctime clk = Abc_Clock();
543 for ( i = 0; i < Gia_ManPoNum(p); i++ )
544 {
545 if ( i % 10000 == 0 )
546 printf( "%8d finished...\r", i );
547
548 vObjs = Gia_ManCollectSeq( p, &i, 1 );
549// printf( "%d ", Vec_IntSize(vObjs) );
550 Vec_IntFree( vObjs );
551 }
552 Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
553
554}
ABC_INT64_T abctime
Definition abc_global.h:332
Vec_Int_t * Gia_ManCollectSeq(Gia_Man_t *p, int *pPos, int nPos)
Definition giaDfs.c:519
Here is the call graph for this function:

◆ Gia_ManCollectTest()

void Gia_ManCollectTest ( Gia_Man_t * p)

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

Synopsis [Collects support nodes.]

Description []

SideEffects []

SeeAlso []

Definition at line 232 of file giaDfs.c.

233{
234 Vec_Int_t * vNodes;
235 Gia_Obj_t * pObj;
236 int i, iNode;
237 abctime clk = Abc_Clock();
238 vNodes = Vec_IntAlloc( 100 );
240 Gia_ManForEachCo( p, pObj, i )
241 {
242 iNode = Gia_ObjId(p, pObj);
243 Gia_ManCollectAnds( p, &iNode, 1, vNodes, NULL );
244 }
245 Vec_IntFree( vNodes );
246 ABC_PRT( "DFS from each output", Abc_Clock() - clk );
247}
#define ABC_PRT(a, t)
Definition abc_global.h:255
void Gia_ManCollectAnds(Gia_Man_t *p, int *pNodes, int nNodes, Vec_Int_t *vNodes, Vec_Int_t *vLeaves)
Definition giaDfs.c:125
#define Gia_ManForEachCo(p, pObj, i)
Definition gia.h:1236
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManCollectTfi()

void Gia_ManCollectTfi ( Gia_Man_t * p,
Vec_Int_t * vRoots,
Vec_Int_t * vNodes )

Definition at line 581 of file giaDfs.c.

582{
583 int i, iRoot;
584 Vec_IntClear( vNodes );
586 Vec_IntForEachEntry( vRoots, iRoot, i )
587 Gia_ManCollectTfi_rec( p, iRoot, vNodes );
588}
void Gia_ManCollectTfi_rec(Gia_Man_t *p, int iObj, Vec_Int_t *vNodes)
Definition giaDfs.c:567
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManCollectTfi_rec()

void Gia_ManCollectTfi_rec ( Gia_Man_t * p,
int iObj,
Vec_Int_t * vNodes )

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

Synopsis [Collect TFI nodes.]

Description []

SideEffects []

SeeAlso []

Definition at line 567 of file giaDfs.c.

568{
569 Gia_Obj_t * pObj;
570 if ( Gia_ObjIsTravIdCurrentId(p, iObj) )
571 return;
572 Gia_ObjSetTravIdCurrentId(p, iObj);
573 pObj = Gia_ManObj( p, iObj );
574 if ( Gia_ObjIsCi(pObj) )
575 return;
576 assert( Gia_ObjIsAnd(pObj) );
577 Gia_ManCollectTfi_rec( p, Gia_ObjFaninId0(pObj, iObj), vNodes );
578 Gia_ManCollectTfi_rec( p, Gia_ObjFaninId1(pObj, iObj), vNodes );
579 Vec_IntPush( vNodes, iObj );
580}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManCollectTfo()

void Gia_ManCollectTfo ( Gia_Man_t * p,
Vec_Int_t * vRoots,
Vec_Int_t * vNodes )

Definition at line 615 of file giaDfs.c.

616{
617 int i, iRoot;
618 Vec_IntClear( vNodes );
620 Vec_IntForEachEntry( vRoots, iRoot, i )
621 Gia_ManCollectTfo_rec( p, iRoot, vNodes );
622}
void Gia_ManCollectTfo_rec(Gia_Man_t *p, int iObj, Vec_Int_t *vNodes)
Definition giaDfs.c:601
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManCollectTfo_rec()

void Gia_ManCollectTfo_rec ( Gia_Man_t * p,
int iObj,
Vec_Int_t * vNodes )

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

Synopsis [Collect TFI nodes.]

Description []

SideEffects []

SeeAlso []

Definition at line 601 of file giaDfs.c.

602{
603 Gia_Obj_t * pObj; int i, iFan;
604 if ( Gia_ObjIsTravIdCurrentId(p, iObj) )
605 return;
606 Gia_ObjSetTravIdCurrentId(p, iObj);
607 pObj = Gia_ManObj( p, iObj );
608 if ( Gia_ObjIsCo(pObj) )
609 return;
610 assert( Gia_ObjIsAnd(pObj) );
611 Gia_ObjForEachFanoutStaticId( p, iObj, iFan, i )
612 Gia_ManCollectTfo_rec( p, iFan, vNodes );
613 Vec_IntPush( vNodes, iObj );
614}
#define Gia_ObjForEachFanoutStaticId(p, Id, FanId, i)
Definition gia.h:1127
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManConeSize()

int Gia_ManConeSize ( Gia_Man_t * p,
int * pNodes,
int nNodes )

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

Synopsis [Collects support nodes.]

Description []

SideEffects []

SeeAlso []

Definition at line 375 of file giaDfs.c.

376{
377 Gia_Obj_t * pObj;
378 int i, Counter = 0;
380 Gia_ObjSetTravIdCurrent( p, Gia_ManConst0(p) );
381 for ( i = 0; i < nNodes; i++ )
382 {
383 pObj = Gia_ManObj( p, pNodes[i] );
384 if ( Gia_ObjIsCo(pObj) )
385 Counter += Gia_ManConeSize_rec( p, Gia_ObjFanin0(pObj) );
386 else
387 Counter += Gia_ManConeSize_rec( p, pObj );
388 }
389 return Counter;
390}
int Gia_ManConeSize_rec(Gia_Man_t *p, Gia_Obj_t *pObj)
Definition giaDfs.c:352
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManConeSize_rec()

int Gia_ManConeSize_rec ( Gia_Man_t * p,
Gia_Obj_t * pObj )

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

Synopsis [Collects support nodes.]

Description []

SideEffects []

SeeAlso []

Definition at line 352 of file giaDfs.c.

353{
354 if ( Gia_ObjIsTravIdCurrent(p, pObj) )
355 return 0;
356 Gia_ObjSetTravIdCurrent(p, pObj);
357 if ( Gia_ObjIsCi(pObj) )
358 return 0;
359 assert( Gia_ObjIsAnd(pObj) );
360 return 1 + Gia_ManConeSize_rec( p, Gia_ObjFanin0(pObj) ) +
361 Gia_ManConeSize_rec( p, Gia_ObjFanin1(pObj) );
362}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManLevelize()

Vec_Vec_t * Gia_ManLevelize ( Gia_Man_t * p)

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

Synopsis [Levelizes the nodes.]

Description []

SideEffects []

SeeAlso []

Definition at line 403 of file giaDfs.c.

404{
405 Gia_Obj_t * pObj;
406 Vec_Vec_t * vLevels;
407 int nLevels, Level, i;
408 nLevels = Gia_ManLevelNum( p );
409 vLevels = Vec_VecStart( nLevels + 1 );
410 Gia_ManForEachAnd( p, pObj, i )
411 {
412 Level = Gia_ObjLevel( p, pObj );
413 assert( Level <= nLevels );
414 Vec_VecPush( vLevels, Level, pObj );
415 }
416 return vLevels;
417}
int Gia_ManLevelNum(Gia_Man_t *p)
Definition giaUtil.c:546
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.
Definition vecVec.h:42
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManLevelizeR()

Vec_Wec_t * Gia_ManLevelizeR ( Gia_Man_t * p)

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

Synopsis [Levelizes the nodes.]

Description []

SideEffects []

SeeAlso []

Definition at line 430 of file giaDfs.c.

431{
432 Gia_Obj_t * pObj;
433 Vec_Wec_t * vLevels;
434 int nLevels, Level, i;
435 nLevels = Gia_ManLevelRNum( p );
436 vLevels = Vec_WecStart( nLevels + 1 );
437 Gia_ManForEachObj( p, pObj, i )
438 {
439 if ( i == 0 || (!Gia_ObjIsCo(pObj) && !Gia_ObjLevel(p, pObj)) )
440 continue;
441 Level = Gia_ObjLevel( p, pObj );
442 assert( Level <= nLevels );
443 Vec_WecPush( vLevels, Level, i );
444 }
445 return vLevels;
446}
int Gia_ManLevelRNum(Gia_Man_t *p)
Definition giaUtil.c:566
#define Gia_ManForEachObj(p, pObj, i)
MACRO DEFINITIONS ///.
Definition gia.h:1190
typedefABC_NAMESPACE_HEADER_START struct Vec_Wec_t_ Vec_Wec_t
INCLUDES ///.
Definition vecWec.h:42
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManOrderReverse()

Vec_Int_t * Gia_ManOrderReverse ( Gia_Man_t * p)

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

Synopsis [Computes reverse topological order.]

Description [Assumes that levels are already assigned. The levels of CO nodes may not be assigned.]

SideEffects []

SeeAlso []

Definition at line 459 of file giaDfs.c.

460{
461 Gia_Obj_t * pObj;
462 Vec_Vec_t * vLevels;
463 Vec_Ptr_t * vLevel;
464 Vec_Int_t * vResult;
465 int i, k;
466 vLevels = Vec_VecStart( 100 );
467 // make sure levels are assigned
468 Gia_ManForEachAnd( p, pObj, i )
469 assert( Gia_ObjLevel(p, pObj) > 0 );
470 // add CO nodes based on the level of their fanin
471 Gia_ManForEachCo( p, pObj, i )
472 Vec_VecPush( vLevels, Gia_ObjLevel(p, Gia_ObjFanin0(pObj)), pObj );
473 // add other nodes based on their level
474 Gia_ManForEachObj( p, pObj, i )
475 if ( !Gia_ObjIsCo(pObj) )
476 Vec_VecPush( vLevels, Gia_ObjLevel(p, pObj), pObj );
477 // put the nodes in the reverse topological order
478 vResult = Vec_IntAlloc( Gia_ManObjNum(p) );
479 Vec_VecForEachLevelReverse( vLevels, vLevel, i )
480 Vec_PtrForEachEntry( Gia_Obj_t *, vLevel, pObj, k )
481 Vec_IntPush( vResult, Gia_ObjId(p, pObj) );
482 Vec_VecFree( vLevels );
483 return vResult;
484}
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Definition vecPtr.h:42
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
Definition vecPtr.h:55
#define Vec_VecForEachLevelReverse(vGlob, vVec, i)
Definition vecVec.h:63
Here is the caller graph for this function:

◆ Gia_ManSuppSize()

int Gia_ManSuppSize ( Gia_Man_t * p,
int * pNodes,
int nNodes )

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

Synopsis [Collects support nodes.]

Description []

SideEffects []

SeeAlso []

Definition at line 324 of file giaDfs.c.

325{
326 Gia_Obj_t * pObj;
327 int i, Counter = 0;
329 Gia_ObjSetTravIdCurrent( p, Gia_ManConst0(p) );
330 for ( i = 0; i < nNodes; i++ )
331 {
332 pObj = Gia_ManObj( p, pNodes[i] );
333 if ( Gia_ObjIsCo(pObj) )
334 Counter += Gia_ManSuppSize_rec( p, Gia_ObjFanin0(pObj) );
335 else
336 Counter += Gia_ManSuppSize_rec( p, pObj );
337 }
338 return Counter;
339}
int Gia_ManSuppSize_rec(Gia_Man_t *p, Gia_Obj_t *pObj)
Definition giaDfs.c:260
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManSuppSize_rec()

int Gia_ManSuppSize_rec ( Gia_Man_t * p,
Gia_Obj_t * pObj )

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

Synopsis [Collects support nodes.]

Description []

SideEffects []

SeeAlso []

Definition at line 260 of file giaDfs.c.

261{
262 if ( Gia_ObjIsTravIdCurrent(p, pObj) )
263 return 0;
264 Gia_ObjSetTravIdCurrent(p, pObj);
265 if ( Gia_ObjIsCi(pObj) )
266 return 1;
267 assert( Gia_ObjIsAnd(pObj) );
268 return Gia_ManSuppSize_rec( p, Gia_ObjFanin0(pObj) ) +
269 Gia_ManSuppSize_rec( p, Gia_ObjFanin1(pObj) );
270}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManSuppSizeOne()

int Gia_ManSuppSizeOne ( Gia_Man_t * p,
Gia_Obj_t * pObj )

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

Synopsis [Computes support size of the node.]

Description []

SideEffects []

SeeAlso []

Definition at line 283 of file giaDfs.c.

284{
286 return Gia_ManSuppSize_rec( p, pObj );
287}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManSuppSizeTest()

int Gia_ManSuppSizeTest ( Gia_Man_t * p)

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

Synopsis [Computes support size of the node.]

Description []

SideEffects []

SeeAlso []

Definition at line 300 of file giaDfs.c.

301{
302 Gia_Obj_t * pObj;
303 int i, Counter = 0;
304 abctime clk = Abc_Clock();
305 Gia_ManForEachObj( p, pObj, i )
306 if ( Gia_ObjIsAnd(pObj) )
307 Counter += (Gia_ManSuppSizeOne(p, pObj) <= 16);
308 printf( "Nodes with small support %d (out of %d)\n", Counter, Gia_ManAndNum(p) );
309 Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
310 return Counter;
311}
int Gia_ManSuppSizeOne(Gia_Man_t *p, Gia_Obj_t *pObj)
Definition giaDfs.c:283
Here is the call graph for this function:
Here is the caller graph for this function: