From aa4cada26820387ecf5ec42bdb58fbe765c16705 Mon Sep 17 00:00:00 2001 From: Alan Mishchenko Date: Wed, 8 Feb 2023 14:49:42 -0800 Subject: [PATCH] Experiments with multiplier generation (linker problem). --- src/aig/gia/gia.h | 1 + src/aig/gia/giaDup.c | 83 ++++++++++++++++++++++++++++++++++++++++++++ src/base/abci/abc.c | 1 - src/base/wlc/wlc.c | 83 -------------------------------------------- 4 files changed, 84 insertions(+), 84 deletions(-) diff --git a/src/aig/gia/gia.h b/src/aig/gia/gia.h index 942c9eb73..93917dd15 100644 --- a/src/aig/gia/gia.h +++ b/src/aig/gia/gia.h @@ -1379,6 +1379,7 @@ extern Gia_Man_t * Gia_ManDupDemiter( Gia_Man_t * p, int fVerbose ); extern Gia_Man_t * Gia_ManDemiterToDual( Gia_Man_t * p ); extern int Gia_ManDemiterDual( Gia_Man_t * p, Gia_Man_t ** pp0, Gia_Man_t ** pp1 ); extern int Gia_ManDemiterTwoWords( Gia_Man_t * p, Gia_Man_t ** pp0, Gia_Man_t ** pp1 ); +extern void Gia_ManProdAdderGen( int nArgA, int nArgB, int Seed, int fSigned, int fCla ); /*=== giaEdge.c ==========================================================*/ extern void Gia_ManEdgeFromArray( Gia_Man_t * p, Vec_Int_t * vArray ); extern Vec_Int_t * Gia_ManEdgeToArray( Gia_Man_t * p ); diff --git a/src/aig/gia/giaDup.c b/src/aig/gia/giaDup.c index 425dfd3f7..75efb9e92 100644 --- a/src/aig/gia/giaDup.c +++ b/src/aig/gia/giaDup.c @@ -5449,6 +5449,89 @@ Gia_Man_t * Gia_ManDupWithCare( Gia_Man_t * p, Gia_Man_t * pCare ) return pNew; } +/**Function************************************************************* + + Synopsis [] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +void Gia_ManProdAdderGen( int nArgA, int nArgB, int Seed, int fSigned, int fCla ) +{ + extern void Wlc_BlastReduceMatrix( Gia_Man_t * pNew, Vec_Wec_t * vProds, Vec_Wec_t * vLevels, Vec_Int_t * vRes, int fSigned, int fCla ); + int i, k, x, fCompl, iLit; char pNameP[32], pNameT[32]; + Vec_Wec_t * vProds = Vec_WecStart( nArgA + nArgB ); + Vec_Wec_t * vLevels = Vec_WecStart( nArgA + nArgB ); + Vec_Int_t * vRes = Vec_IntAlloc( nArgA + nArgB ); + Vec_Int_t * vArgA = Vec_IntAlloc( nArgA ); + Vec_Int_t * vArgB = Vec_IntAlloc( nArgB ), * vLevel; + Gia_Man_t * pProd = Gia_ManStart( 1000 ); + Gia_Man_t * pTree = Gia_ManStart( 1000 ), * pTemp; + Gia_ManHashAlloc( pTree ); + pProd->pName = Abc_UtilStrsav( "prod" ); + pTree->pName = Abc_UtilStrsav( "tree" ); + for ( x = 0; x < nArgA; x++ ) + Vec_IntPush( vArgA, Gia_ManAppendCi(pProd) ); + for ( x = 0; x < nArgB; x++ ) + Vec_IntPush( vArgB, Gia_ManAppendCi(pProd) ); + for ( x = 0; x < nArgA + nArgB; x++ ) + { + for ( i = 0; i < nArgA; i++ ) + for ( k = 0; k < nArgB; k++ ) + { + if ( i + k != x ) + continue; + fCompl = fSigned && ((i == nArgA-1) ^ (k == nArgB-1)); + iLit = Abc_LitNotCond(Gia_ManAppendAnd(pProd, Vec_IntEntry(vArgA, i), Vec_IntEntry(vArgB, k)), fCompl); + Gia_ManAppendCo( pProd, iLit ); + Vec_WecPush( vProds, i+k, Gia_ManAppendCi(pTree) ); + Vec_WecPush( vLevels, i+k, 0 ); + } + } + if ( fSigned ) + { + Vec_WecPush( vProds, nArgA, 1 ); + Vec_WecPush( vLevels, nArgA, 0 ); + + Vec_WecPush( vProds, nArgA+nArgB-1, 1 ); + Vec_WecPush( vLevels, nArgA+nArgB-1, 0 ); + } + if ( Seed ) + { + Abc_Random( 1 ); + for ( x = 0; x < Seed; x++ ) + Abc_Random( 0 ); + Vec_WecForEachLevel( vProds, vLevel, x ) + if ( Vec_IntSize(vLevel) > 1 ) + Vec_IntRandomizeOrder( vLevel ); + } + Wlc_BlastReduceMatrix( pTree, vProds, vLevels, vRes, fSigned, fCla ); + Vec_IntShrink( vRes, nArgA + nArgB ); + assert( Vec_IntSize(vRes) == nArgA + nArgB ); + Vec_IntForEachEntry( vRes, iLit, x ) + Gia_ManAppendCo( pTree, iLit ); + pTree = Gia_ManCleanup( pTemp = pTree ); + Gia_ManStop( pTemp ); + + sprintf( pNameP, "prod%d%d.aig", nArgA, nArgB ); + sprintf( pNameT, "tree%d%d.aig", nArgA, nArgB ); + Gia_AigerWrite( pProd, pNameP, 0, 0, 0 ); + Gia_AigerWrite( pTree, pNameT, 0, 0, 0 ); + Gia_ManStop( pProd ); + Gia_ManStop( pTree ); + printf( "Dumped files \"%s\" and \"%s\".\n", pNameP, pNameT ); + + Vec_WecFree( vProds ); + Vec_WecFree( vLevels ); + Vec_IntFree( vArgA ); + Vec_IntFree( vArgB ); + Vec_IntFree( vRes ); +} + //////////////////////////////////////////////////////////////////////// /// END OF FILE /// //////////////////////////////////////////////////////////////////////// diff --git a/src/base/abci/abc.c b/src/base/abci/abc.c index f45e64b50..fc07ab2c4 100644 --- a/src/base/abci/abc.c +++ b/src/base/abci/abc.c @@ -50403,7 +50403,6 @@ usage: ***********************************************************************/ int Abc_CommandAbc9ProdAdd( Abc_Frame_t * pAbc, int argc, char ** argv ) { - extern void Gia_ManProdAdderGen( int nArgA, int nArgB, int Seed, int fSigned, int fCla ); Gia_Man_t * pTemp = NULL; int nArgA = 4; int nArgB = 4; diff --git a/src/base/wlc/wlc.c b/src/base/wlc/wlc.c index 79c816ac8..3ba9be96d 100644 --- a/src/base/wlc/wlc.c +++ b/src/base/wlc/wlc.c @@ -780,89 +780,6 @@ void Wlc_AdderTreeGen( int n ) } } -/**Function************************************************************* - - Synopsis [] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Gia_ManProdAdderGen( int nArgA, int nArgB, int Seed, int fSigned, int fCla ) -{ - extern void Wlc_BlastReduceMatrix( Gia_Man_t * pNew, Vec_Wec_t * vProds, Vec_Wec_t * vLevels, Vec_Int_t * vRes, int fSigned, int fCla ); - int i, k, x, fCompl, iLit; char pNameP[32], pNameT[32]; - Vec_Wec_t * vProds = Vec_WecStart( nArgA + nArgB ); - Vec_Wec_t * vLevels = Vec_WecStart( nArgA + nArgB ); - Vec_Int_t * vRes = Vec_IntAlloc( nArgA + nArgB ); - Vec_Int_t * vArgA = Vec_IntAlloc( nArgA ); - Vec_Int_t * vArgB = Vec_IntAlloc( nArgB ), * vLevel; - Gia_Man_t * pProd = Gia_ManStart( 1000 ); - Gia_Man_t * pTree = Gia_ManStart( 1000 ), * pTemp; - Gia_ManHashAlloc( pTree ); - pProd->pName = Abc_UtilStrsav( "prod" ); - pTree->pName = Abc_UtilStrsav( "tree" ); - for ( x = 0; x < nArgA; x++ ) - Vec_IntPush( vArgA, Gia_ManAppendCi(pProd) ); - for ( x = 0; x < nArgB; x++ ) - Vec_IntPush( vArgB, Gia_ManAppendCi(pProd) ); - for ( x = 0; x < nArgA + nArgB; x++ ) - { - for ( i = 0; i < nArgA; i++ ) - for ( k = 0; k < nArgB; k++ ) - { - if ( i + k != x ) - continue; - fCompl = fSigned && ((i == nArgA-1) ^ (k == nArgB-1)); - iLit = Abc_LitNotCond(Gia_ManAppendAnd(pProd, Vec_IntEntry(vArgA, i), Vec_IntEntry(vArgB, k)), fCompl); - Gia_ManAppendCo( pProd, iLit ); - Vec_WecPush( vProds, i+k, Gia_ManAppendCi(pTree) ); - Vec_WecPush( vLevels, i+k, 0 ); - } - } - if ( fSigned ) - { - Vec_WecPush( vProds, nArgA, 1 ); - Vec_WecPush( vLevels, nArgA, 0 ); - - Vec_WecPush( vProds, nArgA+nArgB-1, 1 ); - Vec_WecPush( vLevels, nArgA+nArgB-1, 0 ); - } - if ( Seed ) - { - Abc_Random( 1 ); - for ( x = 0; x < Seed; x++ ) - Abc_Random( 0 ); - Vec_WecForEachLevel( vProds, vLevel, x ) - if ( Vec_IntSize(vLevel) > 1 ) - Vec_IntRandomizeOrder( vLevel ); - } - Wlc_BlastReduceMatrix( pTree, vProds, vLevels, vRes, fSigned, fCla ); - Vec_IntShrink( vRes, nArgA + nArgB ); - assert( Vec_IntSize(vRes) == nArgA + nArgB ); - Vec_IntForEachEntry( vRes, iLit, x ) - Gia_ManAppendCo( pTree, iLit ); - pTree = Gia_ManCleanup( pTemp = pTree ); - Gia_ManStop( pTemp ); - - sprintf( pNameP, "prod%d%d.aig", nArgA, nArgB ); - sprintf( pNameT, "tree%d%d.aig", nArgA, nArgB ); - Gia_AigerWrite( pProd, pNameP, 0, 0, 0 ); - Gia_AigerWrite( pTree, pNameT, 0, 0, 0 ); - Gia_ManStop( pProd ); - Gia_ManStop( pTree ); - printf( "Dumped files \"%s\" and \"%s\".\n", pNameP, pNameT ); - - Vec_WecFree( vProds ); - Vec_WecFree( vLevels ); - Vec_IntFree( vArgA ); - Vec_IntFree( vArgB ); - Vec_IntFree( vRes ); -} - //////////////////////////////////////////////////////////////////////// /// END OF FILE /// ////////////////////////////////////////////////////////////////////////