48 if ( Aig_IsComplement(pObj) || Aig_ObjIsCi(pObj) )
50 Vec_PtrPushUnique( vImplics, pObj );
73 vImplics = Vec_PtrAlloc( 100 );
91 if ( Aig_ObjIsTravIdPrevious(
p, pNode ) )
93 if ( Aig_ObjIsTravIdCurrent(
p, pNode ) )
95 Aig_ObjSetTravIdCurrent(
p, pNode );
96 if ( Aig_ObjIsCi(pNode) )
120 assert( !Aig_IsComplement(pNode) );
121 assert( !Aig_ObjIsConst1(pNode) );
124 Aig_ObjSetTravIdCurrent(
p, Aig_Regular(pTemp) );
142 if ( Aig_ObjIsTravIdCurrent(
p, pNode ) )
144 Aig_ObjSetTravIdCurrent(
p, pNode );
145 if ( Aig_ObjIsCi(pNode) )
167 assert( !Aig_IsComplement(pNode) );
168 assert( !Aig_ObjIsConst1(pNode) );
172 Aig_ObjSetTravIdCurrent(
p, Aig_Regular(pTemp) );
173 Aig_Regular(pTemp)->pData = Aig_NotCond( Aig_ManConst1(
p), Aig_IsComplement(pTemp) );
195 if ( Aig_ObjIsConst1(Aig_ObjFanin0(pPoA)) || Aig_ObjIsConst1(Aig_ObjFanin0(pPoB)) )
197 if ( Aig_ObjIsCi(Aig_ObjFanin0(pPoB)) )
200 pNodeA = Aig_ObjChild0( pPoA );
201 pNodeA = Aig_NotCond( pNodeA, Value==0 );
208 Vec_PtrFree( vImplics );
213 pNodeC = Aig_NotCond( pNodeC, Aig_ObjFaninC0(pPoB) );
214 Vec_PtrFree( vImplics );
232 assert( iPoA >= 0 && iPoA < Aig_ManCoNum(
p) );
233 assert( iPoB >= 0 && iPoB < Aig_ManCoNum(
p) );
234 assert( Value == 0 || Value == 1 );
291 unsigned * uFunc = NULL, * uCare, * uFunc0, * uFunc1;
292 unsigned * uCof0, * uCof1, * uCare0, * uCare1;
293 int i,
nWords = Abc_TruthWordNum( Vec_PtrSize(vSupp) );
295 vTrSupp = Vec_PtrAllocTruthTables( Vec_PtrSize(vSupp) );
297 pObj->
pData = Vec_PtrEntry( vTrSupp, i );
299 vTrNode = Vec_PtrAllocSimInfo( Vec_PtrSize(vNodes) + 5,
nWords );
302 pObj->
pData = uFunc = (
unsigned *)Vec_PtrEntry( vTrNode, i );
303 uFunc0 = (
unsigned *)Aig_ObjFanin0(pObj)->pData;
304 uFunc1 = (
unsigned *)Aig_ObjFanin1(pObj)->pData;
305 Kit_TruthAndPhase( uFunc, uFunc0, uFunc1, Vec_PtrSize(vSupp), Aig_ObjFaninC0(pObj), Aig_ObjFaninC1(pObj) );
309 uCare = (
unsigned *)Vec_PtrEntry( vTrNode, Vec_PtrSize(vNodes) );
310 Kit_TruthClear( uCare, Vec_PtrSize(vSupp) );
312 Kit_TruthOrPhase( uCare, uCare, (
unsigned *)Aig_Regular(pObj)->pData, Vec_PtrSize(vSupp), 0, Aig_IsComplement(pObj) );
314 vCofs = Vec_PtrAlloc( 10 );
315 uCof0 = (
unsigned *)Vec_PtrEntry( vTrNode, Vec_PtrSize(vNodes)+1 );
316 uCof1 = (
unsigned *)Vec_PtrEntry( vTrNode, Vec_PtrSize(vNodes)+2 );
317 uCare0 = (
unsigned *)Vec_PtrEntry( vTrNode, Vec_PtrSize(vNodes)+3 );
318 uCare1 = (
unsigned *)Vec_PtrEntry( vTrNode, Vec_PtrSize(vNodes)+4 );
325 if ( Kit_TruthIsEqualWithCare( uCof0, uCof1, uCare1, Vec_PtrSize(vSupp) ) )
326 Vec_PtrPush( vCofs, Aig_Not(pObj) );
327 else if ( Kit_TruthIsEqualWithCare( uCof0, uCof1, uCare0, Vec_PtrSize(vSupp) ) )
328 Vec_PtrPush( vCofs, pObj );
330 Vec_PtrFree( vTrNode );
331 Vec_PtrFree( vTrSupp );
354 assert( !Aig_IsComplement(pObj) );
359 Aig_Regular(pObj)->
pData = Aig_NotCond( Aig_ManConst1(
p), Aig_IsComplement(pObj) );
362 pObj->
pData =
Aig_And(
p, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj) );
383 Aig_ObjSetTravIdCurrent(
p, pObj );
385 if ( !Aig_ObjIsTravIdCurrent(
p, Aig_Regular(pObj) ) )
407 vSupp = Vec_PtrAlloc( 4 );
410 assert( Aig_ObjIsTravIdCurrent(
p, pObj) );
411 assert( Aig_ObjIsNode(pObj) );
412 pFanin = Aig_ObjFanin0( pObj );
413 if ( !Aig_ObjIsTravIdCurrent(
p, pFanin) )
415 Aig_ObjSetTravIdCurrent(
p, pFanin );
416 Vec_PtrPush( vSupp, pFanin );
418 pFanin = Aig_ObjFanin1( pObj );
419 if ( !Aig_ObjIsTravIdCurrent(
p, pFanin) )
421 Aig_ObjSetTravIdCurrent(
p, pFanin );
422 Vec_PtrPush( vSupp, pFanin );
441 if ( Aig_ObjIsTravIdCurrent(
p, pObj ) )
443 if ( !Aig_ObjIsTravIdPrevious(
p, pObj ) )
445 assert( Aig_ObjIsTravIdPrevious(
p, pObj) );
446 assert( Aig_ObjIsNode(pObj) );
447 Aig_ObjSetTravIdCurrent(
p, pObj );
450 Vec_PtrPush( vNodes, pObj );
467 assert( !Aig_IsComplement(pRoot) );
469 vNodes = Vec_PtrAlloc( 4 );
489 if ( Aig_ObjIsTravIdCurrent(
p, pObj ) )
491 if ( Aig_ObjIsTravIdPrevious(
p, pObj ) )
493 Aig_ObjSetTravIdPrevious(
p, pObj );
494 if ( Aig_ObjIsCi(pObj) )
500 Aig_ObjSetTravIdCurrent(
p, pObj );
519 assert( !Aig_IsComplement(pRoot) );
523 Aig_ObjSetTravIdCurrent(
p, Aig_Regular(pLeaf) );
526 Aig_ObjSetTravIdPrevious(
p, Aig_Regular(pLeaf) );
545 if ( Aig_IsComplement(pObj) || Aig_ObjIsCi(pObj) )
547 Vec_PtrPushUnique( vSuper, Aig_Not(pObj) );
569 assert( !Aig_IsComplement(pObj) );
570 assert( !Aig_ObjIsCi(pObj) );
571 vSuper = Vec_PtrAlloc( 4 );
595 Vec_Ptr_t * vOrGate, * vNodes, * vSupp, * vCofs;
600 if ( !Aig_IsComplement(pCond) || Aig_ObjIsCi(Aig_Regular(pCond)) || Aig_ObjIsConst1(Aig_Regular(pCond)) )
606 if ( !Aig_ObjIsNode(Aig_Regular(pFunc)) )
613 if ( Vec_PtrSize(vOrGate) >
nSuppMax )
615 Vec_PtrFree( vOrGate );
623 Vec_PtrFree( vOrGate );
631 if ( Vec_PtrSize(vSupp) >
nSuppMax )
633 Vec_PtrFree( vOrGate );
634 Vec_PtrFree( vNodes );
635 Vec_PtrFree( vSupp );
643 Vec_PtrFree( vOrGate );
644 Vec_PtrFree( vNodes );
645 Vec_PtrFree( vSupp );
652 if ( Vec_PtrSize(vCofs) == 0 )
654 Vec_PtrFree( vCofs );
655 Vec_PtrFree( vOrGate );
656 Vec_PtrFree( vNodes );
657 Vec_PtrFree( vSupp );
663 pResult = Aig_NotCond( pResult, Aig_IsComplement(pFunc) );
664 Vec_PtrFree( vCofs );
665 Vec_PtrFree( vOrGate );
666 Vec_PtrFree( vNodes );
667 Vec_PtrFree( vSupp );
687 for ( i = 0; i < 5; i++ )
696 Aig_ObjPrint(
p, Aig_ObjFanin0(Aig_Regular(pRes)) ); printf(
"\n" );
697 Aig_ObjPrint(
p, Aig_ObjFanin1(Aig_Regular(pRes)) ); printf(
"\n" );
704 Aig_Obj_t * node09, * node10, * node11, * node12, * node13, * pRes;
707 for ( i = 0; i < 3; i++ )
720 printf(
"Compl = %d ", Aig_IsComplement(pRes) );
722 if ( Aig_ObjIsNode(Aig_Regular(pRes)) )
724 Aig_ObjPrint(
p, Aig_ObjFanin0(Aig_Regular(pRes)) ); printf(
"\n" );
725 Aig_ObjPrint(
p, Aig_ObjFanin1(Aig_Regular(pRes)) ); printf(
"\n" );
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
Aig_Obj_t * Aig_ManFactorAlgebraic(Aig_Man_t *p, int iPoA, int iPoB, int Value)
void Aig_SuppMinCollectSuper_rec(Aig_Obj_t *pObj, Vec_Ptr_t *vSuper)
Vec_Ptr_t * Aig_SuppMinCollectSupport(Aig_Man_t *p, Vec_Ptr_t *vNodes)
void Aig_SuppMinCollectCone_rec(Aig_Man_t *p, Aig_Obj_t *pObj, Vec_Ptr_t *vNodes)
void Aig_ManFactorAlgebraicTest(Aig_Man_t *p)
Aig_Obj_t * Aig_ManDeriveNewCone_rec(Aig_Man_t *p, Aig_Obj_t *pNode)
int Aig_ManFindConeOverlap(Aig_Man_t *p, Vec_Ptr_t *vImplics, Aig_Obj_t *pNode)
int Aig_SuppMinHighlightCone(Aig_Man_t *p, Aig_Obj_t *pRoot, Vec_Ptr_t *vOrGate)
void Aig_ManSupportMinimizationTest()
int Aig_ManFindConeOverlap_rec(Aig_Man_t *p, Aig_Obj_t *pNode)
Vec_Ptr_t * Aig_ManFindImplications(Aig_Man_t *p, Aig_Obj_t *pNode)
Vec_Ptr_t * Aig_SuppMinCollectCone(Aig_Man_t *p, Aig_Obj_t *pRoot)
Aig_Obj_t * Aig_SuppMinReconstruct(Aig_Man_t *p, Vec_Ptr_t *vCofs, Vec_Ptr_t *vNodes, Vec_Ptr_t *vSupp)
Aig_Obj_t * Aig_ManDeriveNewCone(Aig_Man_t *p, Vec_Ptr_t *vImplics, Aig_Obj_t *pNode)
int Aig_SuppMinGateIsInSupport(Aig_Man_t *p, Vec_Ptr_t *vOrGate, Vec_Ptr_t *vSupp)
Vec_Ptr_t * Aig_SuppMinPerform(Aig_Man_t *p, Vec_Ptr_t *vOrGate, Vec_Ptr_t *vNodes, Vec_Ptr_t *vSupp)
Vec_Ptr_t * Aig_SuppMinCollectSuper(Aig_Obj_t *pObj)
void Aig_ManSupportMinimizationTest2()
ABC_NAMESPACE_IMPL_START void Aig_ManFindImplications_rec(Aig_Obj_t *pObj, Vec_Ptr_t *vImplics)
DECLARATIONS ///.
Aig_Obj_t * Aig_ManFactorAlgebraic_int(Aig_Man_t *p, Aig_Obj_t *pPoA, Aig_Obj_t *pPoB, int Value)
int Aig_SuppMinHighlightCone_rec(Aig_Man_t *p, Aig_Obj_t *pObj)
Aig_Obj_t * Aig_ManSupportMinimization(Aig_Man_t *p, Aig_Obj_t *pCond, Aig_Obj_t *pFunc, int *pStatus)
void Aig_ManStop(Aig_Man_t *p)
void Aig_ManIncrementTravId(Aig_Man_t *p)
DECLARATIONS ///.
Aig_Obj_t * Aig_And(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
Aig_Obj_t * Aig_Mux(Aig_Man_t *p, Aig_Obj_t *pC, Aig_Obj_t *p1, Aig_Obj_t *p0)
struct Aig_Obj_t_ Aig_Obj_t
Aig_Man_t * Aig_ManStart(int nNodesMax)
DECLARATIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
Aig_Obj_t * Aig_IthVar(Aig_Man_t *p, int i)
FUNCTION DEFINITIONS ///.
Aig_Obj_t * Aig_Or(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
void Aig_ManShow(Aig_Man_t *pMan, int fHaig, Vec_Ptr_t *vBold)
void Aig_ObjPrint(Aig_Man_t *p, Aig_Obj_t *pObj)
void Kit_TruthCofactor1New(unsigned *pOut, unsigned *pIn, int nVars, int iVar)
void Kit_TruthCofactor0New(unsigned *pOut, unsigned *pIn, int nVars, int iVar)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.