summaryrefslogtreecommitdiffstats
path: root/src/aig
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2012-02-17 13:19:09 -0800
committerAlan Mishchenko <alanmi@berkeley.edu>2012-02-17 13:19:09 -0800
commitee9f66e2c4dba55e5ab4c7ce16223054b291d5fb (patch)
tree4bbd0d53e29589963f061a0cb5a965dd8efe57e7 /src/aig
parentf2a413029ca91c8fadf8b23d8eb5b4ab2dc8aea4 (diff)
downloadabc-ee9f66e2c4dba55e5ab4c7ce16223054b291d5fb.tar.gz
abc-ee9f66e2c4dba55e5ab4c7ce16223054b291d5fb.tar.bz2
abc-ee9f66e2c4dba55e5ab4c7ce16223054b291d5fb.zip
Isomorphism checking code.
Diffstat (limited to 'src/aig')
-rw-r--r--src/aig/saig/saig.h2
-rw-r--r--src/aig/saig/saigIso.c21
2 files changed, 15 insertions, 8 deletions
diff --git a/src/aig/saig/saig.h b/src/aig/saig/saig.h
index 218cb31c..8fde2ef6 100644
--- a/src/aig/saig/saig.h
+++ b/src/aig/saig/saig.h
@@ -185,7 +185,7 @@ extern Aig_Man_t * Saig_ManReadBlif( char * pFileName );
/*=== saigIso.c ==========================================================*/
extern Vec_Int_t * Saig_ManFindIsoPerm( Aig_Man_t * pAig, int fVerbose );
extern Aig_Man_t * Saig_ManDupIsoCanonical( Aig_Man_t * pAig, int fVerbose );
-extern Aig_Man_t * Saig_ManIsoReduce( Aig_Man_t * pAig, int fVerbose );
+extern Aig_Man_t * Saig_ManIsoReduce( Aig_Man_t * pAig, Vec_Ptr_t ** pvPosEquivs, int fVerbose );
/*=== saigIsoFast.c ==========================================================*/
extern Vec_Vec_t * Saig_IsoDetectFast( Aig_Man_t * pAig );
/*=== saigMiter.c ==========================================================*/
diff --git a/src/aig/saig/saigIso.c b/src/aig/saig/saigIso.c
index 0e7c9de1..ff10df82 100644
--- a/src/aig/saig/saigIso.c
+++ b/src/aig/saig/saigIso.c
@@ -362,8 +362,8 @@ Aig_Man_t * Iso_ManFilterPos_old( Aig_Man_t * pAig, int fVerbose )
{
if ( fVeryVerbose )
printf( "Found match\n" );
- if ( fVerbose )
- printf( "Found match for AIG %4d and AIG %4d.\n", Vec_IntEntry(vPos,k), i );
+// if ( fVerbose )
+// printf( "Found match for AIG %4d and AIG %4d.\n", Vec_IntEntry(vPos,k), i );
Vec_IntFree( vMap );
break;
}
@@ -419,7 +419,7 @@ int Iso_StoCompareVecStr( Vec_Str_t ** p1, Vec_Str_t ** p2 )
SeeAlso []
***********************************************************************/
-Aig_Man_t * Iso_ManFilterPos( Aig_Man_t * pAig, int fVerbose )
+Aig_Man_t * Iso_ManFilterPos( Aig_Man_t * pAig, Vec_Ptr_t ** pvPosEquivs, int fVerbose )
{
// int fVeryVerbose = 0;
Aig_Man_t * pPart, * pTemp;
@@ -492,6 +492,7 @@ Aig_Man_t * Iso_ManFilterPos( Aig_Man_t * pAig, int fVerbose )
// report the results
// Vec_VecPrintInt( (Vec_Vec_t *)vClasses );
// printf( "Devided %d outputs into %d cand equiv classes.\n", Saig_ManPoNum(pAig), Vec_PtrSize(vClasses) );
+/*
if ( fVerbose )
{
Vec_PtrForEachEntry( Vec_Int_t *, vClasses, vLevel, i )
@@ -501,7 +502,7 @@ Aig_Man_t * Iso_ManFilterPos( Aig_Man_t * pAig, int fVerbose )
nUnique++;
printf( " Unique = %d\n", nUnique );
}
-
+*/
// collect the first ones
vRemain = Vec_IntAlloc( 100 );
Vec_PtrForEachEntry( Vec_Int_t *, vClasses, vLevel, i )
@@ -512,7 +513,13 @@ Aig_Man_t * Iso_ManFilterPos( Aig_Man_t * pAig, int fVerbose )
Vec_IntFree( vRemain );
// return (Vec_Vec_t *)vClasses;
- Vec_VecFree( (Vec_Vec_t *)vClasses );
+// Vec_VecFree( (Vec_Vec_t *)vClasses );
+ *pvPosEquivs = vClasses;
+ if ( fVerbose && vClasses )
+ {
+ printf( "Non-trivial equivalence clases of primary outputs:\n" );
+ Vec_VecPrintInt( (Vec_Vec_t *)vClasses, 1 );
+ }
// printf( "The number of all checks %d. Complex checks %d.\n", nPos*(nPos-1)/2, s_Counter );
return pPart;
@@ -550,11 +557,11 @@ Aig_Man_t * Iso_ManTest( Aig_Man_t * pAig, int fVerbose )
SeeAlso []
***********************************************************************/
-Aig_Man_t * Saig_ManIsoReduce( Aig_Man_t * pAig, int fVerbose )
+Aig_Man_t * Saig_ManIsoReduce( Aig_Man_t * pAig, Vec_Ptr_t ** pvPosEquivs, int fVerbose )
{
Aig_Man_t * pPart;
int clk = clock();
- pPart = Iso_ManFilterPos( pAig, fVerbose );
+ pPart = Iso_ManFilterPos( pAig, pvPosEquivs, fVerbose );
printf( "Reduced %d outputs to %d outputs. ", Saig_ManPoNum(pAig), Saig_ManPoNum(pPart) );
Abc_PrintTime( 1, "Time", clock() - clk );
// Aig_ManStop( pPart );