diff options
| author | Alan Mishchenko <alanmi@berkeley.edu> | 2018-08-01 22:26:42 -0800 | 
|---|---|---|
| committer | Alan Mishchenko <alanmi@berkeley.edu> | 2018-08-01 22:26:42 -0800 | 
| commit | 3fb3c6bdd2035842eb4399100ae3fe6b2d6eb107 (patch) | |
| tree | 862cc9820ef7b6d275ca629699d641b9754c0288 /src | |
| parent | 905a627758841c5dee5e1ce4a180badcaff303f1 (diff) | |
| download | abc-3fb3c6bdd2035842eb4399100ae3fe6b2d6eb107.tar.gz abc-3fb3c6bdd2035842eb4399100ae3fe6b2d6eb107.tar.bz2 abc-3fb3c6bdd2035842eb4399100ae3fe6b2d6eb107.zip  | |
Experiments with function enumeration.
Diffstat (limited to 'src')
| -rw-r--r-- | src/opt/dau/dauNpn.c | 77 | 
1 files changed, 61 insertions, 16 deletions
diff --git a/src/opt/dau/dauNpn.c b/src/opt/dau/dauNpn.c index 1af758cb..d8c19111 100644 --- a/src/opt/dau/dauNpn.c +++ b/src/opt/dau/dauNpn.c @@ -194,15 +194,28 @@ void Dau_NetworkEnum()          //Dau_DsdPrintFromTruth( &uTruth, 4 );          for ( v = 0; v < nSupp; v++ )          { +            word tGate, tCur;              word Cof0 = Abc_Tt6Cofactor0( uTruth, nVars-1-v );              word Cof1 = Abc_Tt6Cofactor1( uTruth, nVars-1-v );              for ( g = 0; g < Limit; g++ )              {                  if ( nSupp < nVars )                  { -                    word tGate = g ? s_Truths6[nVars-1-v] ^ s_Truths6[nVars-1-nSupp] : s_Truths6[nVars-1-v] & s_Truths6[nVars-1-nSupp]; -                    word tCur  = (tGate & Cof1) | (~tGate & Cof0); -                    Dau_AddFunction( tCur, nVars, pTable, vNpns ); +                    if ( g == 0 ) +                    { +                        tGate = s_Truths6[nVars-1-v] & s_Truths6[nVars-1-nSupp]; +                        tCur  = (tGate & Cof1) | (~tGate & Cof0); +                        Dau_AddFunction( tCur, nVars, pTable, vNpns ); + +                        tCur  = (tGate & Cof0) | (~tGate & Cof1); +                        Dau_AddFunction( tCur, nVars, pTable, vNpns ); +                    } +                    else +                    { +                        tGate = s_Truths6[nVars-1-v] ^ s_Truths6[nVars-1-nSupp]; +                        tCur  = (tGate & Cof1) | (~tGate & Cof0); +                        Dau_AddFunction( tCur, nVars, pTable, vNpns ); +                    }                  }              }              for ( g = 0; g < Limit; g++ ) @@ -210,13 +223,26 @@ void Dau_NetworkEnum()                  // add one cross bar                  for ( k = 0; k < nSupp; k++ ) if ( k != v )                  { -                    word tGate = g ? s_Truths6[nVars-1-v] ^ s_Truths6[nVars-1-k] : s_Truths6[nVars-1-v] & s_Truths6[nVars-1-k]; -                    word tCur  = (tGate & Cof1) | (~tGate & Cof0); -                    Dau_AddFunction( tCur, nVars, pTable, vNpns ); -                    if ( g == 0 ) // skip XOR +                    if ( g == 0 )                      { -                        word tGate = s_Truths6[nVars-1-v] & ~s_Truths6[nVars-1-k]; -                        word tCur  = (tGate & Cof1) | (~tGate & Cof0); +                        tGate = s_Truths6[nVars-1-v] & s_Truths6[nVars-1-k]; +                        tCur  = (tGate & Cof1) | (~tGate & Cof0); +                        Dau_AddFunction( tCur, nVars, pTable, vNpns ); + +                        tCur  = (tGate & Cof0) | (~tGate & Cof1); +                        Dau_AddFunction( tCur, nVars, pTable, vNpns ); + +                        tGate = s_Truths6[nVars-1-v] & ~s_Truths6[nVars-1-k]; +                        tCur  = (tGate & Cof1) | (~tGate & Cof0); +                        Dau_AddFunction( tCur, nVars, pTable, vNpns ); + +                        tCur  = (tGate & Cof0) | (~tGate & Cof1); +                        Dau_AddFunction( tCur, nVars, pTable, vNpns ); +                    } +                    else +                    { +                        tGate = s_Truths6[nVars-1-v] ^ s_Truths6[nVars-1-k]; +                        tCur  = (tGate & Cof1) | (~tGate & Cof0);                          Dau_AddFunction( tCur, nVars, pTable, vNpns );                      }                  } @@ -227,22 +253,41 @@ void Dau_NetworkEnum()                  for ( k = 0;   k < nSupp; k++ ) if ( k != v )                  for ( m = k+1; m < nSupp; m++ ) if ( m != v )                  { -                    word tGate = g ? s_Truths6[nVars-1-m] ^ s_Truths6[nVars-1-k] : s_Truths6[nVars-1-m] & s_Truths6[nVars-1-k]; -                    word tCur  = (tGate & Cof1) | (~tGate & Cof0); -                    Dau_AddFunction( tCur, nVars, pTable, vNpns ); -                    if ( g == 0 ) // skip XOR +                    if ( g == 0 )                      { -                        tGate =  s_Truths6[nVars-1-m] & ~s_Truths6[nVars-1-k]; +                        tGate = s_Truths6[nVars-1-m] & s_Truths6[nVars-1-k];                          tCur  = (tGate & Cof1) | (~tGate & Cof0);                          Dau_AddFunction( tCur, nVars, pTable, vNpns ); -                        tGate = ~s_Truths6[nVars-1-m] &  s_Truths6[nVars-1-k]; +                        tCur  = (tGate & Cof0) | (~tGate & Cof1); +                        Dau_AddFunction( tCur, nVars, pTable, vNpns ); + +                        tGate = s_Truths6[nVars-1-m] & ~s_Truths6[nVars-1-k]; +                        tCur  = (tGate & Cof1) | (~tGate & Cof0); +                        Dau_AddFunction( tCur, nVars, pTable, vNpns ); + +                        tCur  = (tGate & Cof0) | (~tGate & Cof1); +                        Dau_AddFunction( tCur, nVars, pTable, vNpns ); + +                        tGate = ~s_Truths6[nVars-1-m] & s_Truths6[nVars-1-k];                          tCur  = (tGate & Cof1) | (~tGate & Cof0);                          Dau_AddFunction( tCur, nVars, pTable, vNpns ); +                        tCur  = (tGate & Cof0) | (~tGate & Cof1); +                        Dau_AddFunction( tCur, nVars, pTable, vNpns ); +                          tGate = ~s_Truths6[nVars-1-m] & ~s_Truths6[nVars-1-k];                          tCur  = (tGate & Cof1) | (~tGate & Cof0);                          Dau_AddFunction( tCur, nVars, pTable, vNpns ); + +                        tCur  = (tGate & Cof0) | (~tGate & Cof1); +                        Dau_AddFunction( tCur, nVars, pTable, vNpns ); +                    } +                    else +                    { +                        tGate = s_Truths6[nVars-1-m] ^ s_Truths6[nVars-1-k]; +                        tCur  = (tGate & Cof1) | (~tGate & Cof0); +                        Dau_AddFunction( tCur, nVars, pTable, vNpns );                      }                  }              } @@ -252,7 +297,7 @@ void Dau_NetworkEnum()              //printf("Finished %d nodes with %d functions.\n", Count++, Vec_IntSize(vNpns) );              iPrev = iLast;              iLast = Vec_IntSize(vNpns)-1; -            printf("Finished %2d nodes with %6d functions our of %6d.  ", Count++, iLast - iPrev, Vec_IntSize(vNpns) ); +            printf("Finished %2d nodes with %6d functions out of %6d.  ", Count++, iLast - iPrev, Vec_IntSize(vNpns) );              Abc_PrintTime( 1, "Time", Abc_Clock() - clk );              fflush(stdout);          }  | 
