106 if ( Aig_ObjIsConst1(pNode) )
108 if ( Aig_ObjIsTravIdCurrent(pAig, pNode) )
109 return ((
int)pNode->
fMarkA == Value);
110 Aig_ObjSetTravIdCurrent(pAig, pNode);
112 if ( Aig_ObjIsCi(pNode) )
117 Vec_IntPush( vSuppLits, Abc_Var2Lit( Aig_ObjCioId(pNode), !Value ) );
120 assert( Aig_ObjIsNode(pNode) );
129 Value0 = Aig_ObjSatValue( pAig, Aig_ObjFanin0(pNode), Aig_ObjFaninC0(pNode) );
132 Value1 = Aig_ObjSatValue( pAig, Aig_ObjFanin1(pNode), Aig_ObjFaninC1(pNode) );
145 if ( ++Heur % 8 == 0 )
191 if ( Aig_ObjIsConst1(pNode) )
193 if ( Aig_ObjIsTravIdCurrent(pAig, pNode) )
194 return Aig_ObjGetTerValue( pNode );
195 Aig_ObjSetTravIdCurrent( pAig, pNode );
196 if ( Aig_ObjIsCi(pNode) )
197 return Aig_ObjSetTerValue( pNode,
AIG_VALX );
198 Value0 = Aig_ObjNotCondTerValue(
Aig_ObjTerSimulate_rec(pAig, Aig_ObjFanin0(pNode)), Aig_ObjFaninC0(pNode) );
199 if ( Aig_ObjIsCo(pNode) || Value0 ==
AIG_VAL0 )
200 return Aig_ObjSetTerValue( pNode, Value0 );
201 assert( Aig_ObjIsNode(pNode) );
202 Value1 = Aig_ObjNotCondTerValue(
Aig_ObjTerSimulate_rec(pAig, Aig_ObjFanin1(pNode)), Aig_ObjFaninC1(pNode) );
203 return Aig_ObjSetTerValue( pNode, Aig_ObjAndTerValue(Value0, Value1) );
258 int Count0 = 0, Count0f = 0, Count1 = 0, Count1f = 0;
260 vSuppLits = Vec_IntAlloc( 100 );
274 nTotalLits += Vec_IntSize(vSuppLits);
288 nTotalLits += Vec_IntSize(vSuppLits);
295 Vec_IntFree( vSuppLits );
296 printf(
"PO =%6d. C0 =%6d. C0f =%6d. C1 =%6d. C1f =%6d. (%6.2f %%) Ave =%4.1f ",
297 Aig_ManCoNum(
pAig), Count0, Count0f, Count1, Count1f, 100.0*(Count0+Count1)/Aig_ManCoNum(
pAig), 1.0*nTotalLits/(Count0+Count1) );
298 Abc_PrintTime( 1,
"T", Abc_Clock() - clk );
301 Vec_IntFree( vNodes );