FUNCTION DEFINITIONS ///.
50{
51 Abc_Obj_t * pFanin, * pFanin2, * pFaninTemp;
52 unsigned * pInfo, * pInfoDiv, * pInfoDiv2;
53 int Counter, RetValue, i, i2, d, d2, iDiv, iDiv2, k;
54
55
56 pInfo = (
unsigned *)Vec_PtrEntry( pSim->
vOuts, 1 );
57 RetValue = Abc_InfoIsOne( pInfo, pSim->
nWordsOut );
58 if ( RetValue == 0 )
59 {
60
61 return 0;
62 }
63
64
65 pInfo = Res_FilterCollectFaninInfo( pWin, pSim, ~0 );
66 RetValue = Abc_InfoIsOne( pInfo, pSim->
nWordsOut );
67 if ( RetValue == 0 )
68 {
69
70 return 0;
71 }
72
73
74
75 Counter = 0;
76 Vec_VecClear( vResubs );
77 Vec_VecClear( vResubsW );
79 {
80 if ( fArea && Abc_ObjFanoutNum(pFanin) > 1 )
81 continue;
82
83 pInfo = Res_FilterCollectFaninInfo( pWin, pSim, ~(1 << i) );
84 RetValue = Abc_InfoIsOne( pInfo, pSim->
nWordsOut );
85 if ( RetValue )
86 {
87
88
89 Vec_VecPush( vResubs, Counter, Abc_NtkPo(pAig,0) );
90 Vec_VecPush( vResubs, Counter, Abc_NtkPo(pAig,1) );
92 {
93 if ( k != i )
94 {
95 Vec_VecPush( vResubs, Counter, Abc_NtkPo(pAig,2+k) );
96 Vec_VecPush( vResubsW, Counter, pFaninTemp );
97 }
98 }
99 Counter++;
100 if ( Counter == Vec_VecSize(vResubs) )
101 return Counter;
102 }
103 }
104
105
107 {
108 if ( Abc_ObjFanoutNum(pFanin) > 1 )
109 continue;
110
111 pInfo = Res_FilterCollectFaninInfo( pWin, pSim, ~(1 << i) );
112
113 for ( d = Abc_ObjFaninNum(pWin->pNode) + 2; d < Abc_NtkPoNum(pAig); d++ )
114 {
115 pInfoDiv = (
unsigned *)Vec_PtrEntry( pSim->
vOuts, d );
116 iDiv = d - (Abc_ObjFaninNum(pWin->pNode) + 2);
117 if ( !Abc_InfoIsOrOne( pInfo, pInfoDiv, pSim->
nWordsOut ) )
118 continue;
119
120 Vec_VecPush( vResubs, Counter, Abc_NtkPo(pAig,0) );
121 Vec_VecPush( vResubs, Counter, Abc_NtkPo(pAig,1) );
122
124 {
125 if ( k != i )
126 {
127 Vec_VecPush( vResubs, Counter, Abc_NtkPo(pAig,2+k) );
128 Vec_VecPush( vResubsW, Counter, pFaninTemp );
129 }
130 }
131
132 Vec_VecPush( vResubs, Counter, Abc_NtkPo(pAig,d) );
133 Vec_VecPush( vResubsW, Counter, Vec_PtrEntry(pWin->vDivs, iDiv) );
134 Counter++;
135 if ( Counter == Vec_VecSize(vResubs) )
136 return Counter;
137 }
138 }
139
140
141 if ( Abc_ObjFaninNum(pWin->pNode) < nFaninsMax )
142 {
143
145 {
146 if ( Abc_ObjFanoutNum(pFanin) > 1 )
147 continue;
148
149 pInfo = Res_FilterCollectFaninInfo( pWin, pSim, ~(1 << i) );
150
151 for ( d = Abc_ObjFaninNum(pWin->pNode) + 2; d < Abc_NtkPoNum(pAig); d++ )
152 {
153 pInfoDiv = (
unsigned *)Vec_PtrEntry( pSim->
vOuts, d );
154 iDiv = d - (Abc_ObjFaninNum(pWin->pNode) + 2);
155
156 for ( d2 = d + 1; d2 < Abc_NtkPoNum(pAig); d2++ )
157 {
158 pInfoDiv2 = (
unsigned *)Vec_PtrEntry( pSim->
vOuts, d2 );
159 iDiv2 = d2 - (Abc_ObjFaninNum(pWin->pNode) + 2);
160 if ( !Abc_InfoIsOrOne3( pInfo, pInfoDiv, pInfoDiv2, pSim->
nWordsOut ) )
161 continue;
162
163 Vec_VecPush( vResubs, Counter, Abc_NtkPo(pAig,0) );
164 Vec_VecPush( vResubs, Counter, Abc_NtkPo(pAig,1) );
165
167 {
168 if ( k != i )
169 {
170 Vec_VecPush( vResubs, Counter, Abc_NtkPo(pAig,2+k) );
171 Vec_VecPush( vResubsW, Counter, pFaninTemp );
172 }
173 }
174
175 Vec_VecPush( vResubs, Counter, Abc_NtkPo(pAig,d) );
176 Vec_VecPush( vResubs, Counter, Abc_NtkPo(pAig,d2) );
177 Vec_VecPush( vResubsW, Counter, Vec_PtrEntry(pWin->vDivs, iDiv) );
178 Vec_VecPush( vResubsW, Counter, Vec_PtrEntry(pWin->vDivs, iDiv2) );
179 Counter++;
180 if ( Counter == Vec_VecSize(vResubs) )
181 return Counter;
182 }
183 }
184 }
185 }
186
187
188 if ( !fArea )
189 {
191 {
192 for ( i2 = i + 1; i2 < Abc_ObjFaninNum(pWin->pNode); i2++ )
193 {
194 pFanin2 = Abc_ObjFanin(pWin->pNode, i2);
195
196 pInfo = Res_FilterCollectFaninInfo( pWin, pSim, (~(1 << i)) & (~(1 << i2)) );
197
198 for ( d = Abc_ObjFaninNum(pWin->pNode) + 2; d < Abc_NtkPoNum(pAig); d++ )
199 {
200 pInfoDiv = (
unsigned *)Vec_PtrEntry( pSim->
vOuts, d );
201 iDiv = d - (Abc_ObjFaninNum(pWin->pNode) + 2);
202 if ( !Abc_InfoIsOrOne( pInfo, pInfoDiv, pSim->
nWordsOut ) )
203 continue;
204
205 Vec_VecPush( vResubs, Counter, Abc_NtkPo(pAig,0) );
206 Vec_VecPush( vResubs, Counter, Abc_NtkPo(pAig,1) );
207
209 {
210 if ( k != i && k != i2 )
211 {
212 Vec_VecPush( vResubs, Counter, Abc_NtkPo(pAig,2+k) );
213 Vec_VecPush( vResubsW, Counter, pFaninTemp );
214 }
215 }
216
217 Vec_VecPush( vResubs, Counter, Abc_NtkPo(pAig,d) );
218 Vec_VecPush( vResubsW, Counter, Vec_PtrEntry(pWin->vDivs, iDiv) );
219 Counter++;
220 if ( Counter == Vec_VecSize(vResubs) )
221 return Counter;
222 }
223 }
224 }
225 }
226 return Counter;
227}
struct Abc_Obj_t_ Abc_Obj_t
#define Abc_ObjForEachFanin(pObj, pFanin, i)