summaryrefslogtreecommitdiffstats
path: root/src/opt/dau
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2014-02-25 22:41:34 -0800
committerAlan Mishchenko <alanmi@berkeley.edu>2014-02-25 22:41:34 -0800
commitcaa2227b1127802e4b35f296106ca19e113ea601 (patch)
tree9fb8f4f2099f829063e96b1b74ea26c803fa50eb /src/opt/dau
parent15a1c4b96507b524959d171a26b796d6263ea284 (diff)
downloadabc-caa2227b1127802e4b35f296106ca19e113ea601.tar.gz
abc-caa2227b1127802e4b35f296106ca19e113ea601.tar.bz2
abc-caa2227b1127802e4b35f296106ca19e113ea601.zip
Changes to LUT mappers.
Diffstat (limited to 'src/opt/dau')
-rw-r--r--src/opt/dau/dau.h5
-rw-r--r--src/opt/dau/dauNonDsd.c29
2 files changed, 22 insertions, 12 deletions
diff --git a/src/opt/dau/dau.h b/src/opt/dau/dau.h
index dab49bc3..2e56899b 100644
--- a/src/opt/dau/dau.h
+++ b/src/opt/dau/dau.h
@@ -97,6 +97,11 @@ extern void * Dsm_ManDeriveGia( void * p, int fUseMuxes );
extern void Dau_DsdRemoveBraces( char * pDsd, int * pMatches );
extern char * Dau_DsdMerge( char * pDsd0i, int * pPerm0, char * pDsd1i, int * pPerm1, int fCompl0, int fCompl1, int nVars );
+/*=== dauNonDsd.c ==========================================================*/
+extern Vec_Int_t * Dau_DecFindSets( word * pInit, int nVars );
+extern void Dau_DecPrintSets( Vec_Int_t * vSets, int nVars );
+extern void Dau_DecPrintSet( unsigned set, int nVars, int fNewLine );
+
/*=== dauTree.c ==========================================================*/
extern Dss_Man_t * Dss_ManAlloc( int nVars, int nNonDecLimit );
extern void Dss_ManFree( Dss_Man_t * p );
diff --git a/src/opt/dau/dauNonDsd.c b/src/opt/dau/dauNonDsd.c
index e5cc58e1..53eafe92 100644
--- a/src/opt/dau/dauNonDsd.c
+++ b/src/opt/dau/dauNonDsd.c
@@ -459,7 +459,7 @@ void Dau_DecMoveFreeToLSB( word * p, int nVars, int * V2P, int * P2V, int maskB,
Abc_TtMoveVar( p, nVars, V2P, P2V, v, c++ );
assert( c == nVars - sizeB );
}
-Vec_Int_t * Dau_DecFindSets( word * p, int nVars )
+Vec_Int_t * Dau_DecFindSets( word * pInit, int nVars )
{
Vec_Int_t * vSets = Vec_IntAlloc( 32 );
int V2P[16], P2V[16], pVarsB[16];
@@ -467,6 +467,8 @@ Vec_Int_t * Dau_DecFindSets( word * p, int nVars )
int c, v, sizeB, sizeS, maskB, maskS;
int * pSched[16] = {NULL};
unsigned setMixed;
+ word p[1<<10];
+ memcpy( p, pInit, sizeof(word) * Abc_TtWordNum(nVars) );
for ( v = 0; v < nVars; v++ )
assert( Abc_TtHasVar( p, nVars, v ) );
for ( v = 2; v < nVars; v++ )
@@ -703,7 +705,7 @@ int Dau_DecVerify( word * pInit, int nVars, char * pDsdC, char * pDsdD )
printf( "\n" );
return 1;
}
-int Dau_DecPerform( word * p, int nVars, unsigned uSet )
+int Dau_DecPerform6( word * p, int nVars, unsigned uSet )
{
word tComp = 0, tDec = 0, tDec0, tComp0, tComp1, FuncC, FuncD;
char pDsdC[1000], pDsdD[1000];
@@ -760,7 +762,7 @@ int Dau_DecPerform( word * p, int nVars, unsigned uSet )
return 1;
}
-int Dau_DecPerform2( word * pInit, int nVars, unsigned uSet )
+int Dau_DecPerform( word * pInit, int nVars, unsigned uSet )
{
word p[1<<10], pDec[1<<10], pComp[1<<10]; // at most 2^10 words
char pDsdC[5000], pDsdD[5000]; // at most 2^12 hex digits
@@ -820,15 +822,18 @@ int Dau_DecPerform2( word * pInit, int nVars, unsigned uSet )
Dau_DecVerify( pInit, nVars, pDsdC, pDsdD );
return 1;
}
-void Dau_DecTrySets( word * pInit, int nVars )
+void Dau_DecTrySets( word * pInit, int nVars, int fVerbose )
{
- word p[1<<10];
Vec_Int_t * vSets;
int i, Entry;
assert( nVars <= 16 );
- memcpy( p, pInit, sizeof(word) * Abc_TtWordNum(nVars) );
- vSets = Dau_DecFindSets( p, nVars );
- Dau_DsdPrintFromTruth( p, nVars );
+ vSets = Dau_DecFindSets( pInit, nVars );
+ if ( !fVerbose )
+ {
+ Vec_IntFree( vSets );
+ return;
+ }
+ Dau_DsdPrintFromTruth( pInit, nVars );
printf( "This %d-variable function has %d decomposable variable sets:\n", nVars, Vec_IntSize(vSets) );
Vec_IntForEachEntry( vSets, Entry, i )
{
@@ -837,12 +842,12 @@ void Dau_DecTrySets( word * pInit, int nVars )
if ( nVars > 6 )
{
Dau_DecPrintSet( uSet, nVars, 0 );
- Dau_DecPerform2( pInit, nVars, uSet );
+ Dau_DecPerform( pInit, nVars, uSet );
}
else
{
Dau_DecPrintSet( uSet, nVars, 1 );
- Dau_DecPerform( pInit, nVars, uSet );
+ Dau_DecPerform6( pInit, nVars, uSet );
}
}
Vec_IntFree( vSets );
@@ -860,7 +865,7 @@ void Dau_DecFindSetsTest3()
// char * pStr = "Abcd";
// char * pStr = "ab";
unsigned uSet = Dau_DecReadSet( pStr );
- Dau_DecPerform( &t, nVars, uSet );
+ Dau_DecPerform6( &t, nVars, uSet );
}
void Dau_DecFindSetsTest()
@@ -879,7 +884,7 @@ void Dau_DecFindSetsTest()
// word t = ABC_CONST(0x2B0228022B022802); // 5-var non-dec0x0F7700000F770000
// word t = ABC_CONST(0x0F7700000F770000); // (!<(ab)cd>e)
// word t = ABC_CONST(0x7F00000000000000); // (!(abc)def)
- Dau_DecTrySets( &t, nVars );
+ Dau_DecTrySets( &t, nVars, 1 );
}