ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
int2Refine.c
Go to the documentation of this file.
1
20
21#include "int2Int.h"
22
24
25
29
33
46{
47 if ( pObj->fMark1 )
48 return;
49 pObj->fMark1 = 1;
50 if ( Gia_ObjIsPi(p, pObj) )
51 return;
52 if ( Gia_ObjIsCo(pObj) )
53 {
54 Vec_IntPush( vSelect, Gia_ObjCioId(pObj) );
55 return;
56 }
57 assert( Gia_ObjIsAnd(pObj) );
58 if ( pObj->Value == 1 )
59 {
60 if ( Gia_ObjFanin0(pObj)->Value < ABC_INFINITY )
61 Int2_ManJustify_rec( p, Gia_ObjFanin0(pObj), vSelect );
62 if ( Gia_ObjFanin1(pObj)->Value < ABC_INFINITY )
63 Int2_ManJustify_rec( p, Gia_ObjFanin1(pObj), vSelect );
64 return;
65 }
66 if ( (Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj)) == 0 && (Gia_ObjFanin1(pObj)->fMark0 ^ Gia_ObjFaninC1(pObj)) == 0 )
67 {
68 if ( Gia_ObjFanin0(pObj)->fMark0 <= Gia_ObjFanin1(pObj)->fMark0 ) // choice
69 {
70 if ( Gia_ObjFanin0(pObj)->Value < ABC_INFINITY )
71 Int2_ManJustify_rec( p, Gia_ObjFanin0(pObj), vSelect );
72 }
73 else
74 {
75 if ( Gia_ObjFanin1(pObj)->Value < ABC_INFINITY )
76 Int2_ManJustify_rec( p, Gia_ObjFanin1(pObj), vSelect );
77 }
78 }
79 else if ( (Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj)) == 0 )
80 {
81 if ( Gia_ObjFanin0(pObj)->Value < ABC_INFINITY )
82 Int2_ManJustify_rec( p, Gia_ObjFanin0(pObj), vSelect );
83 }
84 else if ( (Gia_ObjFanin1(pObj)->fMark0 ^ Gia_ObjFaninC1(pObj)) == 0 )
85 {
86 if ( Gia_ObjFanin1(pObj)->Value < ABC_INFINITY )
87 Int2_ManJustify_rec( p, Gia_ObjFanin1(pObj), vSelect );
88 }
89 else assert( 0 );
90 }
91
105{
106 Vec_Int_t * vSubset;
107 Gia_Obj_t * pObj;
108 int i;
109 // set values and prios
110 assert( Gia_ManRegNum(p) > 0 );
111 assert( Vec_IntSize(vAssign) == Vec_IntSize(vPrio) );
112 Gia_ManConst0(p)->fMark0 = 0;
113 Gia_ManConst0(p)->fMark1 = 0;
114 Gia_ManConst0(p)->Value = ABC_INFINITY;
115 Gia_ManForEachCi( p, pObj, i )
116 {
117 pObj->fMark0 = Vec_IntEntry(vAssign, i);
118 pObj->fMark1 = 0;
119 pObj->Value = Vec_IntEntry(vPrio, i);
120 }
121 Gia_ManForEachAnd( p, pObj, i )
122 {
123 pObj->fMark0 = (Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj)) & (Gia_ObjFanin1(pObj)->fMark0 ^ Gia_ObjFaninC1(pObj));
124 pObj->fMark1 = 0;
125 if ( pObj->fMark0 == 1 )
126 pObj->Value = Abc_MaxInt( Gia_ObjFanin0(pObj)->Value, Gia_ObjFanin1(pObj)->Value );
127 else if ( (Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj)) == 0 && (Gia_ObjFanin1(pObj)->fMark0 ^ Gia_ObjFaninC1(pObj)) == 0 )
128 pObj->Value = Abc_MinInt( Gia_ObjFanin0(pObj)->Value, Gia_ObjFanin1(pObj)->Value ); // choice
129 else if ( (Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj)) == 0 )
130 pObj->Value = Gia_ObjFanin0(pObj)->Value;
131 else
132 pObj->Value = Gia_ObjFanin1(pObj)->Value;
133 }
134 pObj = Gia_ManPo( p, 0 );
135 pObj->fMark0 = (Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj));
136 pObj->fMark1 = 0;
137 pObj->Value = Gia_ObjFanin0(pObj)->Value;
138 assert( pObj->fMark0 == 1 );
139 assert( pObj->Value < ABC_INFINITY );
140 // select subset
141 vSubset = Vec_IntAlloc( 100 );
142 Int2_ManJustify_rec( p, Gia_ObjFanin0(pObj), vSubset );
143 return vSubset;
144}
145
146
147
151
152
154
#define ABC_INFINITY
MACRO DEFINITIONS ///.
Definition abc_global.h:250
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
Cube * p
Definition exorList.c:222
#define Gia_ManForEachAnd(p, pObj, i)
Definition gia.h:1214
struct Gia_Obj_t_ Gia_Obj_t
Definition gia.h:76
struct Gia_Man_t_ Gia_Man_t
Definition gia.h:96
#define Gia_ManForEachCi(p, pObj, i)
Definition gia.h:1228
Vec_Int_t * Int2_ManRefineCube(Gia_Man_t *p, Vec_Int_t *vAssign, Vec_Int_t *vPrio)
Definition int2Refine.c:104
ABC_NAMESPACE_IMPL_START void Int2_ManJustify_rec(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vSelect)
DECLARATIONS ///.
Definition int2Refine.c:45
unsigned fMark1
Definition gia.h:86
unsigned Value
Definition gia.h:89
unsigned fMark0
Definition gia.h:81
#define assert(ex)
Definition util_old.h:213