summaryrefslogtreecommitdiffstats
path: root/src/aig
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2012-10-28 16:16:34 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2012-10-28 16:16:34 -0700
commitc73c37a99d5db520d724c97f6397e5a5bc0bc6ca (patch)
treef0f0cf968d721e4efd271b0d539060aa727254df /src/aig
parent4e52703b8a515acea395e2221ba552286ba302d6 (diff)
downloadabc-c73c37a99d5db520d724c97f6397e5a5bc0bc6ca.tar.gz
abc-c73c37a99d5db520d724c97f6397e5a5bc0bc6ca.tar.bz2
abc-c73c37a99d5db520d724c97f6397e5a5bc0bc6ca.zip
Improvements to LMS code.
Diffstat (limited to 'src/aig')
-rw-r--r--src/aig/gia/gia.h8
-rw-r--r--src/aig/gia/giaScl.c26
2 files changed, 34 insertions, 0 deletions
diff --git a/src/aig/gia/gia.h b/src/aig/gia/gia.h
index 07bdff94..35d80047 100644
--- a/src/aig/gia/gia.h
+++ b/src/aig/gia/gia.h
@@ -482,6 +482,13 @@ static inline int Gia_ManAppendXor( Gia_Man_t * p, int iLit0, int iLit1 )
{
return Gia_ManAppendMux( p, iLit0, Abc_LitNot(iLit1), iLit1 );
}
+static inline void Gia_ManPatchCoDriver( Gia_Man_t * p, int iCoIndex, int iLit0 )
+{
+ Gia_Obj_t * pObjCo = Gia_ManCo( p, iCoIndex );
+ assert( Gia_ObjId(p, pObjCo) > Abc_Lit2Var(iLit0) );
+ pObjCo->iDiff0 = Gia_ObjId(p, pObjCo) - Abc_Lit2Var(iLit0);
+ pObjCo->fCompl0 = Abc_LitIsCompl(iLit0);
+}
#define GIA_ZER 1
#define GIA_ONE 2
@@ -863,6 +870,7 @@ extern int Sat_ManTest( Gia_Man_t * pGia, Gia_Obj_t * pObj, int
extern int Gia_ManSeqMarkUsed( Gia_Man_t * p );
extern int Gia_ManCombMarkUsed( Gia_Man_t * p );
extern Gia_Man_t * Gia_ManCleanup( Gia_Man_t * p );
+extern Gia_Man_t * Gia_ManCleanupOutputs( Gia_Man_t * p, int nOutputs );
extern Gia_Man_t * Gia_ManSeqCleanup( Gia_Man_t * p );
extern Gia_Man_t * Gia_ManSeqStructSweep( Gia_Man_t * p, int fConst, int fEquiv, int fVerbose );
/*=== giaShrink.c ===========================================================*/
diff --git a/src/aig/gia/giaScl.c b/src/aig/gia/giaScl.c
index 0aa255db..9b4c1c3e 100644
--- a/src/aig/gia/giaScl.c
+++ b/src/aig/gia/giaScl.c
@@ -94,6 +94,32 @@ Gia_Man_t * Gia_ManCleanup( Gia_Man_t * p )
return Gia_ManDupMarked( p );
}
+/**Function*************************************************************
+
+ Synopsis [Skip the first outputs during cleanup.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Gia_Man_t * Gia_ManCleanupOutputs( Gia_Man_t * p, int nOutputs )
+{
+ Gia_Obj_t * pObj;
+ int i;
+ assert( Gia_ManRegNum(p) == 0 );
+ assert( nOutputs < Gia_ManCoNum(p) );
+ Gia_ManCombMarkUsed( p );
+ Gia_ManForEachCo( p, pObj, i )
+ if ( i < nOutputs )
+ pObj->fMark0 = 1;
+ else
+ break;
+ return Gia_ManDupMarked( p );
+}
+
/**Function*************************************************************