diff options
Diffstat (limited to 'src/temp/aig')
-rw-r--r-- | src/temp/aig/aig.h | 2 | ||||
-rw-r--r-- | src/temp/aig/aigDfs.c | 9 | ||||
-rw-r--r-- | src/temp/aig/aigMan.c | 1 | ||||
-rw-r--r-- | src/temp/aig/aigOper.c | 8 |
4 files changed, 14 insertions, 6 deletions
diff --git a/src/temp/aig/aig.h b/src/temp/aig/aig.h index e489d978..5166d0c3 100644 --- a/src/temp/aig/aig.h +++ b/src/temp/aig/aig.h @@ -137,7 +137,7 @@ static inline int Aig_ManObjNum( Aig_Man_t * p ) { return p->nC static inline Aig_Type_t Aig_ObjType( Aig_Obj_t * pObj ) { return pObj->Type; } static inline int Aig_ObjIsNone( Aig_Obj_t * pObj ) { return pObj->Type == AIG_NONE; } -static inline int Aig_ObjIsConst1( Aig_Obj_t * pObj ) { return pObj->Type == AIG_CONST1; } +static inline int Aig_ObjIsConst1( Aig_Obj_t * pObj ) { assert(!Aig_IsComplement(pObj)); return pObj->Type == AIG_CONST1; } static inline int Aig_ObjIsPi( Aig_Obj_t * pObj ) { return pObj->Type == AIG_PI; } static inline int Aig_ObjIsPo( Aig_Obj_t * pObj ) { return pObj->Type == AIG_PO; } static inline int Aig_ObjIsAnd( Aig_Obj_t * pObj ) { return pObj->Type == AIG_AND; } diff --git a/src/temp/aig/aigDfs.c b/src/temp/aig/aigDfs.c index e289f6ec..2fe8b2ef 100644 --- a/src/temp/aig/aigDfs.c +++ b/src/temp/aig/aigDfs.c @@ -325,9 +325,12 @@ Aig_Obj_t * Aig_Transfer( Aig_Man_t * pSour, Aig_Man_t * pDest, Aig_Obj_t * pRoo if ( Aig_ObjIsConst1( Aig_Regular(pRoot) ) ) return Aig_NotCond( Aig_ManConst1(pDest), Aig_IsComplement(pRoot) ); // set the PI mapping - Aig_ManForEachPi( pDest, pObj, i ) - if ( i < nVars ) - Aig_IthVar(pSour, i)->pData = Aig_IthVar(pDest, i); + Aig_ManForEachPi( pSour, pObj, i ) + { + if ( i == nVars ) + break; + pObj->pData = Aig_IthVar(pDest, i); + } // transfer and set markings Aig_Transfer_rec( pDest, Aig_Regular(pRoot) ); // clear the markings diff --git a/src/temp/aig/aigMan.c b/src/temp/aig/aigMan.c index af6df62d..bb39712f 100644 --- a/src/temp/aig/aigMan.c +++ b/src/temp/aig/aigMan.c @@ -56,6 +56,7 @@ Aig_Man_t * Aig_ManStart() Aig_ManStartMemory( p ); // create the constant node p->pConst1 = Aig_ManFetchMemory( p ); + p->pConst1->Type = AIG_CONST1; p->pConst1->fPhase = 1; p->nCreated = 1; // start the table diff --git a/src/temp/aig/aigOper.c b/src/temp/aig/aigOper.c index cad240ae..9985093e 100644 --- a/src/temp/aig/aigOper.c +++ b/src/temp/aig/aigOper.c @@ -183,6 +183,7 @@ Aig_Obj_t * Aig_Or( 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 ) { +/* Aig_Obj_t * pTempA1, * pTempA2, * pTempB1, * pTempB2, * pTemp; int Count0, Count1; // consider trivial cases @@ -190,6 +191,9 @@ Aig_Obj_t * Aig_Mux( Aig_Man_t * p, Aig_Obj_t * pC, Aig_Obj_t * p1, Aig_Obj_t * return Aig_Exor( p, pC, p0 ); // other cases can be added // implement the first MUX (F = C * x1 + C' * x0) + + // check for constants here!!! + pTempA1 = Aig_TableLookup( p, Aig_ObjCreateGhost(p, pC, p1, AIG_AND) ); pTempA2 = Aig_TableLookup( p, Aig_ObjCreateGhost(p, Aig_Not(pC), p0, AIG_AND) ); if ( pTempA1 && pTempA2 ) @@ -217,8 +221,8 @@ Aig_Obj_t * Aig_Mux( Aig_Man_t * p, Aig_Obj_t * pC, Aig_Obj_t * p1, Aig_Obj_t * pTempB1 = pTempB1? pTempB1 : Aig_And(p, pC, Aig_Not(p1)); pTempB2 = pTempB2? pTempB2 : Aig_And(p, Aig_Not(pC), Aig_Not(p0)); return Aig_Not( Aig_Or( p, pTempB1, pTempB2 ) ); - -// return Aig_Or( Aig_And(pC, p1), Aig_And(Aig_Not(pC), p0) ); +*/ + return Aig_Or( p, Aig_And(p, pC, p1), Aig_And(p, Aig_Not(pC), p0) ); } /**Function************************************************************* |