diff options
| author | Alan Mishchenko <alanmi@berkeley.edu> | 2005-08-18 08:01:00 -0700 | 
|---|---|---|
| committer | Alan Mishchenko <alanmi@berkeley.edu> | 2005-08-18 08:01:00 -0700 | 
| commit | dffcc93b8e8779f443762c71098796b01ea7d409 (patch) | |
| tree | 44113f09a94914013816564bdad846b5939c220a | |
| parent | 6e496de7ff1a1f9b6f0babc8efb0a13379242505 (diff) | |
| download | abc-dffcc93b8e8779f443762c71098796b01ea7d409.tar.gz abc-dffcc93b8e8779f443762c71098796b01ea7d409.tar.bz2 abc-dffcc93b8e8779f443762c71098796b01ea7d409.zip | |
Version abc50818
30 files changed, 2518 insertions, 1187 deletions
| @@ -10,8 +10,8 @@ MODULES := src/base/abc src/base/cmd src/base/io src/base/main \             src/bdd/cudd src/bdd/dsd src/bdd/epd src/bdd/mtr src/bdd/parse src/bdd/reo \             src/map/fpga src/map/mapper src/map/mio src/map/super \             src/misc/extra src/misc/st src/misc/util src/misc/vec \ -	   src/opt/fxu \ -           src/sat/asat src/sat/fraig src/sat/msat \ +	   src/opt/fxu src/opt/rwr \ +           src/sat/asat src/sat/fraig src/sat/msat src/sat/sim \             src/seq \             src/sop/ft src/sop/mvc @@ -42,7 +42,7 @@ RSC=rc.exe  # PROP Ignore_Export_Lib 0  # PROP Target_Dir ""  # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "src\base\abc" /I "src\base\cmd" /I "src\base\io" /I "src\base\main" /I "src\bdd\cudd" /I "src\bdd\epd" /I "src\bdd\mtr" /I "src\bdd\parse" /I "src\bdd\dsd" /I "src\bdd\reo" /I "src\sop\mvc" /I "src\sop\ft" /I "src\sat\asat" /I "src\sat\msat" /I "src\sat\fraig" /I "src\opt\fxa" /I "src\opt\fxu" /I "src\map\fpga" /I "src\map\mapper" /I "src\map\mio" /I "src\map\super" /I "src\misc\extra" /I "src\misc\st" /I "src\misc\util" /I "src\misc\vec" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "__STDC__" /D "HAVE_ASSERT_H" /FR /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "src\base\abc" /I "src\base\cmd" /I "src\base\io" /I "src\base\main" /I "src\bdd\cudd" /I "src\bdd\epd" /I "src\bdd\mtr" /I "src\bdd\parse" /I "src\bdd\dsd" /I "src\bdd\reo" /I "src\sop\mvc" /I "src\sop\ft" /I "src\sat\asat" /I "src\sat\msat" /I "src\sat\fraig" /I "src\opt\fxa" /I "src\opt\fxu" /I "src\opt\rwr" /I "src\map\fpga" /I "src\map\mapper" /I "src\map\mio" /I "src\map\super" /I "src\misc\extra" /I "src\misc\st" /I "src\misc\util" /I "src\misc\vec" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "__STDC__" /D "HAVE_ASSERT_H" /FR /YX /FD /c  # ADD BASE RSC /l 0x409 /d "NDEBUG"  # ADD RSC /l 0x409 /d "NDEBUG"  BSC32=bscmake.exe @@ -66,7 +66,7 @@ LINK32=link.exe  # PROP Ignore_Export_Lib 0  # PROP Target_Dir ""  # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "src\base\abc" /I "src\base\cmd" /I "src\base\io" /I "src\base\main" /I "src\bdd\cudd" /I "src\bdd\epd" /I "src\bdd\mtr" /I "src\bdd\parse" /I "src\bdd\dsd" /I "src\bdd\reo" /I "src\sop\mvc" /I "src\sop\ft" /I "src\sat\asat" /I "src\sat\msat" /I "src\sat\fraig" /I "src\opt\fxa" /I "src\opt\fxu" /I "src\map\fpga" /I "src\map\mapper" /I "src\map\mio" /I "src\map\super" /I "src\misc\extra" /I "src\misc\st" /I "src\misc\util" /I "src\misc\vec" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "__STDC__" /D "HAVE_ASSERT_H" /FR /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "src\base\abc" /I "src\base\cmd" /I "src\base\io" /I "src\base\main" /I "src\bdd\cudd" /I "src\bdd\epd" /I "src\bdd\mtr" /I "src\bdd\parse" /I "src\bdd\dsd" /I "src\bdd\reo" /I "src\sop\mvc" /I "src\sop\ft" /I "src\sat\asat" /I "src\sat\msat" /I "src\sat\fraig" /I "src\opt\fxa" /I "src\opt\fxu" /I "src\opt\rwr" /I "src\map\fpga" /I "src\map\mapper" /I "src\map\mio" /I "src\map\super" /I "src\misc\extra" /I "src\misc\st" /I "src\misc\util" /I "src\misc\vec" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "__STDC__" /D "HAVE_ASSERT_H" /FR /YX /FD /GZ /c  # ADD BASE RSC /l 0x409 /d "_DEBUG"  # ADD RSC /l 0x409 /d "_DEBUG"  BSC32=bscmake.exe @@ -185,19 +185,19 @@ SOURCE=.\src\base\abc\abcReconv.c  # End Source File  # Begin Source File -SOURCE=.\src\base\abc\abcRefs.c +SOURCE=.\src\base\abc\abcRefactor.c  # End Source File  # Begin Source File -SOURCE=.\src\base\abc\abcRenode.c +SOURCE=.\src\base\abc\abcRefs.c  # End Source File  # Begin Source File -SOURCE=.\src\base\abc\abcRes.c +SOURCE=.\src\base\abc\abcRenode.c  # End Source File  # Begin Source File -SOURCE=.\src\base\abc\abcResRef.c +SOURCE=.\src\base\abc\abcRewrite.c  # End Source File  # Begin Source File @@ -3,561 +3,1096 @@  <pre>  <h1>Build Log</h1>  <h3> ---------------------Configuration: abc - Win32 Debug-------------------- +--------------------Configuration: abc - Win32 Release--------------------  </h3>  <h3>Command Lines</h3> -Creating temporary file "C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP12A1.tmp" with contents +Creating temporary file "C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP15C4.tmp" with contents  [ -/nologo /MLd /W3 /Gm /GX /ZI /Od /I "src\base\abc" /I "src\base\cmd" /I "src\base\io" /I "src\base\main" /I "src\bdd\cudd" /I "src\bdd\epd" /I "src\bdd\mtr" /I "src\bdd\parse" /I "src\bdd\dsd" /I "src\bdd\reo" /I "src\sop\mvc" /I "src\sop\ft" /I "src\sat\asat" /I "src\sat\msat" /I "src\sat\fraig" /I "src\opt\fxa" /I "src\opt\fxu" /I "src\map\fpga" /I "src\map\mapper" /I "src\map\mio" /I "src\map\super" /I "src\misc\extra" /I "src\misc\st" /I "src\misc\util" /I "src\misc\vec" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "__STDC__" /D "HAVE_ASSERT_H" /FR"Debug/" /Fp"Debug/abc.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c  +/nologo /ML /W3 /GX /O2 /I "src\base\abc" /I "src\base\cmd" /I "src\base\io" /I "src\base\main" /I "src\bdd\cudd" /I "src\bdd\epd" /I "src\bdd\mtr" /I "src\bdd\parse" /I "src\bdd\dsd" /I "src\bdd\reo" /I "src\sop\mvc" /I "src\sop\ft" /I "src\sat\asat" /I "src\sat\msat" /I "src\sat\fraig" /I "src\opt\fxa" /I "src\opt\fxu" /I "src\opt\rwr" /I "src\map\fpga" /I "src\map\mapper" /I "src\map\mio" /I "src\map\super" /I "src\misc\extra" /I "src\misc\st" /I "src\misc\util" /I "src\misc\vec" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "__STDC__" /D "HAVE_ASSERT_H" /FR"Release/" /Fp"Release/abc.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c  +"C:\_projects\abc\src\base\abc\abc.c" +"C:\_projects\abc\src\base\abc\abcAig.c" +"C:\_projects\abc\src\base\abc\abcAttach.c" +"C:\_projects\abc\src\base\abc\abcCheck.c" +"C:\_projects\abc\src\base\abc\abcCollapse.c" +"C:\_projects\abc\src\base\abc\abcCreate.c" +"C:\_projects\abc\src\base\abc\abcDfs.c" +"C:\_projects\abc\src\base\abc\abcDsd.c" +"C:\_projects\abc\src\base\abc\abcFanio.c" +"C:\_projects\abc\src\base\abc\abcFpga.c" +"C:\_projects\abc\src\base\abc\abcFraig.c" +"C:\_projects\abc\src\base\abc\abcFunc.c" +"C:\_projects\abc\src\base\abc\abcFxu.c" +"C:\_projects\abc\src\base\abc\abcLatch.c" +"C:\_projects\abc\src\base\abc\abcMap.c" +"C:\_projects\abc\src\base\abc\abcMinBase.c" +"C:\_projects\abc\src\base\abc\abcMiter.c" +"C:\_projects\abc\src\base\abc\abcNames.c" +"C:\_projects\abc\src\base\abc\abcNetlist.c" +"C:\_projects\abc\src\base\abc\abcPrint.c" +"C:\_projects\abc\src\base\abc\abcReconv.c" +"C:\_projects\abc\src\base\abc\abcRefs.c" +"C:\_projects\abc\src\base\abc\abcRenode.c" +"C:\_projects\abc\src\base\abc\abcSat.c" +"C:\_projects\abc\src\base\abc\abcSeq.c" +"C:\_projects\abc\src\base\abc\abcSeqRetime.c" +"C:\_projects\abc\src\base\abc\abcShow.c" +"C:\_projects\abc\src\base\abc\abcSop.c"  "C:\_projects\abc\src\base\abc\abcStrash.c" +"C:\_projects\abc\src\base\abc\abcSweep.c" +"C:\_projects\abc\src\base\abc\abcTiming.c" +"C:\_projects\abc\src\base\abc\abcUnreach.c" +"C:\_projects\abc\src\base\abc\abcUtil.c" +"C:\_projects\abc\src\base\abc\abcVerify.c" +"C:\_projects\abc\src\base\cmd\cmd.c" +"C:\_projects\abc\src\base\cmd\cmdAlias.c" +"C:\_projects\abc\src\base\cmd\cmdApi.c" +"C:\_projects\abc\src\base\cmd\cmdFlag.c" +"C:\_projects\abc\src\base\cmd\cmdHist.c" +"C:\_projects\abc\src\base\cmd\cmdUtils.c" +"C:\_projects\abc\src\base\io\io.c" +"C:\_projects\abc\src\base\io\ioRead.c" +"C:\_projects\abc\src\base\io\ioReadBench.c" +"C:\_projects\abc\src\base\io\ioReadBlif.c" +"C:\_projects\abc\src\base\io\ioReadEdif.c" +"C:\_projects\abc\src\base\io\ioReadPla.c" +"C:\_projects\abc\src\base\io\ioReadVerilog.c" +"C:\_projects\abc\src\base\io\ioUtil.c" +"C:\_projects\abc\src\base\io\ioWriteBench.c" +"C:\_projects\abc\src\base\io\ioWriteBlif.c" +"C:\_projects\abc\src\base\io\ioWriteCnf.c" +"C:\_projects\abc\src\base\io\ioWritePla.c" +"C:\_projects\abc\src\base\main\main.c" +"C:\_projects\abc\src\base\main\mainFrame.c" +"C:\_projects\abc\src\base\main\mainInit.c" +"C:\_projects\abc\src\base\main\mainUtils.c" +"C:\_projects\abc\src\bdd\cudd\cuddAddAbs.c" +"C:\_projects\abc\src\bdd\cudd\cuddAddApply.c" +"C:\_projects\abc\src\bdd\cudd\cuddAddFind.c" +"C:\_projects\abc\src\bdd\cudd\cuddAddInv.c" +"C:\_projects\abc\src\bdd\cudd\cuddAddIte.c" +"C:\_projects\abc\src\bdd\cudd\cuddAddNeg.c" +"C:\_projects\abc\src\bdd\cudd\cuddAddWalsh.c" +"C:\_projects\abc\src\bdd\cudd\cuddAndAbs.c" +"C:\_projects\abc\src\bdd\cudd\cuddAnneal.c" +"C:\_projects\abc\src\bdd\cudd\cuddApa.c" +"C:\_projects\abc\src\bdd\cudd\cuddAPI.c" +"C:\_projects\abc\src\bdd\cudd\cuddApprox.c" +"C:\_projects\abc\src\bdd\cudd\cuddBddAbs.c" +"C:\_projects\abc\src\bdd\cudd\cuddBddCorr.c" +"C:\_projects\abc\src\bdd\cudd\cuddBddIte.c" +"C:\_projects\abc\src\bdd\cudd\cuddBridge.c" +"C:\_projects\abc\src\bdd\cudd\cuddCache.c" +"C:\_projects\abc\src\bdd\cudd\cuddCheck.c" +"C:\_projects\abc\src\bdd\cudd\cuddClip.c" +"C:\_projects\abc\src\bdd\cudd\cuddCof.c" +"C:\_projects\abc\src\bdd\cudd\cuddCompose.c" +"C:\_projects\abc\src\bdd\cudd\cuddDecomp.c" +"C:\_projects\abc\src\bdd\cudd\cuddEssent.c" +"C:\_projects\abc\src\bdd\cudd\cuddExact.c" +"C:\_projects\abc\src\bdd\cudd\cuddExport.c" +"C:\_projects\abc\src\bdd\cudd\cuddGenCof.c" +"C:\_projects\abc\src\bdd\cudd\cuddGenetic.c" +"C:\_projects\abc\src\bdd\cudd\cuddGroup.c" +"C:\_projects\abc\src\bdd\cudd\cuddHarwell.c" +"C:\_projects\abc\src\bdd\cudd\cuddInit.c" +"C:\_projects\abc\src\bdd\cudd\cuddInteract.c" +"C:\_projects\abc\src\bdd\cudd\cuddLCache.c" +"C:\_projects\abc\src\bdd\cudd\cuddLevelQ.c" +"C:\_projects\abc\src\bdd\cudd\cuddLinear.c" +"C:\_projects\abc\src\bdd\cudd\cuddLiteral.c" +"C:\_projects\abc\src\bdd\cudd\cuddMatMult.c" +"C:\_projects\abc\src\bdd\cudd\cuddPriority.c" +"C:\_projects\abc\src\bdd\cudd\cuddRead.c" +"C:\_projects\abc\src\bdd\cudd\cuddRef.c" +"C:\_projects\abc\src\bdd\cudd\cuddReorder.c" +"C:\_projects\abc\src\bdd\cudd\cuddSat.c" +"C:\_projects\abc\src\bdd\cudd\cuddSign.c" +"C:\_projects\abc\src\bdd\cudd\cuddSolve.c" +"C:\_projects\abc\src\bdd\cudd\cuddSplit.c" +"C:\_projects\abc\src\bdd\cudd\cuddSubsetHB.c" +"C:\_projects\abc\src\bdd\cudd\cuddSubsetSP.c" +"C:\_projects\abc\src\bdd\cudd\cuddSymmetry.c" +"C:\_projects\abc\src\bdd\cudd\cuddTable.c" +"C:\_projects\abc\src\bdd\cudd\cuddUtil.c" +"C:\_projects\abc\src\bdd\cudd\cuddWindow.c" +"C:\_projects\abc\src\bdd\cudd\cuddZddCount.c" +"C:\_projects\abc\src\bdd\cudd\cuddZddFuncs.c" +"C:\_projects\abc\src\bdd\cudd\cuddZddGroup.c" +"C:\_projects\abc\src\bdd\cudd\cuddZddIsop.c" +"C:\_projects\abc\src\bdd\cudd\cuddZddLin.c" +"C:\_projects\abc\src\bdd\cudd\cuddZddMisc.c" +"C:\_projects\abc\src\bdd\cudd\cuddZddPort.c" +"C:\_projects\abc\src\bdd\cudd\cuddZddReord.c" +"C:\_projects\abc\src\bdd\cudd\cuddZddSetop.c" +"C:\_projects\abc\src\bdd\cudd\cuddZddSymm.c" +"C:\_projects\abc\src\bdd\cudd\cuddZddUtil.c" +"C:\_projects\abc\src\bdd\epd\epd.c" +"C:\_projects\abc\src\bdd\mtr\mtrBasic.c" +"C:\_projects\abc\src\bdd\mtr\mtrGroup.c" +"C:\_projects\abc\src\bdd\parse\parseCore.c" +"C:\_projects\abc\src\bdd\parse\parseStack.c" +"C:\_projects\abc\src\bdd\dsd\dsdApi.c" +"C:\_projects\abc\src\bdd\dsd\dsdCheck.c" +"C:\_projects\abc\src\bdd\dsd\dsdLocal.c" +"C:\_projects\abc\src\bdd\dsd\dsdMan.c" +"C:\_projects\abc\src\bdd\dsd\dsdProc.c" +"C:\_projects\abc\src\bdd\dsd\dsdTree.c" +"C:\_projects\abc\src\bdd\reo\reoApi.c" +"C:\_projects\abc\src\bdd\reo\reoCore.c" +"C:\_projects\abc\src\bdd\reo\reoProfile.c" +"C:\_projects\abc\src\bdd\reo\reoSift.c" +"C:\_projects\abc\src\bdd\reo\reoSwap.c" +"C:\_projects\abc\src\bdd\reo\reoTest.c" +"C:\_projects\abc\src\bdd\reo\reoTransfer.c" +"C:\_projects\abc\src\bdd\reo\reoUnits.c" +"C:\_projects\abc\src\sop\mvc\mvc.c" +"C:\_projects\abc\src\sop\mvc\mvcApi.c" +"C:\_projects\abc\src\sop\mvc\mvcCompare.c" +"C:\_projects\abc\src\sop\mvc\mvcContain.c" +"C:\_projects\abc\src\sop\mvc\mvcCover.c" +"C:\_projects\abc\src\sop\mvc\mvcCube.c" +"C:\_projects\abc\src\sop\mvc\mvcDivide.c" +"C:\_projects\abc\src\sop\mvc\mvcDivisor.c" +"C:\_projects\abc\src\sop\mvc\mvcList.c" +"C:\_projects\abc\src\sop\mvc\mvcLits.c" +"C:\_projects\abc\src\sop\mvc\mvcMan.c" +"C:\_projects\abc\src\sop\mvc\mvcOpAlg.c" +"C:\_projects\abc\src\sop\mvc\mvcOpBool.c" +"C:\_projects\abc\src\sop\mvc\mvcPrint.c" +"C:\_projects\abc\src\sop\mvc\mvcSort.c" +"C:\_projects\abc\src\sop\mvc\mvcUtils.c" +"C:\_projects\abc\src\sop\ft\ftFactor.c" +"C:\_projects\abc\src\sop\ft\ftPrint.c" +"C:\_projects\abc\src\sat\asat\added.c" +"C:\_projects\abc\src\sat\asat\solver.c" +"C:\_projects\abc\src\sat\msat\msatActivity.c" +"C:\_projects\abc\src\sat\msat\msatClause.c" +"C:\_projects\abc\src\sat\msat\msatClauseVec.c" +"C:\_projects\abc\src\sat\msat\msatMem.c" +"C:\_projects\abc\src\sat\msat\msatOrderJ.c" +"C:\_projects\abc\src\sat\msat\msatQueue.c" +"C:\_projects\abc\src\sat\msat\msatRead.c" +"C:\_projects\abc\src\sat\msat\msatSolverApi.c" +"C:\_projects\abc\src\sat\msat\msatSolverCore.c" +"C:\_projects\abc\src\sat\msat\msatSolverIo.c" +"C:\_projects\abc\src\sat\msat\msatSolverSearch.c" +"C:\_projects\abc\src\sat\msat\msatSort.c" +"C:\_projects\abc\src\sat\msat\msatVec.c" +"C:\_projects\abc\src\sat\fraig\fraigApi.c" +"C:\_projects\abc\src\sat\fraig\fraigCanon.c" +"C:\_projects\abc\src\sat\fraig\fraigFanout.c" +"C:\_projects\abc\src\sat\fraig\fraigFeed.c" +"C:\_projects\abc\src\sat\fraig\fraigMan.c" +"C:\_projects\abc\src\sat\fraig\fraigMem.c" +"C:\_projects\abc\src\sat\fraig\fraigNode.c" +"C:\_projects\abc\src\sat\fraig\fraigPrime.c" +"C:\_projects\abc\src\sat\fraig\fraigSat.c" +"C:\_projects\abc\src\sat\fraig\fraigTable.c" +"C:\_projects\abc\src\sat\fraig\fraigUtil.c" +"C:\_projects\abc\src\sat\fraig\fraigVec.c" +"C:\_projects\abc\src\sat\sim\simMan.c" +"C:\_projects\abc\src\sat\sim\simSat.c" +"C:\_projects\abc\src\sat\sim\simSupp.c" +"C:\_projects\abc\src\sat\sim\simSym.c" +"C:\_projects\abc\src\sat\sim\simUnate.c" +"C:\_projects\abc\src\sat\sim\simUtils.c" +"C:\_projects\abc\src\opt\fxu\fxu.c" +"C:\_projects\abc\src\opt\fxu\fxuCreate.c" +"C:\_projects\abc\src\opt\fxu\fxuHeapD.c" +"C:\_projects\abc\src\opt\fxu\fxuHeapS.c" +"C:\_projects\abc\src\opt\fxu\fxuList.c" +"C:\_projects\abc\src\opt\fxu\fxuMatrix.c" +"C:\_projects\abc\src\opt\fxu\fxuPair.c" +"C:\_projects\abc\src\opt\fxu\fxuPrint.c" +"C:\_projects\abc\src\opt\fxu\fxuReduce.c" +"C:\_projects\abc\src\opt\fxu\fxuSelect.c" +"C:\_projects\abc\src\opt\fxu\fxuSingle.c" +"C:\_projects\abc\src\opt\fxu\fxuUpdate.c" +"C:\_projects\abc\src\opt\rwr\rwrCut.c" +"C:\_projects\abc\src\opt\rwr\rwrEva.c" +"C:\_projects\abc\src\opt\rwr\rwrExp.c" +"C:\_projects\abc\src\opt\rwr\rwrLib.c" +"C:\_projects\abc\src\opt\rwr\rwrMan.c"  "C:\_projects\abc\src\opt\rwr\rwrUtil.c" +"C:\_projects\abc\src\map\fpga\fpga.c" +"C:\_projects\abc\src\map\fpga\fpgaCore.c" +"C:\_projects\abc\src\map\fpga\fpgaCreate.c" +"C:\_projects\abc\src\map\fpga\fpgaCut.c" +"C:\_projects\abc\src\map\fpga\fpgaCutUtils.c" +"C:\_projects\abc\src\map\fpga\fpgaFanout.c" +"C:\_projects\abc\src\map\fpga\fpgaLib.c" +"C:\_projects\abc\src\map\fpga\fpgaMatch.c" +"C:\_projects\abc\src\map\fpga\fpgaTime.c" +"C:\_projects\abc\src\map\fpga\fpgaTruth.c" +"C:\_projects\abc\src\map\fpga\fpgaUtils.c" +"C:\_projects\abc\src\map\fpga\fpgaVec.c" +"C:\_projects\abc\src\map\mapper\mapper.c" +"C:\_projects\abc\src\map\mapper\mapperCanon.c" +"C:\_projects\abc\src\map\mapper\mapperCore.c" +"C:\_projects\abc\src\map\mapper\mapperCreate.c" +"C:\_projects\abc\src\map\mapper\mapperCut.c" +"C:\_projects\abc\src\map\mapper\mapperCutUtils.c" +"C:\_projects\abc\src\map\mapper\mapperFanout.c" +"C:\_projects\abc\src\map\mapper\mapperLib.c" +"C:\_projects\abc\src\map\mapper\mapperMatch.c" +"C:\_projects\abc\src\map\mapper\mapperRefs.c" +"C:\_projects\abc\src\map\mapper\mapperSuper.c" +"C:\_projects\abc\src\map\mapper\mapperTable.c" +"C:\_projects\abc\src\map\mapper\mapperTime.c" +"C:\_projects\abc\src\map\mapper\mapperTree.c" +"C:\_projects\abc\src\map\mapper\mapperTruth.c" +"C:\_projects\abc\src\map\mapper\mapperUtils.c" +"C:\_projects\abc\src\map\mapper\mapperVec.c" +"C:\_projects\abc\src\map\mio\mio.c" +"C:\_projects\abc\src\map\mio\mioApi.c" +"C:\_projects\abc\src\map\mio\mioFunc.c" +"C:\_projects\abc\src\map\mio\mioRead.c" +"C:\_projects\abc\src\map\mio\mioUtils.c" +"C:\_projects\abc\src\map\super\super.c" +"C:\_projects\abc\src\map\super\superAnd.c" +"C:\_projects\abc\src\map\super\superGate.c" +"C:\_projects\abc\src\map\super\superWrite.c" +"C:\_projects\abc\src\misc\extra\extraUtilBdd.c" +"C:\_projects\abc\src\misc\extra\extraUtilBitMatrix.c" +"C:\_projects\abc\src\misc\extra\extraUtilFile.c" +"C:\_projects\abc\src\misc\extra\extraUtilMemory.c" +"C:\_projects\abc\src\misc\extra\extraUtilMisc.c" +"C:\_projects\abc\src\misc\extra\extraUtilProgress.c" +"C:\_projects\abc\src\misc\extra\extraUtilReader.c" +"C:\_projects\abc\src\misc\st\st.c" +"C:\_projects\abc\src\misc\st\stmm.c" +"C:\_projects\abc\src\misc\util\cpu_stats.c" +"C:\_projects\abc\src\misc\util\cpu_time.c" +"C:\_projects\abc\src\misc\util\datalimit.c" +"C:\_projects\abc\src\misc\util\getopt.c" +"C:\_projects\abc\src\misc\util\pathsearch.c" +"C:\_projects\abc\src\misc\util\safe_mem.c" +"C:\_projects\abc\src\misc\util\strsav.c" +"C:\_projects\abc\src\misc\util\texpand.c" +"C:\_projects\abc\src\base\abc\abcRefactor.c" +"C:\_projects\abc\src\base\abc\abcRewrite.c"  ] -Creating command line "cl.exe @C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP12A1.tmp"  -Creating temporary file "C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP12A2.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP15C4.tmp"  +Creating temporary file "C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP15C5.tmp" with contents  [ -kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/abc.pdb" /debug /machine:I386 /out:"_TEST/abc.exe" /pdbtype:sept  -.\Debug\abc.obj -.\Debug\abcAig.obj -.\Debug\abcAttach.obj -.\Debug\abcCheck.obj -.\Debug\abcCollapse.obj -.\Debug\abcCreate.obj -.\Debug\abcDfs.obj -.\Debug\abcDsd.obj -.\Debug\abcFanio.obj -.\Debug\abcFpga.obj -.\Debug\abcFraig.obj -.\Debug\abcFunc.obj -.\Debug\abcFxu.obj -.\Debug\abcLatch.obj -.\Debug\abcMap.obj -.\Debug\abcMinBase.obj -.\Debug\abcMiter.obj -.\Debug\abcNames.obj -.\Debug\abcNetlist.obj -.\Debug\abcPrint.obj -.\Debug\abcRefs.obj -.\Debug\abcRenode.obj -.\Debug\abcRes.obj -.\Debug\abcSat.obj -.\Debug\abcSeq.obj -.\Debug\abcSeqRetime.obj -.\Debug\abcShow.obj -.\Debug\abcSop.obj -.\Debug\abcStrash.obj -.\Debug\abcSweep.obj -.\Debug\abcTiming.obj -.\Debug\abcUnreach.obj -.\Debug\abcUtil.obj -.\Debug\abcVerify.obj -.\Debug\cmd.obj -.\Debug\cmdAlias.obj -.\Debug\cmdApi.obj -.\Debug\cmdFlag.obj -.\Debug\cmdHist.obj -.\Debug\cmdUtils.obj -.\Debug\io.obj -.\Debug\ioRead.obj -.\Debug\ioReadBench.obj -.\Debug\ioReadBlif.obj -.\Debug\ioReadEdif.obj -.\Debug\ioReadPla.obj -.\Debug\ioReadVerilog.obj -.\Debug\ioUtil.obj -.\Debug\ioWriteBench.obj -.\Debug\ioWriteBlif.obj -.\Debug\ioWriteCnf.obj -.\Debug\ioWritePla.obj -.\Debug\main.obj -.\Debug\mainFrame.obj -.\Debug\mainInit.obj -.\Debug\mainUtils.obj -.\Debug\cuddAddAbs.obj -.\Debug\cuddAddApply.obj -.\Debug\cuddAddFind.obj -.\Debug\cuddAddInv.obj -.\Debug\cuddAddIte.obj -.\Debug\cuddAddNeg.obj -.\Debug\cuddAddWalsh.obj -.\Debug\cuddAndAbs.obj -.\Debug\cuddAnneal.obj -.\Debug\cuddApa.obj -.\Debug\cuddAPI.obj -.\Debug\cuddApprox.obj -.\Debug\cuddBddAbs.obj -.\Debug\cuddBddCorr.obj -.\Debug\cuddBddIte.obj -.\Debug\cuddBridge.obj -.\Debug\cuddCache.obj -.\Debug\cuddCheck.obj -.\Debug\cuddClip.obj -.\Debug\cuddCof.obj -.\Debug\cuddCompose.obj -.\Debug\cuddDecomp.obj -.\Debug\cuddEssent.obj -.\Debug\cuddExact.obj -.\Debug\cuddExport.obj -.\Debug\cuddGenCof.obj -.\Debug\cuddGenetic.obj -.\Debug\cuddGroup.obj -.\Debug\cuddHarwell.obj -.\Debug\cuddInit.obj -.\Debug\cuddInteract.obj -.\Debug\cuddLCache.obj -.\Debug\cuddLevelQ.obj -.\Debug\cuddLinear.obj -.\Debug\cuddLiteral.obj -.\Debug\cuddMatMult.obj -.\Debug\cuddPriority.obj -.\Debug\cuddRead.obj -.\Debug\cuddRef.obj -.\Debug\cuddReorder.obj -.\Debug\cuddSat.obj -.\Debug\cuddSign.obj -.\Debug\cuddSolve.obj -.\Debug\cuddSplit.obj -.\Debug\cuddSubsetHB.obj -.\Debug\cuddSubsetSP.obj -.\Debug\cuddSymmetry.obj -.\Debug\cuddTable.obj -.\Debug\cuddUtil.obj -.\Debug\cuddWindow.obj -.\Debug\cuddZddCount.obj -.\Debug\cuddZddFuncs.obj -.\Debug\cuddZddGroup.obj -.\Debug\cuddZddIsop.obj -.\Debug\cuddZddLin.obj -.\Debug\cuddZddMisc.obj -.\Debug\cuddZddPort.obj -.\Debug\cuddZddReord.obj -.\Debug\cuddZddSetop.obj -.\Debug\cuddZddSymm.obj -.\Debug\cuddZddUtil.obj -.\Debug\epd.obj -.\Debug\mtrBasic.obj -.\Debug\mtrGroup.obj -.\Debug\parseCore.obj -.\Debug\parseStack.obj -.\Debug\dsdApi.obj -.\Debug\dsdCheck.obj -.\Debug\dsdLocal.obj -.\Debug\dsdMan.obj -.\Debug\dsdProc.obj -.\Debug\dsdTree.obj -.\Debug\reoApi.obj -.\Debug\reoCore.obj -.\Debug\reoProfile.obj -.\Debug\reoSift.obj -.\Debug\reoSwap.obj -.\Debug\reoTest.obj -.\Debug\reoTransfer.obj -.\Debug\reoUnits.obj -.\Debug\mvc.obj -.\Debug\mvcApi.obj -.\Debug\mvcCompare.obj -.\Debug\mvcContain.obj -.\Debug\mvcCover.obj -.\Debug\mvcCube.obj -.\Debug\mvcDivide.obj -.\Debug\mvcDivisor.obj -.\Debug\mvcList.obj -.\Debug\mvcLits.obj -.\Debug\mvcMan.obj -.\Debug\mvcOpAlg.obj -.\Debug\mvcOpBool.obj -.\Debug\mvcPrint.obj -.\Debug\mvcSort.obj -.\Debug\mvcUtils.obj -.\Debug\ftFactor.obj -.\Debug\ftPrint.obj -.\Debug\added.obj -.\Debug\solver.obj -.\Debug\msatActivity.obj -.\Debug\msatClause.obj -.\Debug\msatClauseVec.obj -.\Debug\msatMem.obj -.\Debug\msatOrderJ.obj -.\Debug\msatQueue.obj -.\Debug\msatRead.obj -.\Debug\msatSolverApi.obj -.\Debug\msatSolverCore.obj -.\Debug\msatSolverIo.obj -.\Debug\msatSolverSearch.obj -.\Debug\msatSort.obj -.\Debug\msatVec.obj -.\Debug\fraigApi.obj -.\Debug\fraigCanon.obj -.\Debug\fraigFanout.obj -.\Debug\fraigFeed.obj -.\Debug\fraigMan.obj -.\Debug\fraigMem.obj -.\Debug\fraigNode.obj -.\Debug\fraigPrime.obj -.\Debug\fraigSat.obj -.\Debug\fraigTable.obj -.\Debug\fraigUtil.obj -.\Debug\fraigVec.obj -.\Debug\simMan.obj -.\Debug\simSat.obj -.\Debug\simSupp.obj -.\Debug\simSym.obj -.\Debug\simUnate.obj -.\Debug\simUtils.obj -.\Debug\fxu.obj -.\Debug\fxuCreate.obj -.\Debug\fxuHeapD.obj -.\Debug\fxuHeapS.obj -.\Debug\fxuList.obj -.\Debug\fxuMatrix.obj -.\Debug\fxuPair.obj -.\Debug\fxuPrint.obj -.\Debug\fxuReduce.obj -.\Debug\fxuSelect.obj -.\Debug\fxuSingle.obj -.\Debug\fxuUpdate.obj -.\Debug\fpga.obj -.\Debug\fpgaCore.obj -.\Debug\fpgaCreate.obj -.\Debug\fpgaCut.obj -.\Debug\fpgaCutUtils.obj -.\Debug\fpgaFanout.obj -.\Debug\fpgaLib.obj -.\Debug\fpgaMatch.obj -.\Debug\fpgaTime.obj -.\Debug\fpgaTruth.obj -.\Debug\fpgaUtils.obj -.\Debug\fpgaVec.obj -.\Debug\mapper.obj -.\Debug\mapperCanon.obj -.\Debug\mapperCore.obj -.\Debug\mapperCreate.obj -.\Debug\mapperCut.obj -.\Debug\mapperCutUtils.obj -.\Debug\mapperFanout.obj -.\Debug\mapperLib.obj -.\Debug\mapperMatch.obj -.\Debug\mapperRefs.obj -.\Debug\mapperSuper.obj -.\Debug\mapperTable.obj -.\Debug\mapperTime.obj -.\Debug\mapperTree.obj -.\Debug\mapperTruth.obj -.\Debug\mapperUtils.obj -.\Debug\mapperVec.obj -.\Debug\mio.obj -.\Debug\mioApi.obj -.\Debug\mioFunc.obj -.\Debug\mioRead.obj -.\Debug\mioUtils.obj -.\Debug\super.obj -.\Debug\superAnd.obj -.\Debug\superGate.obj -.\Debug\superWrite.obj -.\Debug\extraUtilBdd.obj -.\Debug\extraUtilBitMatrix.obj -.\Debug\extraUtilFile.obj -.\Debug\extraUtilMemory.obj -.\Debug\extraUtilMisc.obj -.\Debug\extraUtilProgress.obj -.\Debug\extraUtilReader.obj -.\Debug\st.obj -.\Debug\stmm.obj -.\Debug\cpu_stats.obj -.\Debug\cpu_time.obj -.\Debug\datalimit.obj -.\Debug\getopt.obj -.\Debug\pathsearch.obj -.\Debug\safe_mem.obj -.\Debug\strsav.obj -.\Debug\texpand.obj -.\Debug\abcReconv.obj -.\Debug\abcResRef.obj -.\Debug\rwrMan.obj -.\Debug\rwrCut.obj -.\Debug\rwrExp.obj -.\Debug\rwrLib.obj -.\Debug\rwrEva.obj -.\Debug\rwrUtil.obj +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"Release/abc.pdb" /machine:I386 /out:"_TEST/abc.exe"  +.\Release\abc.obj +.\Release\abcAig.obj +.\Release\abcAttach.obj +.\Release\abcCheck.obj +.\Release\abcCollapse.obj +.\Release\abcCreate.obj +.\Release\abcDfs.obj +.\Release\abcDsd.obj +.\Release\abcFanio.obj +.\Release\abcFpga.obj +.\Release\abcFraig.obj +.\Release\abcFunc.obj +.\Release\abcFxu.obj +.\Release\abcLatch.obj +.\Release\abcMap.obj +.\Release\abcMinBase.obj +.\Release\abcMiter.obj +.\Release\abcNames.obj +.\Release\abcNetlist.obj +.\Release\abcPrint.obj +.\Release\abcReconv.obj +.\Release\abcRefs.obj +.\Release\abcRenode.obj +.\Release\abcSat.obj +.\Release\abcSeq.obj +.\Release\abcSeqRetime.obj +.\Release\abcShow.obj +.\Release\abcSop.obj +.\Release\abcStrash.obj +.\Release\abcSweep.obj +.\Release\abcTiming.obj +.\Release\abcUnreach.obj +.\Release\abcUtil.obj +.\Release\abcVerify.obj +.\Release\cmd.obj +.\Release\cmdAlias.obj +.\Release\cmdApi.obj +.\Release\cmdFlag.obj +.\Release\cmdHist.obj +.\Release\cmdUtils.obj +.\Release\io.obj +.\Release\ioRead.obj +.\Release\ioReadBench.obj +.\Release\ioReadBlif.obj +.\Release\ioReadEdif.obj +.\Release\ioReadPla.obj +.\Release\ioReadVerilog.obj +.\Release\ioUtil.obj +.\Release\ioWriteBench.obj +.\Release\ioWriteBlif.obj +.\Release\ioWriteCnf.obj +.\Release\ioWritePla.obj +.\Release\main.obj +.\Release\mainFrame.obj +.\Release\mainInit.obj +.\Release\mainUtils.obj +.\Release\cuddAddAbs.obj +.\Release\cuddAddApply.obj +.\Release\cuddAddFind.obj +.\Release\cuddAddInv.obj +.\Release\cuddAddIte.obj +.\Release\cuddAddNeg.obj +.\Release\cuddAddWalsh.obj +.\Release\cuddAndAbs.obj +.\Release\cuddAnneal.obj +.\Release\cuddApa.obj +.\Release\cuddAPI.obj +.\Release\cuddApprox.obj +.\Release\cuddBddAbs.obj +.\Release\cuddBddCorr.obj +.\Release\cuddBddIte.obj +.\Release\cuddBridge.obj +.\Release\cuddCache.obj +.\Release\cuddCheck.obj +.\Release\cuddClip.obj +.\Release\cuddCof.obj +.\Release\cuddCompose.obj +.\Release\cuddDecomp.obj +.\Release\cuddEssent.obj +.\Release\cuddExact.obj +.\Release\cuddExport.obj +.\Release\cuddGenCof.obj +.\Release\cuddGenetic.obj +.\Release\cuddGroup.obj +.\Release\cuddHarwell.obj +.\Release\cuddInit.obj +.\Release\cuddInteract.obj +.\Release\cuddLCache.obj +.\Release\cuddLevelQ.obj +.\Release\cuddLinear.obj +.\Release\cuddLiteral.obj +.\Release\cuddMatMult.obj +.\Release\cuddPriority.obj +.\Release\cuddRead.obj +.\Release\cuddRef.obj +.\Release\cuddReorder.obj +.\Release\cuddSat.obj +.\Release\cuddSign.obj +.\Release\cuddSolve.obj +.\Release\cuddSplit.obj +.\Release\cuddSubsetHB.obj +.\Release\cuddSubsetSP.obj +.\Release\cuddSymmetry.obj +.\Release\cuddTable.obj +.\Release\cuddUtil.obj +.\Release\cuddWindow.obj +.\Release\cuddZddCount.obj +.\Release\cuddZddFuncs.obj +.\Release\cuddZddGroup.obj +.\Release\cuddZddIsop.obj +.\Release\cuddZddLin.obj +.\Release\cuddZddMisc.obj +.\Release\cuddZddPort.obj +.\Release\cuddZddReord.obj +.\Release\cuddZddSetop.obj +.\Release\cuddZddSymm.obj +.\Release\cuddZddUtil.obj +.\Release\epd.obj +.\Release\mtrBasic.obj +.\Release\mtrGroup.obj +.\Release\parseCore.obj +.\Release\parseStack.obj +.\Release\dsdApi.obj +.\Release\dsdCheck.obj +.\Release\dsdLocal.obj +.\Release\dsdMan.obj +.\Release\dsdProc.obj +.\Release\dsdTree.obj +.\Release\reoApi.obj +.\Release\reoCore.obj +.\Release\reoProfile.obj +.\Release\reoSift.obj +.\Release\reoSwap.obj +.\Release\reoTest.obj +.\Release\reoTransfer.obj +.\Release\reoUnits.obj +.\Release\mvc.obj +.\Release\mvcApi.obj +.\Release\mvcCompare.obj +.\Release\mvcContain.obj +.\Release\mvcCover.obj +.\Release\mvcCube.obj +.\Release\mvcDivide.obj +.\Release\mvcDivisor.obj +.\Release\mvcList.obj +.\Release\mvcLits.obj +.\Release\mvcMan.obj +.\Release\mvcOpAlg.obj +.\Release\mvcOpBool.obj +.\Release\mvcPrint.obj +.\Release\mvcSort.obj +.\Release\mvcUtils.obj +.\Release\ftFactor.obj +.\Release\ftPrint.obj +.\Release\added.obj +.\Release\solver.obj +.\Release\msatActivity.obj +.\Release\msatClause.obj +.\Release\msatClauseVec.obj +.\Release\msatMem.obj +.\Release\msatOrderJ.obj +.\Release\msatQueue.obj +.\Release\msatRead.obj +.\Release\msatSolverApi.obj +.\Release\msatSolverCore.obj +.\Release\msatSolverIo.obj +.\Release\msatSolverSearch.obj +.\Release\msatSort.obj +.\Release\msatVec.obj +.\Release\fraigApi.obj +.\Release\fraigCanon.obj +.\Release\fraigFanout.obj +.\Release\fraigFeed.obj +.\Release\fraigMan.obj +.\Release\fraigMem.obj +.\Release\fraigNode.obj +.\Release\fraigPrime.obj +.\Release\fraigSat.obj +.\Release\fraigTable.obj +.\Release\fraigUtil.obj +.\Release\fraigVec.obj +.\Release\simMan.obj +.\Release\simSat.obj +.\Release\simSupp.obj +.\Release\simSym.obj +.\Release\simUnate.obj +.\Release\simUtils.obj +.\Release\fxu.obj +.\Release\fxuCreate.obj +.\Release\fxuHeapD.obj +.\Release\fxuHeapS.obj +.\Release\fxuList.obj +.\Release\fxuMatrix.obj +.\Release\fxuPair.obj +.\Release\fxuPrint.obj +.\Release\fxuReduce.obj +.\Release\fxuSelect.obj +.\Release\fxuSingle.obj +.\Release\fxuUpdate.obj +.\Release\rwrCut.obj +.\Release\rwrEva.obj +.\Release\rwrExp.obj +.\Release\rwrLib.obj +.\Release\rwrMan.obj +.\Release\rwrUtil.obj +.\Release\fpga.obj +.\Release\fpgaCore.obj +.\Release\fpgaCreate.obj +.\Release\fpgaCut.obj +.\Release\fpgaCutUtils.obj +.\Release\fpgaFanout.obj +.\Release\fpgaLib.obj +.\Release\fpgaMatch.obj +.\Release\fpgaTime.obj +.\Release\fpgaTruth.obj +.\Release\fpgaUtils.obj +.\Release\fpgaVec.obj +.\Release\mapper.obj +.\Release\mapperCanon.obj +.\Release\mapperCore.obj +.\Release\mapperCreate.obj +.\Release\mapperCut.obj +.\Release\mapperCutUtils.obj +.\Release\mapperFanout.obj +.\Release\mapperLib.obj +.\Release\mapperMatch.obj +.\Release\mapperRefs.obj +.\Release\mapperSuper.obj +.\Release\mapperTable.obj +.\Release\mapperTime.obj +.\Release\mapperTree.obj +.\Release\mapperTruth.obj +.\Release\mapperUtils.obj +.\Release\mapperVec.obj +.\Release\mio.obj +.\Release\mioApi.obj +.\Release\mioFunc.obj +.\Release\mioRead.obj +.\Release\mioUtils.obj +.\Release\super.obj +.\Release\superAnd.obj +.\Release\superGate.obj +.\Release\superWrite.obj +.\Release\extraUtilBdd.obj +.\Release\extraUtilBitMatrix.obj +.\Release\extraUtilFile.obj +.\Release\extraUtilMemory.obj +.\Release\extraUtilMisc.obj +.\Release\extraUtilProgress.obj +.\Release\extraUtilReader.obj +.\Release\st.obj +.\Release\stmm.obj +.\Release\cpu_stats.obj +.\Release\cpu_time.obj +.\Release\datalimit.obj +.\Release\getopt.obj +.\Release\pathsearch.obj +.\Release\safe_mem.obj +.\Release\strsav.obj +.\Release\texpand.obj +.\Release\abcRefactor.obj +.\Release\abcRewrite.obj  ] -Creating command line "link.exe @C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP12A2.tmp" +Creating command line "link.exe @C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP15C5.tmp"  <h3>Output Window</h3>  Compiling... +abc.c +abcAig.c +abcAttach.c +abcCheck.c +abcCollapse.c +abcCreate.c +abcDfs.c +abcDsd.c +abcFanio.c +abcFpga.c +abcFraig.c +abcFunc.c +abcFxu.c +abcLatch.c +abcMap.c +abcMinBase.c +abcMiter.c +abcNames.c +abcNetlist.c +abcPrint.c +abcReconv.c +abcRefs.c +abcRenode.c +abcSat.c +abcSeq.c +abcSeqRetime.c +abcShow.c +abcSop.c  abcStrash.c +abcSweep.c +abcTiming.c +abcUnreach.c +abcUtil.c +abcVerify.c +cmd.c +cmdAlias.c +cmdApi.c +cmdFlag.c +cmdHist.c +cmdUtils.c +io.c +ioRead.c +ioReadBench.c +ioReadBlif.c +ioReadEdif.c +ioReadPla.c +ioReadVerilog.c +ioUtil.c +ioWriteBench.c +ioWriteBlif.c +ioWriteCnf.c +ioWritePla.c +main.c +mainFrame.c +mainInit.c +mainUtils.c +cuddAddAbs.c +cuddAddApply.c +cuddAddFind.c +cuddAddInv.c +cuddAddIte.c +cuddAddNeg.c +cuddAddWalsh.c +cuddAndAbs.c +cuddAnneal.c +cuddApa.c +C:\_projects\abc\src\bdd\cudd\cuddApa.c(181) : warning C4244: 'return' : conversion from 'unsigned long ' to 'unsigned short ', possible loss of data +C:\_projects\abc\src\bdd\cudd\cuddApa.c(213) : warning C4244: 'return' : conversion from 'unsigned long ' to 'unsigned short ', possible loss of data +C:\_projects\abc\src\bdd\cudd\cuddApa.c(530) : warning C4244: '=' : conversion from 'unsigned short ' to 'unsigned char ', possible loss of data +C:\_projects\abc\src\bdd\cudd\cuddApa.c(588) : warning C4244: '=' : conversion from 'unsigned short ' to 'unsigned char ', possible loss of data +cuddAPI.c +cuddApprox.c +cuddBddAbs.c +cuddBddCorr.c +cuddBddIte.c +cuddBridge.c +cuddCache.c +C:\_projects\abc\src\bdd\cudd\cuddCache.c(902) : warning C4146: unary minus operator applied to unsigned type, result still unsigned +cuddCheck.c +cuddClip.c +cuddCof.c +cuddCompose.c +cuddDecomp.c +cuddEssent.c +cuddExact.c +cuddExport.c +cuddGenCof.c +cuddGenetic.c +cuddGroup.c +C:\_projects\abc\src\bdd\cudd\cuddGroup.c(2062) : warning C4018: '<=' : signed/unsigned mismatch +cuddHarwell.c +cuddInit.c +cuddInteract.c +cuddLCache.c +C:\_projects\abc\src\bdd\cudd\cuddLCache.c(1387) : warning C4146: unary minus operator applied to unsigned type, result still unsigned +cuddLevelQ.c +cuddLinear.c +cuddLiteral.c +cuddMatMult.c +cuddPriority.c +cuddRead.c +cuddRef.c +cuddReorder.c +C:\_projects\abc\src\bdd\cudd\cuddReorder.c(395) : warning C4146: unary minus operator applied to unsigned type, result still unsigned +cuddSat.c +C:\_projects\abc\src\bdd\cudd\cuddReorder.c(2016) : warning C4700: local variable 'minLevel' used without having been initialized +C:\_projects\abc\src\bdd\cudd\cuddReorder.c(2020) : warning C4700: local variable 'maxLevel' used without having been initialized +cuddSign.c +cuddSolve.c +cuddSplit.c +cuddSubsetHB.c +cuddSubsetSP.c +cuddSymmetry.c +cuddTable.c +C:\_projects\abc\src\bdd\cudd\cuddTable.c(1822) : warning C4018: '<' : signed/unsigned mismatch +C:\_projects\abc\src\bdd\cudd\cuddTable.c(1927) : warning C4018: '<' : signed/unsigned mismatch +C:\_projects\abc\src\bdd\cudd\cuddTable.c(2235) : warning C4018: '<' : signed/unsigned mismatch +C:\_projects\abc\src\bdd\cudd\cuddTable.c(2303) : warning C4018: '<' : signed/unsigned mismatch +C:\_projects\abc\src\bdd\cudd\cuddTable.c(2358) : warning C4146: unary minus operator applied to unsigned type, result still unsigned +cuddUtil.c +cuddWindow.c +cuddZddCount.c +cuddZddFuncs.c +cuddZddGroup.c +cuddZddIsop.c +cuddZddLin.c +cuddZddMisc.c +cuddZddPort.c +cuddZddReord.c +cuddZddSetop.c +cuddZddSymm.c +cuddZddUtil.c +epd.c +mtrBasic.c +mtrGroup.c +parseCore.c +parseStack.c +dsdApi.c +dsdCheck.c +dsdLocal.c +dsdMan.c +dsdProc.c +dsdTree.c +reoApi.c +reoCore.c +reoProfile.c +reoSift.c +reoSwap.c +reoTest.c +reoTransfer.c +reoUnits.c +mvc.c +mvcApi.c +mvcCompare.c +mvcContain.c +mvcCover.c +mvcCube.c +mvcDivide.c +mvcDivisor.c +mvcList.c +mvcLits.c +mvcMan.c +mvcOpAlg.c +mvcOpBool.c +mvcPrint.c +mvcSort.c +mvcUtils.c +ftFactor.c +ftPrint.c +added.c +solver.c +msatActivity.c +msatClause.c +msatClauseVec.c +msatMem.c +msatOrderJ.c +msatQueue.c +msatRead.c +msatSolverApi.c +msatSolverCore.c +msatSolverIo.c +msatSolverSearch.c +msatSort.c +msatVec.c +fraigApi.c +fraigCanon.c +fraigFanout.c +fraigFeed.c +fraigMan.c +fraigMem.c +fraigNode.c +fraigPrime.c +fraigSat.c +fraigTable.c +fraigUtil.c +fraigVec.c +simMan.c +simSat.c +simSupp.c +simSym.c +simUnate.c +simUtils.c +fxu.c +fxuCreate.c +fxuHeapD.c +fxuHeapS.c +fxuList.c +fxuMatrix.c +fxuPair.c +fxuPrint.c +fxuReduce.c +fxuSelect.c +fxuSingle.c +fxuUpdate.c +rwrCut.c +rwrEva.c +rwrExp.c +rwrLib.c +rwrMan.c  rwrUtil.c +fpga.c +fpgaCore.c +fpgaCreate.c +fpgaCut.c +fpgaCutUtils.c +fpgaFanout.c +fpgaLib.c +fpgaMatch.c +fpgaTime.c +fpgaTruth.c +fpgaUtils.c +fpgaVec.c +mapper.c +mapperCanon.c +mapperCore.c +mapperCreate.c +mapperCut.c +mapperCutUtils.c +mapperFanout.c +mapperLib.c +mapperMatch.c +mapperRefs.c +mapperSuper.c +mapperTable.c +mapperTime.c +mapperTree.c +mapperTruth.c +mapperUtils.c +mapperVec.c +mio.c +mioApi.c +mioFunc.c +mioRead.c +mioUtils.c +super.c +superAnd.c +superGate.c +superWrite.c +extraUtilBdd.c +extraUtilBitMatrix.c +extraUtilFile.c +extraUtilMemory.c +extraUtilMisc.c +extraUtilProgress.c +extraUtilReader.c +st.c +stmm.c +cpu_stats.c +cpu_time.c +datalimit.c +getopt.c +pathsearch.c +safe_mem.c +strsav.c +texpand.c +abcRefactor.c +abcRewrite.c  Linking... -Creating temporary file "C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP12A3.tmp" with contents +Creating temporary file "C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP15C7.tmp" with contents  [ -/nologo /o"Debug/abc.bsc"  -.\Debug\abc.sbr -.\Debug\abcAig.sbr -.\Debug\abcAttach.sbr -.\Debug\abcCheck.sbr -.\Debug\abcCollapse.sbr -.\Debug\abcCreate.sbr -.\Debug\abcDfs.sbr -.\Debug\abcDsd.sbr -.\Debug\abcFanio.sbr -.\Debug\abcFpga.sbr -.\Debug\abcFraig.sbr -.\Debug\abcFunc.sbr -.\Debug\abcFxu.sbr -.\Debug\abcLatch.sbr -.\Debug\abcMap.sbr -.\Debug\abcMinBase.sbr -.\Debug\abcMiter.sbr -.\Debug\abcNames.sbr -.\Debug\abcNetlist.sbr -.\Debug\abcPrint.sbr -.\Debug\abcRefs.sbr -.\Debug\abcRenode.sbr -.\Debug\abcRes.sbr -.\Debug\abcSat.sbr -.\Debug\abcSeq.sbr -.\Debug\abcSeqRetime.sbr -.\Debug\abcShow.sbr -.\Debug\abcSop.sbr -.\Debug\abcStrash.sbr -.\Debug\abcSweep.sbr -.\Debug\abcTiming.sbr -.\Debug\abcUnreach.sbr -.\Debug\abcUtil.sbr -.\Debug\abcVerify.sbr -.\Debug\cmd.sbr -.\Debug\cmdAlias.sbr -.\Debug\cmdApi.sbr -.\Debug\cmdFlag.sbr -.\Debug\cmdHist.sbr -.\Debug\cmdUtils.sbr -.\Debug\io.sbr -.\Debug\ioRead.sbr -.\Debug\ioReadBench.sbr -.\Debug\ioReadBlif.sbr -.\Debug\ioReadEdif.sbr -.\Debug\ioReadPla.sbr -.\Debug\ioReadVerilog.sbr -.\Debug\ioUtil.sbr -.\Debug\ioWriteBench.sbr -.\Debug\ioWriteBlif.sbr -.\Debug\ioWriteCnf.sbr -.\Debug\ioWritePla.sbr -.\Debug\main.sbr -.\Debug\mainFrame.sbr -.\Debug\mainInit.sbr -.\Debug\mainUtils.sbr -.\Debug\cuddAddAbs.sbr -.\Debug\cuddAddApply.sbr -.\Debug\cuddAddFind.sbr -.\Debug\cuddAddInv.sbr -.\Debug\cuddAddIte.sbr -.\Debug\cuddAddNeg.sbr -.\Debug\cuddAddWalsh.sbr -.\Debug\cuddAndAbs.sbr -.\Debug\cuddAnneal.sbr -.\Debug\cuddApa.sbr -.\Debug\cuddAPI.sbr -.\Debug\cuddApprox.sbr -.\Debug\cuddBddAbs.sbr -.\Debug\cuddBddCorr.sbr -.\Debug\cuddBddIte.sbr -.\Debug\cuddBridge.sbr -.\Debug\cuddCache.sbr -.\Debug\cuddCheck.sbr -.\Debug\cuddClip.sbr -.\Debug\cuddCof.sbr -.\Debug\cuddCompose.sbr -.\Debug\cuddDecomp.sbr -.\Debug\cuddEssent.sbr -.\Debug\cuddExact.sbr -.\Debug\cuddExport.sbr -.\Debug\cuddGenCof.sbr -.\Debug\cuddGenetic.sbr -.\Debug\cuddGroup.sbr -.\Debug\cuddHarwell.sbr -.\Debug\cuddInit.sbr -.\Debug\cuddInteract.sbr -.\Debug\cuddLCache.sbr -.\Debug\cuddLevelQ.sbr -.\Debug\cuddLinear.sbr -.\Debug\cuddLiteral.sbr -.\Debug\cuddMatMult.sbr -.\Debug\cuddPriority.sbr -.\Debug\cuddRead.sbr -.\Debug\cuddRef.sbr -.\Debug\cuddReorder.sbr -.\Debug\cuddSat.sbr -.\Debug\cuddSign.sbr -.\Debug\cuddSolve.sbr -.\Debug\cuddSplit.sbr -.\Debug\cuddSubsetHB.sbr -.\Debug\cuddSubsetSP.sbr -.\Debug\cuddSymmetry.sbr -.\Debug\cuddTable.sbr -.\Debug\cuddUtil.sbr -.\Debug\cuddWindow.sbr -.\Debug\cuddZddCount.sbr -.\Debug\cuddZddFuncs.sbr -.\Debug\cuddZddGroup.sbr -.\Debug\cuddZddIsop.sbr -.\Debug\cuddZddLin.sbr -.\Debug\cuddZddMisc.sbr -.\Debug\cuddZddPort.sbr -.\Debug\cuddZddReord.sbr -.\Debug\cuddZddSetop.sbr -.\Debug\cuddZddSymm.sbr -.\Debug\cuddZddUtil.sbr -.\Debug\epd.sbr -.\Debug\mtrBasic.sbr -.\Debug\mtrGroup.sbr -.\Debug\parseCore.sbr -.\Debug\parseStack.sbr -.\Debug\dsdApi.sbr -.\Debug\dsdCheck.sbr -.\Debug\dsdLocal.sbr -.\Debug\dsdMan.sbr -.\Debug\dsdProc.sbr -.\Debug\dsdTree.sbr -.\Debug\reoApi.sbr -.\Debug\reoCore.sbr -.\Debug\reoProfile.sbr -.\Debug\reoSift.sbr -.\Debug\reoSwap.sbr -.\Debug\reoTest.sbr -.\Debug\reoTransfer.sbr -.\Debug\reoUnits.sbr -.\Debug\mvc.sbr -.\Debug\mvcApi.sbr -.\Debug\mvcCompare.sbr -.\Debug\mvcContain.sbr -.\Debug\mvcCover.sbr -.\Debug\mvcCube.sbr -.\Debug\mvcDivide.sbr -.\Debug\mvcDivisor.sbr -.\Debug\mvcList.sbr -.\Debug\mvcLits.sbr -.\Debug\mvcMan.sbr -.\Debug\mvcOpAlg.sbr -.\Debug\mvcOpBool.sbr -.\Debug\mvcPrint.sbr -.\Debug\mvcSort.sbr -.\Debug\mvcUtils.sbr -.\Debug\ftFactor.sbr -.\Debug\ftPrint.sbr -.\Debug\added.sbr -.\Debug\solver.sbr -.\Debug\msatActivity.sbr -.\Debug\msatClause.sbr -.\Debug\msatClauseVec.sbr -.\Debug\msatMem.sbr -.\Debug\msatOrderJ.sbr -.\Debug\msatQueue.sbr -.\Debug\msatRead.sbr -.\Debug\msatSolverApi.sbr -.\Debug\msatSolverCore.sbr -.\Debug\msatSolverIo.sbr -.\Debug\msatSolverSearch.sbr -.\Debug\msatSort.sbr -.\Debug\msatVec.sbr -.\Debug\fraigApi.sbr -.\Debug\fraigCanon.sbr -.\Debug\fraigFanout.sbr -.\Debug\fraigFeed.sbr -.\Debug\fraigMan.sbr -.\Debug\fraigMem.sbr -.\Debug\fraigNode.sbr -.\Debug\fraigPrime.sbr -.\Debug\fraigSat.sbr -.\Debug\fraigTable.sbr -.\Debug\fraigUtil.sbr -.\Debug\fraigVec.sbr -.\Debug\simMan.sbr -.\Debug\simSat.sbr -.\Debug\simSupp.sbr -.\Debug\simSym.sbr -.\Debug\simUnate.sbr -.\Debug\simUtils.sbr -.\Debug\fxu.sbr -.\Debug\fxuCreate.sbr -.\Debug\fxuHeapD.sbr -.\Debug\fxuHeapS.sbr -.\Debug\fxuList.sbr -.\Debug\fxuMatrix.sbr -.\Debug\fxuPair.sbr -.\Debug\fxuPrint.sbr -.\Debug\fxuReduce.sbr -.\Debug\fxuSelect.sbr -.\Debug\fxuSingle.sbr -.\Debug\fxuUpdate.sbr -.\Debug\fpga.sbr -.\Debug\fpgaCore.sbr -.\Debug\fpgaCreate.sbr -.\Debug\fpgaCut.sbr -.\Debug\fpgaCutUtils.sbr -.\Debug\fpgaFanout.sbr -.\Debug\fpgaLib.sbr -.\Debug\fpgaMatch.sbr -.\Debug\fpgaTime.sbr -.\Debug\fpgaTruth.sbr -.\Debug\fpgaUtils.sbr -.\Debug\fpgaVec.sbr -.\Debug\mapper.sbr -.\Debug\mapperCanon.sbr -.\Debug\mapperCore.sbr -.\Debug\mapperCreate.sbr -.\Debug\mapperCut.sbr -.\Debug\mapperCutUtils.sbr -.\Debug\mapperFanout.sbr -.\Debug\mapperLib.sbr -.\Debug\mapperMatch.sbr -.\Debug\mapperRefs.sbr -.\Debug\mapperSuper.sbr -.\Debug\mapperTable.sbr -.\Debug\mapperTime.sbr -.\Debug\mapperTree.sbr -.\Debug\mapperTruth.sbr -.\Debug\mapperUtils.sbr -.\Debug\mapperVec.sbr -.\Debug\mio.sbr -.\Debug\mioApi.sbr -.\Debug\mioFunc.sbr -.\Debug\mioRead.sbr -.\Debug\mioUtils.sbr -.\Debug\super.sbr -.\Debug\superAnd.sbr -.\Debug\superGate.sbr -.\Debug\superWrite.sbr -.\Debug\extraUtilBdd.sbr -.\Debug\extraUtilBitMatrix.sbr -.\Debug\extraUtilFile.sbr -.\Debug\extraUtilMemory.sbr -.\Debug\extraUtilMisc.sbr -.\Debug\extraUtilProgress.sbr -.\Debug\extraUtilReader.sbr -.\Debug\st.sbr -.\Debug\stmm.sbr -.\Debug\cpu_stats.sbr -.\Debug\cpu_time.sbr -.\Debug\datalimit.sbr -.\Debug\getopt.sbr -.\Debug\pathsearch.sbr -.\Debug\safe_mem.sbr -.\Debug\strsav.sbr -.\Debug\texpand.sbr -.\Debug\abcReconv.sbr -.\Debug\abcResRef.sbr -.\Debug\rwrMan.sbr -.\Debug\rwrCut.sbr -.\Debug\rwrExp.sbr -.\Debug\rwrLib.sbr -.\Debug\rwrEva.sbr -.\Debug\rwrUtil.sbr] -Creating command line "bscmake.exe @C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP12A3.tmp" +/nologo /o"Release/abc.bsc"  +.\Release\abc.sbr +.\Release\abcAig.sbr +.\Release\abcAttach.sbr +.\Release\abcCheck.sbr +.\Release\abcCollapse.sbr +.\Release\abcCreate.sbr +.\Release\abcDfs.sbr +.\Release\abcDsd.sbr +.\Release\abcFanio.sbr +.\Release\abcFpga.sbr +.\Release\abcFraig.sbr +.\Release\abcFunc.sbr +.\Release\abcFxu.sbr +.\Release\abcLatch.sbr +.\Release\abcMap.sbr +.\Release\abcMinBase.sbr +.\Release\abcMiter.sbr +.\Release\abcNames.sbr +.\Release\abcNetlist.sbr +.\Release\abcPrint.sbr +.\Release\abcReconv.sbr +.\Release\abcRefs.sbr +.\Release\abcRenode.sbr +.\Release\abcSat.sbr +.\Release\abcSeq.sbr +.\Release\abcSeqRetime.sbr +.\Release\abcShow.sbr +.\Release\abcSop.sbr +.\Release\abcStrash.sbr +.\Release\abcSweep.sbr +.\Release\abcTiming.sbr +.\Release\abcUnreach.sbr +.\Release\abcUtil.sbr +.\Release\abcVerify.sbr +.\Release\cmd.sbr +.\Release\cmdAlias.sbr +.\Release\cmdApi.sbr +.\Release\cmdFlag.sbr +.\Release\cmdHist.sbr +.\Release\cmdUtils.sbr +.\Release\io.sbr +.\Release\ioRead.sbr +.\Release\ioReadBench.sbr +.\Release\ioReadBlif.sbr +.\Release\ioReadEdif.sbr +.\Release\ioReadPla.sbr +.\Release\ioReadVerilog.sbr +.\Release\ioUtil.sbr +.\Release\ioWriteBench.sbr +.\Release\ioWriteBlif.sbr +.\Release\ioWriteCnf.sbr +.\Release\ioWritePla.sbr +.\Release\main.sbr +.\Release\mainFrame.sbr +.\Release\mainInit.sbr +.\Release\mainUtils.sbr +.\Release\cuddAddAbs.sbr +.\Release\cuddAddApply.sbr +.\Release\cuddAddFind.sbr +.\Release\cuddAddInv.sbr +.\Release\cuddAddIte.sbr +.\Release\cuddAddNeg.sbr +.\Release\cuddAddWalsh.sbr +.\Release\cuddAndAbs.sbr +.\Release\cuddAnneal.sbr +.\Release\cuddApa.sbr +.\Release\cuddAPI.sbr +.\Release\cuddApprox.sbr +.\Release\cuddBddAbs.sbr +.\Release\cuddBddCorr.sbr +.\Release\cuddBddIte.sbr +.\Release\cuddBridge.sbr +.\Release\cuddCache.sbr +.\Release\cuddCheck.sbr +.\Release\cuddClip.sbr +.\Release\cuddCof.sbr +.\Release\cuddCompose.sbr +.\Release\cuddDecomp.sbr +.\Release\cuddEssent.sbr +.\Release\cuddExact.sbr +.\Release\cuddExport.sbr +.\Release\cuddGenCof.sbr +.\Release\cuddGenetic.sbr +.\Release\cuddGroup.sbr +.\Release\cuddHarwell.sbr +.\Release\cuddInit.sbr +.\Release\cuddInteract.sbr +.\Release\cuddLCache.sbr +.\Release\cuddLevelQ.sbr +.\Release\cuddLinear.sbr +.\Release\cuddLiteral.sbr +.\Release\cuddMatMult.sbr +.\Release\cuddPriority.sbr +.\Release\cuddRead.sbr +.\Release\cuddRef.sbr +.\Release\cuddReorder.sbr +.\Release\cuddSat.sbr +.\Release\cuddSign.sbr +.\Release\cuddSolve.sbr +.\Release\cuddSplit.sbr +.\Release\cuddSubsetHB.sbr +.\Release\cuddSubsetSP.sbr +.\Release\cuddSymmetry.sbr +.\Release\cuddTable.sbr +.\Release\cuddUtil.sbr +.\Release\cuddWindow.sbr +.\Release\cuddZddCount.sbr +.\Release\cuddZddFuncs.sbr +.\Release\cuddZddGroup.sbr +.\Release\cuddZddIsop.sbr +.\Release\cuddZddLin.sbr +.\Release\cuddZddMisc.sbr +.\Release\cuddZddPort.sbr +.\Release\cuddZddReord.sbr +.\Release\cuddZddSetop.sbr +.\Release\cuddZddSymm.sbr +.\Release\cuddZddUtil.sbr +.\Release\epd.sbr +.\Release\mtrBasic.sbr +.\Release\mtrGroup.sbr +.\Release\parseCore.sbr +.\Release\parseStack.sbr +.\Release\dsdApi.sbr +.\Release\dsdCheck.sbr +.\Release\dsdLocal.sbr +.\Release\dsdMan.sbr +.\Release\dsdProc.sbr +.\Release\dsdTree.sbr +.\Release\reoApi.sbr +.\Release\reoCore.sbr +.\Release\reoProfile.sbr +.\Release\reoSift.sbr +.\Release\reoSwap.sbr +.\Release\reoTest.sbr +.\Release\reoTransfer.sbr +.\Release\reoUnits.sbr +.\Release\mvc.sbr +.\Release\mvcApi.sbr +.\Release\mvcCompare.sbr +.\Release\mvcContain.sbr +.\Release\mvcCover.sbr +.\Release\mvcCube.sbr +.\Release\mvcDivide.sbr +.\Release\mvcDivisor.sbr +.\Release\mvcList.sbr +.\Release\mvcLits.sbr +.\Release\mvcMan.sbr +.\Release\mvcOpAlg.sbr +.\Release\mvcOpBool.sbr +.\Release\mvcPrint.sbr +.\Release\mvcSort.sbr +.\Release\mvcUtils.sbr +.\Release\ftFactor.sbr +.\Release\ftPrint.sbr +.\Release\added.sbr +.\Release\solver.sbr +.\Release\msatActivity.sbr +.\Release\msatClause.sbr +.\Release\msatClauseVec.sbr +.\Release\msatMem.sbr +.\Release\msatOrderJ.sbr +.\Release\msatQueue.sbr +.\Release\msatRead.sbr +.\Release\msatSolverApi.sbr +.\Release\msatSolverCore.sbr +.\Release\msatSolverIo.sbr +.\Release\msatSolverSearch.sbr +.\Release\msatSort.sbr +.\Release\msatVec.sbr +.\Release\fraigApi.sbr +.\Release\fraigCanon.sbr +.\Release\fraigFanout.sbr +.\Release\fraigFeed.sbr +.\Release\fraigMan.sbr +.\Release\fraigMem.sbr +.\Release\fraigNode.sbr +.\Release\fraigPrime.sbr +.\Release\fraigSat.sbr +.\Release\fraigTable.sbr +.\Release\fraigUtil.sbr +.\Release\fraigVec.sbr +.\Release\simMan.sbr +.\Release\simSat.sbr +.\Release\simSupp.sbr +.\Release\simSym.sbr +.\Release\simUnate.sbr +.\Release\simUtils.sbr +.\Release\fxu.sbr +.\Release\fxuCreate.sbr +.\Release\fxuHeapD.sbr +.\Release\fxuHeapS.sbr +.\Release\fxuList.sbr +.\Release\fxuMatrix.sbr +.\Release\fxuPair.sbr +.\Release\fxuPrint.sbr +.\Release\fxuReduce.sbr +.\Release\fxuSelect.sbr +.\Release\fxuSingle.sbr +.\Release\fxuUpdate.sbr +.\Release\rwrCut.sbr +.\Release\rwrEva.sbr +.\Release\rwrExp.sbr +.\Release\rwrLib.sbr +.\Release\rwrMan.sbr +.\Release\rwrUtil.sbr +.\Release\fpga.sbr +.\Release\fpgaCore.sbr +.\Release\fpgaCreate.sbr +.\Release\fpgaCut.sbr +.\Release\fpgaCutUtils.sbr +.\Release\fpgaFanout.sbr +.\Release\fpgaLib.sbr +.\Release\fpgaMatch.sbr +.\Release\fpgaTime.sbr +.\Release\fpgaTruth.sbr +.\Release\fpgaUtils.sbr +.\Release\fpgaVec.sbr +.\Release\mapper.sbr +.\Release\mapperCanon.sbr +.\Release\mapperCore.sbr +.\Release\mapperCreate.sbr +.\Release\mapperCut.sbr +.\Release\mapperCutUtils.sbr +.\Release\mapperFanout.sbr +.\Release\mapperLib.sbr +.\Release\mapperMatch.sbr +.\Release\mapperRefs.sbr +.\Release\mapperSuper.sbr +.\Release\mapperTable.sbr +.\Release\mapperTime.sbr +.\Release\mapperTree.sbr +.\Release\mapperTruth.sbr +.\Release\mapperUtils.sbr +.\Release\mapperVec.sbr +.\Release\mio.sbr +.\Release\mioApi.sbr +.\Release\mioFunc.sbr +.\Release\mioRead.sbr +.\Release\mioUtils.sbr +.\Release\super.sbr +.\Release\superAnd.sbr +.\Release\superGate.sbr +.\Release\superWrite.sbr +.\Release\extraUtilBdd.sbr +.\Release\extraUtilBitMatrix.sbr +.\Release\extraUtilFile.sbr +.\Release\extraUtilMemory.sbr +.\Release\extraUtilMisc.sbr +.\Release\extraUtilProgress.sbr +.\Release\extraUtilReader.sbr +.\Release\st.sbr +.\Release\stmm.sbr +.\Release\cpu_stats.sbr +.\Release\cpu_time.sbr +.\Release\datalimit.sbr +.\Release\getopt.sbr +.\Release\pathsearch.sbr +.\Release\safe_mem.sbr +.\Release\strsav.sbr +.\Release\texpand.sbr +.\Release\abcRefactor.sbr +.\Release\abcRewrite.sbr] +Creating command line "bscmake.exe @C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP15C7.tmp"  Creating browse info file...  <h3>Output Window</h3>  <h3>Results</h3> -abc.exe - 0 error(s), 0 warning(s) +abc.exe - 0 error(s), 15 warning(s)  </pre>  </body>  </html> diff --git a/src/base/abc/abc.c b/src/base/abc/abc.c index ca18265d..be813996 100644 --- a/src/base/abc/abc.c +++ b/src/base/abc/abc.c @@ -148,7 +148,7 @@ void Abc_Init( Abc_Frame_t * pAbc )      Cmd_CommandAdd( pAbc, "Verification", "sec",           Abc_CommandSec,              0 );      Ft_FactorStartMan(); -//    Rwt_ManExploreStart(); +//    Rwt_Man4ExploreStart();  }  /**Function************************************************************* @@ -166,7 +166,7 @@ void Abc_End()  {      Ft_FactorStopMan();      Abc_NtkFraigStoreClean(); -//    Rwt_ManExplorePrint(); +//    Rwt_Man4ExplorePrint();  }  /**Function************************************************************* @@ -1323,20 +1323,23 @@ int Abc_CommandRewrite( Abc_Frame_t * pAbc, int argc, char ** argv )      Abc_Ntk_t * pNtk;      int c;      bool fVerbose; +    // external functions +    extern void * Abc_NtkManRwrStart( char * pFileName ); +    extern void   Abc_NtkManRwrStop( void * p ); +    extern int    Abc_NtkRewrite( Abc_Ntk_t * pNtk ); +/*      { -        Abc_ManRwr_t * p; +        void * p;          int fFlag = 0; -          if ( fFlag )              p = Abc_NtkManRwrStart( NULL );          else              p = Abc_NtkManRwrStart( "data.aaa" ); -          Abc_NtkManRwrStop( p );          return 0;      } - +*/      pNtk = Abc_FrameReadNet(pAbc);      pOut = Abc_FrameReadOut(pAbc);      pErr = Abc_FrameReadErr(pAbc); @@ -1406,22 +1409,23 @@ int Abc_CommandRefactor( Abc_Frame_t * pAbc, int argc, char ** argv )      FILE * pOut, * pErr;      Abc_Ntk_t * pNtk;      int c; -    Abc_ManRef_t * p; -    bool fVerbose;      int nNodeSizeMax;      int nConeSizeMax; +    bool fUseDcs; +    bool fVerbose; +    extern int Abc_NtkRefactor( Abc_Ntk_t * pNtk, int nNodeSizeMax, int nConeSizeMax, bool fUseDcs, bool fVerbose );      pNtk = Abc_FrameReadNet(pAbc);      pOut = Abc_FrameReadOut(pAbc);      pErr = Abc_FrameReadErr(pAbc);      // set defaults -    p = Abc_NtkManRefStart(); -    fVerbose     =  0;      nNodeSizeMax = 10;      nConeSizeMax = 10; +    fUseDcs      =  0; +    fVerbose     =  0;      util_getopt_reset(); -    while ( ( c = util_getopt( argc, argv, "ncvh" ) ) != EOF ) +    while ( ( c = util_getopt( argc, argv, "ncdvh" ) ) != EOF )      {          switch ( c )          { @@ -1447,6 +1451,9 @@ int Abc_CommandRefactor( Abc_Frame_t * pAbc, int argc, char ** argv )              if ( nConeSizeMax < 0 )                   goto usage;              break; +        case 'd': +            fUseDcs ^= 1; +            break;          case 'v':              fVerbose ^= 1;              break; @@ -1460,24 +1467,21 @@ int Abc_CommandRefactor( Abc_Frame_t * pAbc, int argc, char ** argv )      if ( pNtk == NULL )      {          fprintf( pErr, "Empty network.\n" ); -        Abc_NtkManRefStop( p );          return 1;      }      if ( !Abc_NtkIsAig(pNtk) )      {          fprintf( pErr, "This command can only be applied to an AIG.\n" ); -        Abc_NtkManRefStop( p );          return 1;      }      if ( Abc_NtkCountChoiceNodes(pNtk) )      {          fprintf( pErr, "AIG resynthesis cannot be applied to AIGs with choice nodes.\n" ); -        Abc_NtkManRefStop( p );          return 1;      }      // modify the current network -    if ( !Abc_NtkRefactor( pNtk, p ) ) +    if ( !Abc_NtkRefactor( pNtk, nNodeSizeMax, nConeSizeMax, fUseDcs, fVerbose ) )      {          fprintf( pErr, "Refactoring has failed.\n" );          return 1; @@ -1485,10 +1489,11 @@ int Abc_CommandRefactor( Abc_Frame_t * pAbc, int argc, char ** argv )      return 0;  usage: -    fprintf( pErr, "usage: refactor [-n num] [-c num] [-vh]\n" ); +    fprintf( pErr, "usage: refactor [-n num] [-c num] [-dvh]\n" );      fprintf( pErr, "\t         performs technology-independent refactoring of the AIG\n" );      fprintf( pErr, "\t-n num : the max support of the collapsed node [default = %d]\n", nNodeSizeMax );        fprintf( pErr, "\t-c num : the max support of the containing cone [default = %d]\n", nConeSizeMax );   +    fprintf( pErr, "\t-d     : toggle use of don't-cares [default = %s]\n", fUseDcs? "yes": "no" );      fprintf( pErr, "\t-v     : toggle verbose printout [default = %s]\n", fVerbose? "yes": "no" );      fprintf( pErr, "\t-h     : print the command usage\n");      return 1; diff --git a/src/base/abc/abc.h b/src/base/abc/abc.h index b6d15951..18923f26 100644 --- a/src/base/abc/abc.h +++ b/src/base/abc/abc.h @@ -89,8 +89,6 @@ typedef struct Abc_Ntk_t_     Abc_Ntk_t;  typedef struct Abc_Aig_t_     Abc_Aig_t;  typedef struct Abc_ManTime_t_ Abc_ManTime_t;  typedef struct Abc_ManCut_t_  Abc_ManCut_t; -typedef struct Abc_ManRef_t_  Abc_ManRef_t; -typedef struct Abc_ManRwr_t_  Abc_ManRwr_t;  typedef struct Abc_Time_t_    Abc_Time_t;  struct Abc_Time_t_ @@ -375,6 +373,7 @@ extern int                Abc_AigGetLevelNum( Abc_Ntk_t * pNtk );  extern Abc_Obj_t *        Abc_AigConst1( Abc_Aig_t * pMan );  extern Abc_Obj_t *        Abc_AigReset( Abc_Aig_t * pMan );  extern Abc_Obj_t *        Abc_AigAnd( Abc_Aig_t * pMan, Abc_Obj_t * p0, Abc_Obj_t * p1 ); +extern Abc_Obj_t *        Abc_AigAndLookup( Abc_Aig_t * pMan, Abc_Obj_t * p0, Abc_Obj_t * p1 );  extern Abc_Obj_t *        Abc_AigOr( Abc_Aig_t * pMan, Abc_Obj_t * p0, Abc_Obj_t * p1 );  extern Abc_Obj_t *        Abc_AigXor( Abc_Aig_t * pMan, Abc_Obj_t * p0, Abc_Obj_t * p1 );  extern Abc_Obj_t *        Abc_AigMiter( Abc_Aig_t * pMan, Vec_Ptr_t * vPairs ); @@ -494,33 +493,18 @@ extern void               Abc_NodePrintFactor( FILE * pFile, Abc_Obj_t * pNode )  extern void               Abc_NtkPrintLevel( FILE * pFile, Abc_Ntk_t * pNtk, int fProfile );  extern void               Abc_NodePrintLevel( FILE * pFile, Abc_Obj_t * pNode );  /*=== abcReconv.c ==========================================================*/ -extern Abc_ManCut_t *     Abc_NtkManCutStart(); +extern Abc_ManCut_t *     Abc_NtkManCutStart( int nNodeSizeMax, int nConeSizeMax );  extern void               Abc_NtkManCutStop( Abc_ManCut_t * p ); -extern void               Abc_NodeFindCut( Abc_ManCut_t * p ); +extern Vec_Ptr_t *        Abc_NodeFindCut( Abc_ManCut_t * p, Abc_Obj_t * pRoot );  extern DdNode *           Abc_NodeConeBdd( DdManager * dd, DdNode ** pbVars, Abc_Obj_t * pNode, Vec_Ptr_t * vFanins, Vec_Ptr_t * vVisited );  extern void               Abc_NodeCollectTfoCands( Abc_Ntk_t * pNtk, Abc_Obj_t * pRoot, Vec_Ptr_t * vFanins, int LevelMax, Vec_Vec_t * vLevels, Vec_Ptr_t * vResult );  /*=== abcRefs.c ==========================================================*/  extern int                Abc_NodeMffcSize( Abc_Obj_t * pNode );  extern int                Abc_NodeMffcLabel( Abc_Obj_t * pNode ); +extern void               Abc_NodeUpdate( Abc_Obj_t * pNode, Vec_Ptr_t * vFanins, Vec_Int_t * vForm, int nGain );  /*=== abcRenode.c ==========================================================*/  extern Abc_Ntk_t *        Abc_NtkRenode( Abc_Ntk_t * pNtk, int nThresh, int nFaninMax, int fCnf, int fMulti, int fSimple );  extern DdNode *           Abc_NtkRenodeDeriveBdd( DdManager * dd, Abc_Obj_t * pNodeOld, Vec_Ptr_t * vFaninsOld ); -/*=== abcRes.c ==========================================================*/ -extern int                Abc_NtkRewrite( Abc_Ntk_t * pNtk ); -extern int                Abc_NtkRefactor( Abc_Ntk_t * pNtk, Abc_ManRef_t * p ); -/*=== abcResRef.c ==========================================================*/ -extern Abc_ManRef_t *     Abc_NtkManRefStart(); -extern void               Abc_NtkManRefStop( Abc_ManRef_t * p ); -extern bool               Abc_NodeRefactor( Abc_ManRef_t * p, Abc_Obj_t * pNode ); -extern Vec_Int_t *        Abc_NtkManRefResult( Abc_ManRef_t * p );  -/*=== abcResRwr.c ==========================================================*/ -extern Abc_ManRwr_t *     Abc_NtkManRwrStart( char * pFileName ); -extern void               Abc_NtkManRwrStop( Abc_ManRwr_t * p ); -extern void               Abc_NtkManRwrStartCuts( Abc_ManRwr_t * p, Abc_Ntk_t * pNtk ); -extern void               Abc_NodeRwrComputeCuts( Abc_ManRwr_t * p, Abc_Obj_t * pNode ); -extern int                Abc_NodeRwrRewrite( Abc_ManRwr_t * p, Abc_Obj_t * pNode ); -extern Vec_Int_t *        Abc_NtkManRwrDecs( Abc_ManRwr_t * p ); -extern Vec_Ptr_t *        Abc_NtkManRwrFanins( Abc_ManRwr_t * p );  /*=== abcSat.c ==========================================================*/  extern bool               Abc_NtkMiterSat( Abc_Ntk_t * pNtk, int fVerbose );  extern solver *           Abc_NtkMiterSatCreate( Abc_Ntk_t * pNtk ); @@ -561,6 +545,7 @@ extern void               Abc_SopAddCnfToSolver( solver * pSat, char * pClauses,  /*=== abcStrash.c ==========================================================*/  extern Abc_Ntk_t *        Abc_NtkStrash( Abc_Ntk_t * pNtk, bool fAllNodes );  extern Abc_Obj_t *        Abc_NodeStrashDec( Abc_Aig_t * pMan, Vec_Ptr_t * vFanins, Vec_Int_t * vForm ); +extern int                Abc_NodeStrashDecCount( Abc_Aig_t * pMan, Vec_Ptr_t * vFanins, Vec_Int_t * vForm, Vec_Int_t * vLevels, int NodeMax, int LevelMax );  extern int                Abc_NtkAppend( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2 );  extern Abc_Ntk_t *        Abc_NtkBalance( Abc_Ntk_t * pNtk, bool fDuplicate );  /*=== abcSweep.c ==========================================================*/ @@ -582,6 +567,7 @@ extern void               Abc_NtkSetNodeLevelsArrival( Abc_Ntk_t * pNtk );  extern float *            Abc_NtkGetCiArrivalFloats( Abc_Ntk_t * pNtk );  extern Abc_Time_t *       Abc_NtkGetCiArrivalTimes( Abc_Ntk_t * pNtk );  extern float              Abc_NtkDelayTrace( Abc_Ntk_t * pNtk ); +extern Vec_Int_t *        Abc_NtkGetRequiredLevels( Abc_Ntk_t * pNtk );  /*=== abcTravId.c ==========================================================*/  extern void               Abc_NtkIncrementTravId( Abc_Ntk_t * pNtk );  extern void               Abc_NodeSetTravId( Abc_Obj_t * pObj, int TravId ); diff --git a/src/base/abc/abcAig.c b/src/base/abc/abcAig.c index 2f123dd3..25237868 100644 --- a/src/base/abc/abcAig.c +++ b/src/base/abc/abcAig.c @@ -78,7 +78,6 @@ static inline unsigned Abc_HashKey2( Abc_Obj_t * p0, Abc_Obj_t * p1, int TableSi  // structural hash table procedures  static Abc_Obj_t * Abc_AigAndCreate( Abc_Aig_t * pMan, Abc_Obj_t * p0, Abc_Obj_t * p1 );  static Abc_Obj_t * Abc_AigAndCreateFrom( Abc_Aig_t * pMan, Abc_Obj_t * p0, Abc_Obj_t * p1, Abc_Obj_t * pAnd ); -static Abc_Obj_t * Abc_AigAndLookup( Abc_Aig_t * pMan, Abc_Obj_t * p0, Abc_Obj_t * p1 );  static void        Abc_AigAndDelete( Abc_Aig_t * pMan, Abc_Obj_t * pThis );  static void        Abc_AigResize( Abc_Aig_t * pMan );  // incremental AIG procedures diff --git a/src/base/abc/abcReconv.c b/src/base/abc/abcReconv.c index 7f4588a2..82adc92c 100644 --- a/src/base/abc/abcReconv.c +++ b/src/base/abc/abcReconv.c @@ -31,7 +31,6 @@ struct Abc_ManCut_t_      int              nNodeSizeMax;  // the limit on the size of the supernode      int              nConeSizeMax;  // the limit on the size of the containing cone      // internal parameters -    Abc_Obj_t *      pNode;         // the node currently considered      Vec_Ptr_t *      vFaninsNode;   // fanins of the supernode      Vec_Ptr_t *      vInsideNode;   // inside of the supernode      Vec_Ptr_t *      vFaninsCone;   // fanins of the containing cone @@ -60,20 +59,20 @@ static void          Abc_NodeConeUnmark( Vec_Ptr_t * vVisited );    SeeAlso     []  ***********************************************************************/ -void Abc_NodeFindCut( Abc_ManCut_t * p ) +Vec_Ptr_t * Abc_NodeFindCut( Abc_ManCut_t * p, Abc_Obj_t * pRoot )  { -    Abc_Obj_t * pNode = p->pNode; +    Abc_Obj_t * pNode;      int i;      // mark TFI using fMarkA      Vec_PtrClear( p->vVisited ); -    Abc_NodeConeMarkCollect_rec( pNode, p->vVisited ); +    Abc_NodeConeMarkCollect_rec( pRoot, p->vVisited );      // start the reconvergence-driven node      Vec_PtrClear( p->vInsideNode );      Vec_PtrClear( p->vFaninsNode ); -    Vec_PtrPush( p->vFaninsNode, pNode ); -    pNode->fMarkB = 1; +    Vec_PtrPush( p->vFaninsNode, pRoot ); +    pRoot->fMarkB = 1;      // compute reconvergence-driven node      while ( Abc_NodeFindCut_int( p->vInsideNode, p->vFaninsNode, p->nNodeSizeMax ) ); @@ -107,6 +106,7 @@ void Abc_NodeFindCut( Abc_ManCut_t * p )      // unmark TFI using fMarkA      Abc_NodeConeUnmark( p->vVisited ); +    return p->vFaninsNode;  }  /**Function************************************************************* @@ -311,16 +311,18 @@ DdNode * Abc_NodeConeBdd( DdManager * dd, DdNode ** pbVars, Abc_Obj_t * pNode, V    SeeAlso     []  ***********************************************************************/ -Abc_ManCut_t * Abc_NtkManCutStart() +Abc_ManCut_t * Abc_NtkManCutStart( int nNodeSizeMax, int nConeSizeMax )  {      Abc_ManCut_t * p;      p = ALLOC( Abc_ManCut_t, 1 );      memset( p, 0, sizeof(Abc_ManCut_t) ); -    p->vFaninsNode = Vec_PtrAlloc( 100 ); -    p->vInsideNode = Vec_PtrAlloc( 100 ); -    p->vFaninsCone = Vec_PtrAlloc( 100 ); -    p->vInsideCone = Vec_PtrAlloc( 100 ); -    p->vVisited    = Vec_PtrAlloc( 100 ); +    p->vFaninsNode  = Vec_PtrAlloc( 100 ); +    p->vInsideNode  = Vec_PtrAlloc( 100 ); +    p->vFaninsCone  = Vec_PtrAlloc( 100 ); +    p->vInsideCone  = Vec_PtrAlloc( 100 ); +    p->vVisited     = Vec_PtrAlloc( 100 ); +    p->nNodeSizeMax = nNodeSizeMax; +    p->nConeSizeMax = nConeSizeMax;      return p;  } diff --git a/src/base/abc/abcRefactor.c b/src/base/abc/abcRefactor.c new file mode 100644 index 00000000..b60b0969 --- /dev/null +++ b/src/base/abc/abcRefactor.c @@ -0,0 +1,209 @@ +/**CFile**************************************************************** + +  FileName    [abcResRef.c] + +  SystemName  [ABC: Logic synthesis and verification system.] + +  PackageName [Network and node package.] + +  Synopsis    [Resynthesis based on refactoring.] + +  Author      [Alan Mishchenko] +   +  Affiliation [UC Berkeley] + +  Date        [Ver. 1.0. Started - June 20, 2005.] + +  Revision    [$Id: abcResRef.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $] + +***********************************************************************/ + +#include "abc.h" +#include "ft.h" + +//////////////////////////////////////////////////////////////////////// +///                        DECLARATIONS                              /// +//////////////////////////////////////////////////////////////////////// +  +typedef struct Abc_ManRef_t_   Abc_ManRef_t; +struct Abc_ManRef_t_ +{ +    // user specified parameters +    int              nNodeSizeMax;  // the limit on the size of the supernode +    int              nConeSizeMax;  // the limit on the size of the containing cone +    int              fVerbose;      // the verbosity flag +    // internal parameters +    DdManager *      dd;            // the BDD manager +    Vec_Int_t *      vReqTimes;     // required times for each node +    Vec_Str_t *      vCube;         // temporary +    Vec_Int_t *      vForm;         // temporary +    Vec_Int_t *      vLevNums;      // temporary +    Vec_Ptr_t *      vVisited;      // temporary +    // runtime statistics +    int              time1; +    int              time2; +    int              time3; +}; + +static Abc_ManRef_t * Abc_NtkManRefStart( int nNodeSizeMax, int nConeSizeMax, int fVerbose ); +static void           Abc_NtkManRefStop( Abc_ManRef_t * p ); +static Vec_Int_t *    Abc_NodeRefactor( Abc_ManRef_t * p, Abc_Obj_t * pNode, Vec_Ptr_t * vFanins ); + +//////////////////////////////////////////////////////////////////////// +///                     FUNCTION DEFITIONS                           /// +//////////////////////////////////////////////////////////////////////// + +/**Function************************************************************* + +  Synopsis    [Performs incremental resynthesis of the AIG.] + +  Description [Starting from each node, computes a reconvergence-driven cut,  +  derives BDD of the cut function, constructs ISOP, factors the cover,  +  and replaces the current implementation of the MFFC of the cut by the  +  new factored form if the number of AIG nodes is reduced. Returns the +  number of AIG nodes saved.] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +int Abc_NtkRefactor( Abc_Ntk_t * pNtk, int nNodeSizeMax, int nConeSizeMax, bool fUseDcs, bool fVerbose ) +{ +    int fCheck = 1; +    ProgressBar * pProgress; +    Abc_ManRef_t * pManRef; +    Abc_ManCut_t * pManCut; +    Vec_Ptr_t * vFanins; +    Vec_Int_t * vForm; +    Abc_Obj_t * pNode; +    int i, nNodes; + +    assert( Abc_NtkIsAig(pNtk) ); +    // start the managers +    pManCut = Abc_NtkManCutStart( nNodeSizeMax, nConeSizeMax ); +    pManRef = Abc_NtkManRefStart( nNodeSizeMax, nConeSizeMax, fVerbose ); +    pManRef->vReqTimes = Abc_NtkGetRequiredLevels( pNtk ); + +    // resynthesize each node once +    nNodes = Abc_NtkObjNumMax(pNtk); +    pProgress = Extra_ProgressBarStart( stdout, nNodes ); +    Abc_NtkForEachNode( pNtk, pNode, i ) +    { +        Extra_ProgressBarUpdate( pProgress, nNodes, NULL ); +        // compute a reconvergence-driven cut +        vFanins = Abc_NodeFindCut( pManCut, pNode ); +        // evaluate this cut +        vForm = Abc_NodeRefactor( pManRef, pNode, vFanins ); +        // if acceptable replacement found, update the graph +        if ( vForm ) +            Abc_NodeUpdate( pNode, vFanins, vForm, 0 ); +        // check the improvement +        if ( i == nNodes ) +            break; +    } +    Extra_ProgressBarStop( pProgress ); + +    // delete the managers +    Abc_NtkManCutStop( pManCut ); +    Abc_NtkManRefStop( pManRef ); +    // check +    if ( fCheck && !Abc_NtkCheck( pNtk ) ) +    { +        printf( "Abc_NtkRewrite: The network check has failed.\n" ); +        return 0; +    } +    return 1; +} + +/**Function************************************************************* + +  Synopsis    [Resynthesizes the node using refactoring.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +Vec_Int_t * Abc_NodeRefactor( Abc_ManRef_t * p, Abc_Obj_t * pNode, Vec_Ptr_t * vFanins ) +{ +    Vec_Int_t * vForm; +    DdNode * bFuncNode; +    int nNodesSaved, RetValue; +    char * pSop; + +    // get the cover +    bFuncNode = Abc_NodeConeBdd( p->dd, p->dd->vars, pNode, vFanins, p->vVisited );  Cudd_Ref( bFuncNode ); +    pSop = Abc_ConvertBddToSop( NULL, p->dd, bFuncNode, bFuncNode, vFanins->nSize, p->vCube, -1 ); +    Cudd_RecursiveDeref( p->dd, bFuncNode ); +    // derive the factored form +    vForm = Ft_Factor( pSop ); +    free( pSop ); + +    // label MFFC with current ID +    nNodesSaved = Abc_NodeMffcLabel( pNode ); +    // detect how many unlabeled nodes will be reused +    RetValue = Abc_NodeStrashDecCount( pNode->pNtk->pManFunc, vFanins, vForm,  +        p->vLevNums, nNodesSaved, Vec_IntEntry( p->vReqTimes, pNode->Id ) ); +    if ( RetValue >= 0 ) +        return vForm; +    Vec_IntFree( vForm ); +    return vForm; +} + +/**Function************************************************************* + +  Synopsis    [Starts the resynthesis manager.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +Abc_ManRef_t * Abc_NtkManRefStart( int nNodeSizeMax, int nConeSizeMax, int fVerbose ) +{ +    Abc_ManRef_t * p; +    p = ALLOC( Abc_ManRef_t, 1 ); +    memset( p, 0, sizeof(Abc_ManRef_t) ); +    p->vCube       = Vec_StrAlloc( 100 ); +    p->vLevNums    = Vec_IntAlloc( 100 ); +    p->vVisited    = Vec_PtrAlloc( 100 ); +    p->nNodeSizeMax = nNodeSizeMax; +    p->nConeSizeMax = nConeSizeMax; +    p->fVerbose     = fVerbose; +    // start the BDD manager +    p->dd = Cudd_Init( p->nNodeSizeMax + p->nConeSizeMax, 0, CUDD_UNIQUE_SLOTS, CUDD_CACHE_SLOTS, 0 ); +    Cudd_zddVarsFromBddVars( p->dd, 2 ); +    return p; +} + +/**Function************************************************************* + +  Synopsis    [Stops the resynthesis manager.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +void Abc_NtkManRefStop( Abc_ManRef_t * p ) +{ +    Extra_StopManager( p->dd ); +    Vec_IntFree( p->vReqTimes ); +    Vec_PtrFree( p->vVisited ); +    Vec_IntFree( p->vLevNums ); +    Vec_StrFree( p->vCube    ); +    free( p ); +} + +//////////////////////////////////////////////////////////////////////// +///                       END OF FILE                                /// +//////////////////////////////////////////////////////////////////////// + + diff --git a/src/base/abc/abcRefs.c b/src/base/abc/abcRefs.c index 96e8a3b2..764dc165 100644 --- a/src/base/abc/abcRefs.c +++ b/src/base/abc/abcRefs.c @@ -117,6 +117,32 @@ int Abc_NodeRefDeref( Abc_Obj_t * pNode, bool fReference, bool fLabel )      return Counter;  } +/**Function************************************************************* + +  Synopsis    [Replaces MFFC of the node by the new factored.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +void Abc_NodeUpdate( Abc_Obj_t * pNode, Vec_Ptr_t * vFanins, Vec_Int_t * vForm, int nGain ) +{ +    Abc_Obj_t * pNodeNew; +    int nNodesNew, nNodesOld; +    nNodesOld = Abc_NtkNodeNum(pNode->pNtk); +    // create the new structure of nodes +    assert( Vec_PtrSize(vFanins) < Vec_IntSize(vForm) ); +    pNodeNew = Abc_NodeStrashDec( pNode->pNtk->pManFunc, vFanins, vForm ); +    // remove the old nodes +    Abc_AigReplace( pNode->pNtk->pManFunc, pNode, pNodeNew ); +    // compare the gains +    nNodesNew = Abc_NtkNodeNum(pNode->pNtk); +    assert( nGain <= nNodesOld - nNodesNew ); +} +  ////////////////////////////////////////////////////////////////////////  ///                       END OF FILE                                ///  //////////////////////////////////////////////////////////////////////// diff --git a/src/base/abc/abcResRef.c b/src/base/abc/abcResRef.c deleted file mode 100644 index fb806ad8..00000000 --- a/src/base/abc/abcResRef.c +++ /dev/null @@ -1,192 +0,0 @@ -/**CFile**************************************************************** - -  FileName    [abcResRef.c] - -  SystemName  [ABC: Logic synthesis and verification system.] - -  PackageName [Network and node package.] - -  Synopsis    [Resynthesis based on refactoring.] - -  Author      [Alan Mishchenko] -   -  Affiliation [UC Berkeley] - -  Date        [Ver. 1.0. Started - June 20, 2005.] - -  Revision    [$Id: abcResRef.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $] - -***********************************************************************/ - -#include "abc.h" - -//////////////////////////////////////////////////////////////////////// -///                        DECLARATIONS                              /// -//////////////////////////////////////////////////////////////////////// -  -struct Abc_ManRef_t_ -{ -    // user specified parameters -    int              nNodeSizeMax;  // the limit on the size of the supernode -    int              nConeSizeMax;  // the limit on the size of the containing cone -    int              fVerbose;      // the verbosity flag -    // the node currently processed -    Abc_Obj_t *      pNode;         // the node currently considered -    // internal parameters -    DdManager *      dd;            // the BDD manager -    DdNode *         bCubeX;        // the cube of PI variables -    Vec_Str_t *      vCube;         // temporary cube for generating covers -    Vec_Int_t *      vForm;         // the factored form (temporary) -    // runtime statistics -    int              time1; -    int              time2; -    int              time3; -    int              time4; -}; - -//////////////////////////////////////////////////////////////////////// -///                     FUNCTION DEFITIONS                           /// -//////////////////////////////////////////////////////////////////////// - -/**Function************************************************************* - -  Synopsis    [Resynthesizes the node using refactoring.] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -bool Abc_NodeRefactor( Abc_ManRef_t * p, Abc_Obj_t * pNode ) -{ -    return 0; -} - -/**Function************************************************************* - -  Synopsis    [Derives the factored form of the node.] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -/* -Vec_Int_t * Abc_NodeRefactor( Abc_ManRef_t * p ) -{ -    Vec_Int_t * vForm; -    DdManager * dd = p->dd; -    DdNode * bFuncNode, * bFuncCone, * bCare, * bFuncOn, * bFuncOnDc; -    char * pSop; -    int nFanins; - -    assert( p->vFaninsNode->nSize < p->nNodeSizeMax ); -    assert( p->vFaninsCone->nSize < p->nConeSizeMax ); - -    // get the function of the node -    bFuncNode = Abc_NodeConeBdd( dd, p->dd->vars, p->pNode, p->vFaninsNode, p->vVisited );   -    Cudd_Ref( bFuncNode ); -    nFanins = p->vFaninsNode->nSize; -    if ( p->nConeSizeMax > p->nNodeSizeMax ) -    { -        // get the function of the cone -        bFuncCone = Abc_NodeConeBdd( dd, p->dd->vars + p->nNodeSizeMax, p->pNode, p->vFaninsCone, p->vVisited );   -        Cudd_Ref( bFuncCone ); -        // get the care set -        bCare = Cudd_bddXorExistAbstract( p->dd, Cudd_Not(bFuncNode), bFuncCone, p->bCubeX );   Cudd_Ref( bCare ); -        Cudd_RecursiveDeref( dd, bFuncCone ); -        // compute the on-set and off-set of the function of the node -        bFuncOn   = Cudd_bddAnd( dd, bFuncNode, bCare );                Cudd_Ref( bFuncOn ); -        bFuncOnDc = Cudd_bddAnd( dd, Cudd_Not(bFuncNode), bCare );      Cudd_Ref( bFuncOnDc ); -        bFuncOnDc = Cudd_Not( bFuncOnDc ); -        Cudd_RecursiveDeref( dd, bCare ); -        // get the cover -        pSop = Abc_ConvertBddToSop( NULL, dd, bFuncOn, bFuncOnDc, nFanins, p->vCube, -1 ); -        Cudd_RecursiveDeref( dd, bFuncOn ); -        Cudd_RecursiveDeref( dd, bFuncOnDc ); -    } -    else -    { -        // get the cover -        pSop = Abc_ConvertBddToSop( NULL, dd, bFuncNode, bFuncNode, nFanins, p->vCube, -1 ); -    } -    Cudd_RecursiveDeref( dd, bFuncNode ); -    // derive the factored form -    vForm = Ft_Factor( pSop ); -    free( pSop ); -    return vForm; -} -*/ - - -/**Function************************************************************* - -  Synopsis    [Starts the resynthesis manager.] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -Abc_ManRef_t * Abc_NtkManRefStart() -{ -    Abc_ManRef_t * p; -    p = ALLOC( Abc_ManRef_t, 1 ); -    memset( p, 0, sizeof(Abc_ManRef_t) ); -    p->vCube       = Vec_StrAlloc( 100 ); -     - -    // start the BDD manager -    p->dd = Cudd_Init( p->nNodeSizeMax + p->nConeSizeMax, 0, CUDD_UNIQUE_SLOTS, CUDD_CACHE_SLOTS, 0 ); -    Cudd_zddVarsFromBddVars( p->dd, 2 ); -    p->bCubeX = Extra_bddComputeRangeCube( p->dd, p->nNodeSizeMax, p->dd->size );   Cudd_Ref( p->bCubeX ); - -    return p; -} - -/**Function************************************************************* - -  Synopsis    [Stops the resynthesis manager.] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -void Abc_NtkManRefStop( Abc_ManRef_t * p ) -{ -    if ( p->bCubeX ) Cudd_RecursiveDeref( p->dd, p->bCubeX ); -    if ( p->dd )     Extra_StopManager( p->dd ); -    Vec_StrFree( p->vCube       ); -    free( p ); -} - -/**Function************************************************************* - -  Synopsis    [Stops the resynthesis manager.] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -Vec_Int_t * Abc_NtkManRefResult( Abc_ManRef_t * p ) -{ -    return p->vForm; -} - -//////////////////////////////////////////////////////////////////////// -///                       END OF FILE                                /// -//////////////////////////////////////////////////////////////////////// - - diff --git a/src/base/abc/abcRes.c b/src/base/abc/abcRewrite.c index 7ab60376..437448de 100644 --- a/src/base/abc/abcRes.c +++ b/src/base/abc/abcRewrite.c @@ -19,14 +19,12 @@  ***********************************************************************/  #include "abc.h" -#include "ft.h" +#include "rwr.h"  ////////////////////////////////////////////////////////////////////////  ///                        DECLARATIONS                              ///  //////////////////////////////////////////////////////////////////////// -static void Abc_NodeUpdate( Abc_Obj_t * pNode, Vec_Ptr_t * vFanins, Vec_Int_t * vForm, int nGain ); -  ////////////////////////////////////////////////////////////////////////  ///                     FUNCTION DEFITIONS                           ///  //////////////////////////////////////////////////////////////////////// @@ -46,14 +44,14 @@ int Abc_NtkRewrite( Abc_Ntk_t * pNtk )  {      int fCheck = 1;      ProgressBar * pProgress; -    Abc_ManRwr_t * p; +    Rwr_Man_t * p;      Abc_Obj_t * pNode;      int i, nNodes, nGain;      assert( Abc_NtkIsAig(pNtk) );      // start the rewriting manager -    p = Abc_NtkManRwrStart( "data.aaa" ); -    Abc_NtkManRwrStartCuts( p, pNtk ); +    p = Rwr_ManStart( "data.aaa" ); +    Rwr_ManPrepareNetwork( p, pNtk );      // resynthesize each node once      nNodes = Abc_NtkObjNumMax(pNtk); @@ -61,19 +59,16 @@ int Abc_NtkRewrite( Abc_Ntk_t * pNtk )      Abc_NtkForEachNode( pNtk, pNode, i )      {          Extra_ProgressBarUpdate( pProgress, nNodes, NULL ); -        // compute the cuts of the node -        Abc_NodeRwrComputeCuts( p, pNode );          // for each cut, try to resynthesize it -        if ( (nGain = Abc_NodeRwrRewrite( p, pNode )) >= 0 ) -            Abc_NodeUpdate( pNode, Abc_NtkManRwrFanins(p), Abc_NtkManRwrDecs(p), nGain ); +        if ( (nGain = Rwr_NodeRewrite( p, pNode )) >= 0 ) +            Abc_NodeUpdate( pNode, Rwr_ManReadFanins(p), Rwr_ManReadDecs(p), nGain );          // check the improvement          if ( i == nNodes )              break;      }      Extra_ProgressBarStop( pProgress ); -      // delete the manager -    Abc_NtkManRwrStop( p ); +    Rwr_ManStop( p );      // check      if ( fCheck && !Abc_NtkCheck( pNtk ) )      { @@ -84,54 +79,6 @@ int Abc_NtkRewrite( Abc_Ntk_t * pNtk )  } -/**Function************************************************************* - -  Synopsis    [Performs incremental resynthesis of the AIG.] - -  Description [Starting from each node, computes a reconvergence-driven cut,  -  derives BDD of the cut function, constructs ISOP, factors the cover,  -  and replaces the current implementation of the MFFC of the cut by the  -  new factored form if the number of AIG nodes is reduced. Returns the -  number of AIG nodes saved.] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -int Abc_NtkRefactor( Abc_Ntk_t * pNtk, Abc_ManRef_t * p ) -{ -    int fCheck = 1; -    return 1; -} - -/**Function************************************************************* - -  Synopsis    [Replaces MFFC of the node by the new factored.] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -void Abc_NodeUpdate( Abc_Obj_t * pNode, Vec_Ptr_t * vFanins, Vec_Int_t * vForm, int nGain ) -{ -    Abc_Obj_t * pNodeNew; -    int nNodesNew, nNodesOld; -    nNodesOld = Abc_NtkNodeNum(pNode->pNtk); -    // create the new structure of nodes -    assert( Vec_PtrSize(vFanins) < Vec_IntSize(vForm) ); -    pNodeNew = Abc_NodeStrashDec( pNode->pNtk->pManFunc, vFanins, vForm ); -    // remove the old nodes -    Abc_AigReplace( pNode->pNtk->pManFunc, pNode, pNodeNew ); -    // compare the gains -    nNodesNew = Abc_NtkNodeNum(pNode->pNtk); -    assert( nGain <= nNodesOld - nNodesNew ); -} - -  ////////////////////////////////////////////////////////////////////////  ///                       END OF FILE                                ///  //////////////////////////////////////////////////////////////////////// diff --git a/src/base/abc/abcStrash.c b/src/base/abc/abcStrash.c index e9fed474..403b5be3 100644 --- a/src/base/abc/abcStrash.c +++ b/src/base/abc/abcStrash.c @@ -320,7 +320,7 @@ Abc_Obj_t * Abc_NodeStrashFactor2( Abc_Aig_t * pMan, Abc_Obj_t * pRoot, char * p  /**Function************************************************************* -  Synopsis    [Strashes one logic node using its SOP.] +  Synopsis    [Strashes the factored form into the AIG.]    Description [] @@ -365,6 +365,71 @@ Abc_Obj_t * Abc_NodeStrashDec( Abc_Aig_t * pMan, Vec_Ptr_t * vFanins, Vec_Int_t  /**Function************************************************************* +  Synopsis    [Counts the number of new nodes added when using this factored form,] + +  Description [Returns -1 if the number of nodes and levels exceeded the given limit.] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +int Abc_NodeStrashDecCount( Abc_Aig_t * pMan, Vec_Ptr_t * vFanins, Vec_Int_t * vForm, Vec_Int_t * vLevels, int NodeMax, int LevelMax ) +{ +    Abc_Obj_t * pAnd, * pAnd0, * pAnd1; +    Ft_Node_t * pFtNode; +    int i, nVars, Counter, LevelNew; + +    // sanity checks +    nVars = Ft_FactorGetNumVars( vForm ); +    assert( nVars >= 0 ); +    assert( vForm->nSize > nVars ); +    assert( nVars == vFanins->nSize ); + +    // check for constant function +    pFtNode = Ft_NodeRead( vForm, 0 ); +    if ( pFtNode->fConst ) +        return 0; + +    // set the levels +    Vec_IntClear( vLevels ); +    Vec_PtrForEachEntry( vFanins, pAnd, i ) +        Vec_IntPush( vLevels, pAnd->Level ); + +    // compute the function of other nodes +    Counter = 0; +    for ( i = nVars; i < vForm->nSize; i++ ) +    { +        pFtNode = Ft_NodeRead( vForm, i ); +        pAnd0   = Abc_ObjNotCond( Vec_PtrEntry(vFanins, pFtNode->iFanin0), pFtNode->fCompl0 );  +        if ( pAnd0 ) +        { +            pAnd1 = Abc_ObjNotCond( Vec_PtrEntry(vFanins, pFtNode->iFanin1), pFtNode->fCompl1 );  +            pAnd  = pAnd1? Abc_AigAndLookup( pMan, pAnd0, pAnd1 ) : NULL; +        } +        else +            pAnd = NULL; +        // count the number of added nodes +        if ( pAnd == NULL || Abc_NodeIsTravIdCurrent(pAnd) ) +        { +            Counter++; +            if ( Counter > NodeMax ) +                return -1; +        } +        // count the number of new levels +        LevelNew = 1 + ABC_MAX( Vec_IntEntry(vLevels, pFtNode->iFanin0), Vec_IntEntry(vLevels, pFtNode->iFanin1) ); +        assert( pAnd == NULL || LevelNew == (int)Abc_ObjRegular(pAnd)->Level ); +        if ( LevelNew > LevelMax ) +            return -1; +        Vec_PtrPush( vFanins, pAnd ); +        Vec_IntPush( vLevels, LevelNew ); +    } +    assert( vForm->nSize = vFanins->nSize ); +    return Counter; +} + +/**Function************************************************************* +    Synopsis    [Appends the second network to the first.]    Description [Modifies the first network by adding the logic of the second.  diff --git a/src/base/abc/abcTiming.c b/src/base/abc/abcTiming.c index d91a4443..10f8ae98 100644 --- a/src/base/abc/abcTiming.c +++ b/src/base/abc/abcTiming.c @@ -626,6 +626,49 @@ void Abc_NodeDelayTraceArrival( Abc_Obj_t * pNode )      pTimeOut->Worst = ABC_MAX( pTimeOut->Rise, pTimeOut->Fall );  } +/**Function************************************************************* + +  Synopsis    [Creates the array of required times.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +Vec_Int_t * Abc_NtkGetRequiredLevels( Abc_Ntk_t * pNtk ) +{ +    Vec_Int_t * vReqTimes; +    Vec_Ptr_t * vNodes; +    Abc_Obj_t * pObj, * pFanout; +    int i, k, nLevelsMax, nLevelsCur; +    // start the required times +    vReqTimes = Vec_IntAlloc( 0 ); +    Vec_IntFill( vReqTimes, Abc_NtkObjNumMax(pNtk), ABC_INFINITY ); +    // compute levels in reverse topological order +    Abc_NtkForEachCo( pNtk, pObj, i ) +        Vec_IntWriteEntry( vReqTimes, pObj->Id, 0 ); +    vNodes = Abc_NtkDfsReverse( pNtk ); +    Vec_PtrForEachEntry( vNodes, pObj, i ) +    { +        nLevelsCur = 0; +        Abc_ObjForEachFanout( pObj, pFanout, k ) +            if ( nLevelsCur < Vec_IntEntry(vReqTimes, pFanout->Id) ) +                nLevelsCur = Vec_IntEntry(vReqTimes, pFanout->Id); +        Vec_IntWriteEntry( vReqTimes, pObj->Id, nLevelsCur + 1 ); +    } +    Vec_PtrFree( vNodes ); +    // convert levels into required times: RetTime = NumLevels + 1 - Level +    nLevelsMax = Abc_AigGetLevelNum(pNtk) + 1; +    Abc_NtkForEachNode( pNtk, pObj, i ) +        Vec_IntWriteEntry( vReqTimes, pObj->Id, nLevelsMax - Vec_IntEntry(vReqTimes, pObj->Id) ); +//    Abc_NtkForEachNode( pNtk, pObj, i ) +//        printf( "(%d,%d)", pObj->Level, Vec_IntEntry(vReqTimes, pObj->Id) ); +//    printf( "\n" ); +    return vReqTimes; +} +  ////////////////////////////////////////////////////////////////////////  ///                       END OF FILE                                ///  //////////////////////////////////////////////////////////////////////// diff --git a/src/base/abc/module.make b/src/base/abc/module.make index ee494926..b05cf03b 100644 --- a/src/base/abc/module.make +++ b/src/base/abc/module.make @@ -20,7 +20,8 @@ SRC +=    src/base/abc/abc.c \      src/base/abc/abcPrint.c \      src/base/abc/abcRefs.c \      src/base/abc/abcRenode.c \ -    src/base/abc/abcRes.c \ +    src/base/abc/abcRefactor.c \ +    src/base/abc/abcRewrite.c \      src/base/abc/abcSat.c \      src/base/abc/abcSeq.c \      src/base/abc/abcSeqRetime.c \ diff --git a/src/map/mapper/mapperTree.c b/src/map/mapper/mapperTree.c index 61e12748..04576045 100644 --- a/src/map/mapper/mapperTree.c +++ b/src/map/mapper/mapperTree.c @@ -467,6 +467,17 @@ int Map_LibraryDeriveGateInfo( Map_SuperLib_t * pLib, st_table * tExcludeGate )          pGate->nPhases = Map_CanonComputeSlow( pLib->uTruths, pLib->nVarsMax, nRealVars, pGate->uTruth, pGate->uPhases, uCanon );          // add the supergate into the table by its N-canonical table          Map_SuperTableInsertC( pLib->tTableC, uCanon, pGate ); +/* +        { +            int uCanon1, uCanon2; +            uCanon1 = uCanon[0]; +            pGate->uTruth[0] = ~pGate->uTruth[0]; +            pGate->uTruth[1] = ~pGate->uTruth[1]; +            Map_CanonComputeSlow( pLib->uTruths, pLib->nVarsMax, nRealVars, pGate->uTruth, pGate->uPhases, uCanon ); +            uCanon2 = uCanon[0]; +Rwt_Man5ExploreCount( uCanon1 < uCanon2 ? uCanon1 : uCanon2 ); +        } +*/      }      // sort the gates in each line      Map_SuperTableSortSupergatesByDelay( pLib->tTableC, pLib->nSupersAll ); diff --git a/src/map/mapper/mapperTruth.c b/src/map/mapper/mapperTruth.c index f79dac01..97e64920 100644 --- a/src/map/mapper/mapperTruth.c +++ b/src/map/mapper/mapperTruth.c @@ -91,6 +91,7 @@ void Map_MappingTruths( Map_Man_t * pMan )  void Map_TruthsCut( Map_Man_t * p, Map_Cut_t * pCut )  {      unsigned uTruth[2], uCanon[2]; +//    unsigned uCanon1, uCanon2;      unsigned char uPhases[16];      // generally speaking, 1-input cut can be matched into a wire! @@ -98,8 +99,6 @@ void Map_TruthsCut( Map_Man_t * p, Map_Cut_t * pCut )          return;      Map_TruthsCutOne( p, pCut, uTruth ); -//assert( pCut->nLeaves < 5 ); -//Rwt_ManExploreCount( uTruth[0] & 0xFFFF );      // compute the canonical form for the positive phase      Map_CanonComputeSlow( p->uTruths, p->nVarsMax, pCut->nLeaves, uTruth, uPhases, uCanon ); @@ -107,6 +106,8 @@ void Map_TruthsCut( Map_Man_t * p, Map_Cut_t * pCut )      pCut->M[1].uPhase  = uPhases[0];      p->nCanons++; +//uCanon1 = uCanon[0] & 0xFFFF; +      // compute the canonical form for the negative phase      uTruth[0] = ~uTruth[0];      uTruth[1] = ~uTruth[1]; @@ -115,6 +116,11 @@ void Map_TruthsCut( Map_Man_t * p, Map_Cut_t * pCut )      pCut->M[0].uPhase  = uPhases[0];      p->nCanons++; +//uCanon2 = uCanon[0] & 0xFFFF; + +//assert( p->nVarsMax == 4 ); +//Rwt_Man4ExploreCount( uCanon1 < uCanon2 ? uCanon1 : uCanon2 ); +      // restore the truth table      uTruth[0] = ~uTruth[0];      uTruth[1] = ~uTruth[1]; diff --git a/src/misc/extra/extra.h b/src/misc/extra/extra.h index 5913e40e..7f4ec8d8 100644 --- a/src/misc/extra/extra.h +++ b/src/misc/extra/extra.h @@ -143,6 +143,7 @@ extern char *       Extra_TimeStamp();  extern char *       Extra_StringAppend( char * pStrGiven, char * pStrAdd );  extern unsigned     Extra_ReadBinary( char * Buffer );  extern void         Extra_PrintBinary( FILE * pFile, unsigned Sign[], int nBits ); +extern void         Extra_PrintHex( FILE * pFile, unsigned uTruth, int nVars );  extern void         Extra_PrintSymbols( FILE * pFile, char Char, int nTimes, int fPrintNewLine );  /*=== extraUtilReader.c ========================================================*/ @@ -198,6 +199,18 @@ extern int *       Extra_DeriveRadixCode( int Number, int Radix, int nDigits );  extern int         Extra_Factorial( int n );  /* the permutation of the given number of elements */  extern char **     Extra_Permutations( int n ); +/* permutation and complementation of a truth table */ +unsigned           Extra_TruthPermute( unsigned Truth, char * pPerms, int nVars, int fReverse ); +unsigned           Extra_TruthPolarize( unsigned uTruth, int Polarity, int nVars ); +/* canonical forms of a truth table */ +extern unsigned    Extra_TruthCanonN( unsigned uTruth, int nVars ); +extern unsigned    Extra_TruthCanonNN( unsigned uTruth, int nVars ); +extern unsigned    Extra_TruthCanonP( unsigned uTruth, int nVars ); +extern unsigned    Extra_TruthCanonNP( unsigned uTruth, int nVars ); +extern unsigned    Extra_TruthCanonNPN( unsigned uTruth, int nVars ); +/* canonical forms of 4-variable functions */ +extern void        Extra_Truth4VarNPN( unsigned short ** puCanons, char ** puPhases, char ** puPerms ); +/* for independence from CUDD */  extern unsigned int Cudd_PrimeCopy( unsigned int  p );  /*=== extraUtilProgress.c ================================================================*/ diff --git a/src/misc/extra/extraUtilFile.c b/src/misc/extra/extraUtilFile.c index faf27dc8..03b31fea 100644 --- a/src/misc/extra/extraUtilFile.c +++ b/src/misc/extra/extraUtilFile.c @@ -318,6 +318,35 @@ void Extra_PrintBinary( FILE * pFile, unsigned Sign[], int nBits )  //  fprintf( pFile, "\n" );  } +/**Function************************************************************* + +  Synopsis    [Prints the hex unsigned into a file.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +void Extra_PrintHex( FILE * pFile, unsigned uTruth, int nVars ) +{ +    int nMints, nDigits, Digit, k; + +    // write the number into the file +    fprintf( pFile, "0x" ); +    nMints  = (1 << nVars); +    nDigits = nMints / 4; +    for ( k = nDigits - 1; k >= 0; k-- ) +    { +        Digit = ((uTruth >> (k * 4)) & 15); +        if ( Digit < 10 ) +            fprintf( pFile, "%d", Digit ); +        else +            fprintf( pFile, "%c", 'a' + Digit-10 ); +    } +//    fprintf( pFile, "\n" ); +}  /**Function************************************************************* diff --git a/src/misc/extra/extraUtilMisc.c b/src/misc/extra/extraUtilMisc.c index 41c76018..ccd871e4 100644 --- a/src/misc/extra/extraUtilMisc.c +++ b/src/misc/extra/extraUtilMisc.c @@ -329,6 +329,414 @@ void Extra_Permutations_rec( char ** pRes, int nFact, int n, char Array[] )  /**Function************************************************************* +  Synopsis    [Permutes the given vector of minterms.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +void Extra_TruthPermute_int( int * pMints, int nMints, char * pPerm, int nVars, int * pMintsP ) +{ +    int m, v; +    // clean the storage for minterms +    memset( pMintsP, 0, sizeof(int) * nMints ); +    // go through minterms and add the variables +    for ( m = 0; m < nMints; m++ ) +        for ( v = 0; v < nVars; v++ ) +            if ( pMints[m] & (1 << v) ) +                pMintsP[m] |= (1 << pPerm[v]); +} + +/**Function************************************************************* + +  Synopsis    [Permutes the function.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +unsigned Extra_TruthPermute( unsigned Truth, char * pPerms, int nVars, int fReverse ) +{ +    unsigned Result; +    int * pMints; +    int * pMintsP; +    int nMints; +    int i, m; + +    assert( nVars < 6 ); +    nMints  = (1 << nVars); +    pMints  = ALLOC( int, nMints ); +    pMintsP = ALLOC( int, nMints ); +    for ( i = 0; i < nMints; i++ ) +        pMints[i] = i; + +    Extra_TruthPermute_int( pMints, nMints, pPerms, nVars, pMintsP ); + +    Result = 0; +    if ( fReverse ) +    { +        for ( m = 0; m < nMints; m++ ) +            if ( Truth & (1 << pMintsP[m]) ) +                Result |= (1 << m); +    } +    else +    { +        for ( m = 0; m < nMints; m++ ) +            if ( Truth & (1 << m) ) +                Result |= (1 << pMintsP[m]); +    } + +    free( pMints ); +    free( pMintsP ); + +    return Result; +} + +/**Function************************************************************* + +  Synopsis    [Changes the phase of the function.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +unsigned Extra_TruthPolarize( unsigned uTruth, int Polarity, int nVars ) +{ +    // elementary truth tables +    static unsigned Signs[5] = { +        0xAAAAAAAA,    // 1010 1010 1010 1010 1010 1010 1010 1010 +        0xCCCCCCCC,    // 1010 1010 1010 1010 1010 1010 1010 1010 +        0xF0F0F0F0,    // 1111 0000 1111 0000 1111 0000 1111 0000 +        0xFF00FF00,    // 1111 1111 0000 0000 1111 1111 0000 0000 +        0xFFFF0000     // 1111 1111 1111 1111 0000 0000 0000 0000 +    }; +    unsigned uTruthRes, uCof0, uCof1; +    int nMints, Shift, v; +    assert( nVars < 6 ); +    nMints = (1 << nVars); +    uTruthRes = uTruth; +    for ( v = 0; v < nVars; v++ ) +        if ( Polarity & (1 << v) ) +        { +            uCof0  = uTruth & ~Signs[v]; +            uCof1  = uTruth &  Signs[v]; +            Shift  = (1 << v); +            uCof0 <<= Shift; +            uCof1 >>= Shift; +            uTruth = uCof0 | uCof1; +        } +    if ( nVars < 5 ) +        uTruth &= ((~0) >> (32-nMints)); +    return uTruth; +} + +/**Function************************************************************* + +  Synopsis    [Computes N-canonical form using brute-force methods.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +unsigned Extra_TruthCanonN( unsigned uTruth, int nVars ) +{ +    unsigned uTruthMin, uPhase; +    int nMints, p; +    nMints    = (1 << nVars); +    uTruthMin = 0xFFFFFFFF; +    for ( p = 0; p < nMints; p++ ) +    { +        uPhase = Extra_TruthPolarize( uTruth, p, nVars );  +        if ( uTruthMin > uPhase ) +            uTruthMin = uPhase; +    } +    return uTruthMin; +} + +/**Function************************************************************* + +  Synopsis    [Computes NN-canonical form using brute-force methods.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +unsigned Extra_TruthCanonNN( unsigned uTruth, int nVars ) +{ +    unsigned uTruthMin, uTruthC, uPhase; +    int nMints, p; +    nMints    = (1 << nVars); +    uTruthC   = (unsigned)( (~uTruth) & ((~((unsigned)0)) >> (32-nMints)) ); +    uTruthMin = 0xFFFFFFFF; +    for ( p = 0; p < nMints; p++ ) +    { +        uPhase = Extra_TruthPolarize( uTruth, p, nVars );  +        if ( uTruthMin > uPhase ) +            uTruthMin = uPhase; +        uPhase = Extra_TruthPolarize( uTruthC, p, nVars );  +        if ( uTruthMin > uPhase ) +            uTruthMin = uPhase; +    } +    return uTruthMin; +} + +/**Function************************************************************* + +  Synopsis    [Computes P-canonical form using brute-force methods.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +unsigned Extra_TruthCanonP( unsigned uTruth, int nVars ) +{ +    static int nVarsOld, nPerms; +    static char ** pPerms = NULL; + +    unsigned uTruthMin, uPerm; +    int k; + +    if ( pPerms == NULL ) +    { +        nPerms = Extra_Factorial( nVars );    +        pPerms = Extra_Permutations( nVars ); +        nVarsOld = nVars; +    } +    else if ( nVarsOld != nVars ) +    { +        free( pPerms ); +        nPerms = Extra_Factorial( nVars );    +        pPerms = Extra_Permutations( nVars ); +        nVarsOld = nVars; +    } + +    uTruthMin = 0xFFFFFFFF; +    for ( k = 0; k < nPerms; k++ ) +    { +        uPerm = Extra_TruthPermute( uTruth, pPerms[k], nVars, 0 ); +        if ( uTruthMin > uPerm ) +            uTruthMin = uPerm; +    } +    return uTruthMin; +} + +/**Function************************************************************* + +  Synopsis    [Computes NP-canonical form using brute-force methods.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +unsigned Extra_TruthCanonNP( unsigned uTruth, int nVars ) +{ +    static int nVarsOld, nPerms; +    static char ** pPerms = NULL; + +    unsigned uTruthMin, uPhase, uPerm; +    int nMints, k, p; + +    if ( pPerms == NULL ) +    { +        nPerms = Extra_Factorial( nVars );    +        pPerms = Extra_Permutations( nVars ); +        nVarsOld = nVars; +    } +    else if ( nVarsOld != nVars ) +    { +        free( pPerms ); +        nPerms = Extra_Factorial( nVars );    +        pPerms = Extra_Permutations( nVars ); +        nVarsOld = nVars; +    } + +    nMints    = (1 << nVars); +    uTruthMin = 0xFFFFFFFF; +    for ( p = 0; p < nMints; p++ ) +    { +        uPhase = Extra_TruthPolarize( uTruth, p, nVars );  +        for ( k = 0; k < nPerms; k++ ) +        { +            uPerm = Extra_TruthPermute( uPhase, pPerms[k], nVars, 0 ); +            if ( uTruthMin > uPerm ) +                uTruthMin = uPerm; +        } +    } +    return uTruthMin; +} + +/**Function************************************************************* + +  Synopsis    [Computes NPN-canonical form using brute-force methods.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +unsigned Extra_TruthCanonNPN( unsigned uTruth, int nVars ) +{ +    static int nVarsOld, nPerms; +    static char ** pPerms = NULL; + +    unsigned uTruthMin, uTruthC, uPhase, uPerm; +    int nMints, k, p; + +    if ( pPerms == NULL ) +    { +        nPerms = Extra_Factorial( nVars );    +        pPerms = Extra_Permutations( nVars ); +        nVarsOld = nVars; +    } +    else if ( nVarsOld != nVars ) +    { +        free( pPerms ); +        nPerms = Extra_Factorial( nVars );    +        pPerms = Extra_Permutations( nVars ); +        nVarsOld = nVars; +    } + +    nMints    = (1 << nVars); +    uTruthC   = (unsigned)( (~uTruth) & ((~((unsigned)0)) >> (32-nMints)) ); +    uTruthMin = 0xFFFFFFFF; +    for ( p = 0; p < nMints; p++ ) +    { +        uPhase = Extra_TruthPolarize( uTruth, p, nVars );  +        for ( k = 0; k < nPerms; k++ ) +        { +            uPerm = Extra_TruthPermute( uPhase, pPerms[k], nVars, 0 ); +            if ( uTruthMin > uPerm ) +                uTruthMin = uPerm; +        } +        uPhase = Extra_TruthPolarize( uTruthC, p, nVars );  +        for ( k = 0; k < nPerms; k++ ) +        { +            uPerm = Extra_TruthPermute( uPhase, pPerms[k], nVars, 0 ); +            if ( uTruthMin > uPerm ) +                uTruthMin = uPerm; +        } +    } +    return uTruthMin; +} + +/**Function************************************************************* + +  Synopsis    [Computes NPN canonical forms for 4-variable functions.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +void Extra_Truth4VarNPN( unsigned short ** puCanons, char ** puPhases, char ** puPerms ) +{ +    unsigned short * uCanons; +    unsigned uTruth, uPhase, uPerm; +    char ** pPerms4, * uPhases, * uPerms; +    int nFuncs, nClasses; +    int p, k; + +    nFuncs  = (1 << 16); +    uCanons = ALLOC( unsigned short, nFuncs ); +    uPhases = ALLOC( char, nFuncs ); +    uPerms  = ALLOC( char, nFuncs ); +    memset( uCanons, 0, sizeof(unsigned short) * nFuncs ); +    memset( uPhases, 0, sizeof(char) * nFuncs ); +    memset( uPerms,  0, sizeof(char) * nFuncs ); +    pPerms4 = Extra_Permutations( 4 ); + +    nClasses = 1; +    nFuncs = (1 << 15); +    for ( uTruth = 1; uTruth < (unsigned)nFuncs; uTruth++ ) +    { +        // skip already assigned +        if ( uCanons[uTruth] ) +            continue; +        nClasses++; +        for ( p = 0; p < 16; p++ ) +        { +            uPhase = Extra_TruthPolarize( uTruth, p, 4 ); +            for ( k = 0; k < 24; k++ ) +            { +                uPerm = Extra_TruthPermute( uPhase, pPerms4[k], 4, 0 ); +                if ( uCanons[uPerm] == 0 ) +                { +                    uCanons[uPerm] = uTruth; +                    uPhases[uPerm] = p; +                    uPerms[uPerm]  = k; + +                    uPerm = ~uPerm & 0xFFFF; +                    uCanons[uPerm] = uTruth; +                    uPhases[uPerm] = p | 16; +                    uPerms[uPerm]  = k; +                } +                else +                    assert( uCanons[uPerm] == uTruth ); +            } +            uPhase = Extra_TruthPolarize( ~uTruth & 0xFFFF, p, 4 );  +            for ( k = 0; k < 24; k++ ) +            { +                uPerm = Extra_TruthPermute( uPhase, pPerms4[k], 4, 0 ); +                if ( uCanons[uPerm] == 0 ) +                { +                    uCanons[uPerm] = uTruth; +                    uPhases[uPerm] = p; +                    uPerms[uPerm]  = k; + +                    uPerm = ~uPerm & 0xFFFF; +                    uCanons[uPerm] = uTruth; +                    uPhases[uPerm] = p | 16; +                    uPerms[uPerm]  = k; +                } +                else +                    assert( uCanons[uPerm] == uTruth ); +            } +        } +    } +    uPhases[(1<<16)-1] = 16; +    assert( nClasses == 222 ); +    free( pPerms4 ); +    if ( puCanons )  +        *puCanons = uCanons; +    else +        free( uCanons ); +    if ( puPhases )  +        *puPhases = uPhases; +    else +        free( uPhases ); +    if ( puPerms )  +        *puPerms = uPerms; +    else +        free( uPerms ); +} + +/**Function************************************************************* +    Synopsis    [Returns the smallest prime larger than the number.]    Description [] diff --git a/src/misc/vec/vecInt.h b/src/misc/vec/vecInt.h index 76fce02e..effebc68 100644 --- a/src/misc/vec/vecInt.h +++ b/src/misc/vec/vecInt.h @@ -514,6 +514,44 @@ static inline void Vec_IntSort( Vec_Int_t * p, int fReverse )                  (int (*)(const void *, const void *)) Vec_IntSortCompare1 );  } + +/**Function************************************************************* + +  Synopsis    [Comparison procedure for two integers.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +static inline int Vec_IntSortCompareUnsigned( unsigned * pp1, unsigned * pp2 ) +{ +    if ( *pp1 < *pp2 ) +        return -1; +    if ( *pp1 > *pp2 ) +        return 1; +    return 0; +} + +/**Function************************************************************* + +  Synopsis    [Sorting the entries by their integer value.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +static inline void Vec_IntSortUnsigned( Vec_Int_t * p ) +{ +    qsort( (void *)p->pArray, p->nSize, sizeof(int),  +            (int (*)(const void *, const void *)) Vec_IntSortCompareUnsigned ); +} +  ////////////////////////////////////////////////////////////////////////  ///                       END OF FILE                                ///  //////////////////////////////////////////////////////////////////////// diff --git a/src/opt/rwr/module.make b/src/opt/rwr/module.make new file mode 100644 index 00000000..e97eb33e --- /dev/null +++ b/src/opt/rwr/module.make @@ -0,0 +1,6 @@ +SRC +=  rwrCut.c \ +    rwrEva.c \ +    rwrExp.c \ +    rwrLib.c \ +    rwrMan.c \ +    rwrUtil.c diff --git a/src/opt/rwr/rwr.h b/src/opt/rwr/rwr.h index 19fc34c4..96810c25 100644 --- a/src/opt/rwr/rwr.h +++ b/src/opt/rwr/rwr.h @@ -37,40 +37,18 @@  #define RWR_LIMIT  1048576/4  // ((1 << 20)  +typedef struct Rwr_Man_t_   Rwr_Man_t;  typedef struct Rwr_Node_t_  Rwr_Node_t; -struct Rwr_Node_t_ // 24 bytes -{ -    int                Id;               // ID  -    int                TravId;           // traversal ID -    unsigned           uTruth : 16;      // truth table -    unsigned           Volume :  8;      // volume -    unsigned           Level  :  5;      // level -    unsigned           fMark  :  1;      // mark -    unsigned           fUsed  :  1;      // mark -    unsigned           fExor  :  1;      // mark -    Rwr_Node_t *       p0;               // first child -    Rwr_Node_t *       p1;               // second child -    Rwr_Node_t *       pNext;            // next in the table -}; +typedef struct Rwr_Cut_t_   Rwr_Cut_t; -typedef struct Rwr_Cut_t_  Rwr_Cut_t; -struct Rwr_Cut_t_ // 24 bytes -{ -    unsigned           nLeaves : 3;      // the number of leaves -    unsigned           fTime  :  1;      // set to 1 if meets the required times -    unsigned           fGain  :  1;      // set to 1 if does not increase nodes -    unsigned           Volume : 11;      // the gain in the number of nodes -    unsigned           uTruth : 16;      // the truth table -    Abc_Obj_t *        ppLeaves[4];      // the leaves -    Rwr_Cut_t *        pNext;            // the next cut in the list -}; - -struct Abc_ManRwr_t_ +struct Rwr_Man_t_  {      // internal lookups      int                nFuncs;           // the number of four var functions      unsigned short *   puCanons;         // canonical forms -    char *             puPhases;         // canonical phases +    char *             pPhases;          // canonical phases +    char *             pPerms;           // canonical permutations +    unsigned char *    pMap;             // mapping of functions into class numbers      char *             pPractical;       // practical classes      unsigned short     puPerms[256][16]; // permutations for three var functions      // node space @@ -88,6 +66,7 @@ struct Abc_ManRwr_t_      Vec_Int_t *        vForm;            // the decomposition tree (temporary)      Vec_Ptr_t *        vFanins;          // the fanins array (temporary)      Vec_Ptr_t *        vTfo;             // the TFO node array (temporary) +    Vec_Ptr_t *        vTfoFor;          // the TFO node array (temporary)      Vec_Vec_t *        vLevels;          // the levelized structure (temporary)      int                nGainMax;      // runtime statistics @@ -97,6 +76,33 @@ struct Abc_ManRwr_t_      int                time4;  }; +struct Rwr_Node_t_ // 24 bytes +{ +    int                Id;               // ID  +    int                TravId;           // traversal ID +    unsigned           uTruth : 16;      // truth table +    unsigned           Volume :  8;      // volume +    unsigned           Level  :  5;      // level +    unsigned           fMark  :  1;      // mark +    unsigned           fUsed  :  1;      // mark +    unsigned           fExor  :  1;      // mark +    Rwr_Node_t *       p0;               // first child +    Rwr_Node_t *       p1;               // second child +    Rwr_Node_t *       pNext;            // next in the table +}; + +struct Rwr_Cut_t_ // 24 bytes +{ +    unsigned           nLeaves : 3;      // the number of leaves +    unsigned           fTime  :  1;      // set to 1 if meets the required times +    unsigned           fGain  :  1;      // set to 1 if does not increase nodes +    unsigned           Volume : 11;      // the gain in the number of nodes +    unsigned           uTruth : 16;      // the truth table +    Abc_Obj_t *        ppLeaves[4];      // the leaves +    Rwr_Cut_t *        pNext;            // the next cut in the list +}; + +  // manipulation of complemented attributes  static inline bool         Rwr_IsComplement( Rwr_Node_t * p )    { return (bool)(((unsigned)p) & 01);           }  static inline Rwr_Node_t * Rwr_Regular( Rwr_Node_t * p )         { return (Rwr_Node_t *)((unsigned)(p) & ~01);  } @@ -111,17 +117,27 @@ static inline Rwr_Node_t * Rwr_NotCond( Rwr_Node_t * p, int c )  { return (Rwr_N  ///                    FUNCTION DECLARATIONS                         ///  //////////////////////////////////////////////////////////////////////// -/*=== rwrLib.c ==========================================================*/ -extern void                Rwr_ManPrecompute( Abc_ManRwr_t * p ); -extern void                Rwr_ManWriteToFile( Abc_ManRwr_t * p, char * pFileName ); -extern void                Rwr_ManLoadFromFile( Abc_ManRwr_t * p, char * pFileName ); -extern void                Rwr_ManPrint( Abc_ManRwr_t * p ); -extern Rwr_Node_t *        Rwr_ManAddVar( Abc_ManRwr_t * p, unsigned uTruth ); -/*=== rwrMan.c ==========================================================*/ -extern unsigned short      Rwr_FunctionPhase( unsigned uTruth, unsigned uPhase ); -/*=== rwrUtil.c ==========================================================*/ -extern Vec_Int_t *         Rwt_NtkFanoutCounters( Abc_Ntk_t * pNtk ); -extern Vec_Int_t *         Rwt_NtkRequiredLevels( Abc_Ntk_t * pNtk ); +/*=== rwrCut.c ========================================================*/ +extern void              Rwr_NtkStartCuts( Rwr_Man_t * p, Abc_Ntk_t * pNtk ); +extern void              Rwr_NodeComputeCuts( Rwr_Man_t * p, Abc_Obj_t * pNode ); +/*=== rwrEva.c ========================================================*/ +extern int               Rwr_NodeRewrite( Rwr_Man_t * p, Abc_Obj_t * pNode ); +/*=== rwrLib.c ========================================================*/ +extern void              Rwr_ManPrecompute( Rwr_Man_t * p ); +extern void              Rwr_ManWriteToFile( Rwr_Man_t * p, char * pFileName ); +extern void              Rwr_ManLoadFromFile( Rwr_Man_t * p, char * pFileName ); +extern void              Rwr_ManPrintFirst( Rwr_Man_t * p ); +extern void              Rwr_ManPrintNext( Rwr_Man_t * p ); +extern Rwr_Node_t *      Rwr_ManAddVar( Rwr_Man_t * p, unsigned uTruth, char * pFileName  ); +/*=== rwrMan.c ========================================================*/ +extern Rwr_Man_t *       Rwr_ManStart( char * pFileName ); +extern void              Rwr_ManStop( Rwr_Man_t * p ); +extern void              Rwr_ManPrepareNetwork( Rwr_Man_t * p, Abc_Ntk_t * pNtk ); +extern Vec_Ptr_t *       Rwr_ManReadFanins( Rwr_Man_t * p ); +extern Vec_Int_t *       Rwr_ManReadDecs( Rwr_Man_t * p ); +extern unsigned short    Rwr_FunctionPhase( unsigned uTruth, unsigned uPhase ); +/*=== rwrUtil.c ========================================================*/ +extern Vec_Int_t *       Rwt_NtkFanoutCounters( Abc_Ntk_t * pNtk );  ////////////////////////////////////////////////////////////////////////  ///                       END OF FILE                                /// diff --git a/src/opt/rwr/rwrCut.c b/src/opt/rwr/rwrCut.c index 88ea3cdb..c8560114 100644 --- a/src/opt/rwr/rwrCut.c +++ b/src/opt/rwr/rwrCut.c @@ -24,9 +24,9 @@  ///                        DECLARATIONS                              ///  //////////////////////////////////////////////////////////////////////// -static Rwr_Cut_t * Rwr_CutAlloc( Abc_ManRwr_t * p ); -static Rwr_Cut_t * Rwr_CutCreateTriv( Abc_ManRwr_t * p, Abc_Obj_t * pNode ); -static Rwr_Cut_t * Rwr_CutsMerge( Abc_ManRwr_t * p, Rwr_Cut_t * pCut0, Rwr_Cut_t * pCut1, int fCompl0, int fCompl1 ); +static Rwr_Cut_t * Rwr_CutAlloc( Rwr_Man_t * p ); +static Rwr_Cut_t * Rwr_CutCreateTriv( Rwr_Man_t * p, Abc_Obj_t * pNode ); +static Rwr_Cut_t * Rwr_CutsMerge( Rwr_Man_t * p, Rwr_Cut_t * pCut0, Rwr_Cut_t * pCut1, int fCompl0, int fCompl1 );  ////////////////////////////////////////////////////////////////////////  ///                     FUNCTION DEFITIONS                           /// @@ -34,7 +34,7 @@ static Rwr_Cut_t * Rwr_CutsMerge( Abc_ManRwr_t * p, Rwr_Cut_t * pCut0, Rwr_Cut_t  /**Function************************************************************* -  Synopsis    [Assigns elementary cuts to the PIs.] +  Synopsis    [Computes cuts for one node.]    Description [] @@ -43,7 +43,7 @@ static Rwr_Cut_t * Rwr_CutsMerge( Abc_ManRwr_t * p, Rwr_Cut_t * pCut0, Rwr_Cut_t    SeeAlso     []  ***********************************************************************/ -void Abc_NtkManRwrStartCuts( Abc_ManRwr_t * p, Abc_Ntk_t * pNtk ) +void Rwr_NtkStartCuts( Rwr_Man_t * p, Abc_Ntk_t * pNtk )  {      Abc_Obj_t * pNode;      int i; @@ -51,10 +51,6 @@ void Abc_NtkManRwrStartCuts( Abc_ManRwr_t * p, Abc_Ntk_t * pNtk )      Abc_NtkCleanCopy( pNtk );      Abc_NtkForEachCi( pNtk, pNode, i )          pNode->pCopy = (Abc_Obj_t *)Rwr_CutCreateTriv( p, pNode ); -    // precompute the required times for all internal nodes -    p->vFanNums = Rwt_NtkFanoutCounters( pNtk ); -    // save the fanout counters for all internal nodes -    p->vReqTimes = Rwt_NtkRequiredLevels( pNtk );  }  /**Function************************************************************* @@ -68,7 +64,7 @@ void Abc_NtkManRwrStartCuts( Abc_ManRwr_t * p, Abc_Ntk_t * pNtk )    SeeAlso     []  ***********************************************************************/ -void Abc_NodeRwrComputeCuts( Abc_ManRwr_t * p, Abc_Obj_t * pNode ) +void Rwr_NodeComputeCuts( Rwr_Man_t * p, Abc_Obj_t * pNode )  {      Rwr_Cut_t * pCuts0, * pCuts1, * pTemp0, * pTemp1, * pCut;      Rwr_Cut_t * pList = NULL, ** ppPlace = &pList; // linked list of cuts @@ -107,7 +103,7 @@ void Abc_NodeRwrComputeCuts( Abc_ManRwr_t * p, Abc_Obj_t * pNode )    SeeAlso     []  ***********************************************************************/ -Rwr_Cut_t * Rwr_CutsMerge( Abc_ManRwr_t * p, Rwr_Cut_t * pCut0, Rwr_Cut_t * pCut1, int fCompl0, int fCompl1 ) +Rwr_Cut_t * Rwr_CutsMerge( Rwr_Man_t * p, Rwr_Cut_t * pCut0, Rwr_Cut_t * pCut1, int fCompl0, int fCompl1 )  {      Abc_Obj_t * ppNodes[4], * pNodeTemp;      Rwr_Cut_t * pCut; @@ -219,7 +215,7 @@ Rwr_Cut_t * Rwr_CutsMerge( Abc_ManRwr_t * p, Rwr_Cut_t * pCut0, Rwr_Cut_t * pCut    SeeAlso     []  ***********************************************************************/ -Rwr_Cut_t * Rwr_CutAlloc( Abc_ManRwr_t * p ) +Rwr_Cut_t * Rwr_CutAlloc( Rwr_Man_t * p )  {      Rwr_Cut_t * pCut;      pCut = (Rwr_Cut_t *)Extra_MmFixedEntryFetch( p->pMmNode ); @@ -238,7 +234,7 @@ Rwr_Cut_t * Rwr_CutAlloc( Abc_ManRwr_t * p )    SeeAlso     []  ***********************************************************************/ -Rwr_Cut_t * Rwr_CutCreateTriv( Abc_ManRwr_t * p, Abc_Obj_t * pNode ) +Rwr_Cut_t * Rwr_CutCreateTriv( Rwr_Man_t * p, Abc_Obj_t * pNode )  {      Rwr_Cut_t * pCut;      pCut = Rwr_CutAlloc( p ); diff --git a/src/opt/rwr/rwrEva.c b/src/opt/rwr/rwrEva.c index ecf03f4f..50e773f8 100644 --- a/src/opt/rwr/rwrEva.c +++ b/src/opt/rwr/rwrEva.c @@ -24,8 +24,8 @@  ///                        DECLARATIONS                              ///  //////////////////////////////////////////////////////////////////////// -static void Rwr_CutEvaluate( Abc_ManRwr_t * p, Rwr_Cut_t * pCut ); -static void Rwr_CutDecompose( Abc_ManRwr_t * p, Rwr_Cut_t * pCut, Vec_Int_t * vForm ); +static void Rwr_CutEvaluate( Rwr_Man_t * p, Abc_Obj_t * pNode, Rwr_Cut_t * pCut ); +static void Rwr_CutDecompose( Rwr_Man_t * p, Abc_Obj_t * pNode, Rwr_Cut_t * pCut, Vec_Int_t * vForm );  ////////////////////////////////////////////////////////////////////////  ///                     FUNCTION DEFITIONS                           /// @@ -49,13 +49,16 @@ static void Rwr_CutDecompose( Abc_ManRwr_t * p, Rwr_Cut_t * pCut, Vec_Int_t * vF    SeeAlso     []  ***********************************************************************/ -int Abc_NodeRwrRewrite( Abc_ManRwr_t * p, Abc_Obj_t * pNode ) +int Rwr_NodeRewrite( Rwr_Man_t * p, Abc_Obj_t * pNode )  {      Vec_Ptr_t Vector = {0,0,0}, * vFanins = &Vector;      Rwr_Cut_t * pCut, * pCutBest;      int BestGain = -1;      int i, Required = Vec_IntEntry( p->vReqTimes, pNode->Id ); +    // compute the cuts of the node +    Rwr_NodeComputeCuts( p, pNode ); +      // go through the cuts      for ( pCut = (Rwr_Cut_t *)pNode->pCopy, pCut = pCut->pNext; pCut; pCut = pCut->pNext )      { @@ -64,7 +67,7 @@ int Abc_NodeRwrRewrite( Abc_ManRwr_t * p, Abc_Obj_t * pNode )          vFanins->pArray = pCut->ppLeaves;          Abc_NodeCollectTfoCands( pNode->pNtk, pNode, vFanins, Required, p->vLevels, p->vTfo );          // evaluate the cut -        Rwr_CutEvaluate( p, pCut ); +        Rwr_CutEvaluate( p, pNode, pCut );          // check if the cut is the best          if ( pCut->fTime && pCut->fGain )          { @@ -83,14 +86,14 @@ int Abc_NodeRwrRewrite( Abc_ManRwr_t * p, Abc_Obj_t * pNode )      // collect the TFO again      Abc_NodeCollectTfoCands( pNode->pNtk, pNode, p->vFanins, Required, p->vLevels, p->vTfo );      // perform the decomposition -    Rwr_CutDecompose( p, pCutBest, p->vForm ); +    Rwr_CutDecompose( p, pNode, pCutBest, p->vForm );      // the best fanins are in p->vFanins, the result of decomposition is in p->vForm      return BestGain;  }  /**Function************************************************************* -  Synopsis    [Evaluates one cut.] +  Synopsis    [Evaluates the cut.]    Description [] @@ -99,13 +102,46 @@ int Abc_NodeRwrRewrite( Abc_ManRwr_t * p, Abc_Obj_t * pNode )    SeeAlso     []  ***********************************************************************/ -void Rwr_CutEvaluate( Abc_ManRwr_t * p, Rwr_Cut_t * pCut ) +void Rwr_CutEvaluate( Rwr_Man_t * p, Abc_Obj_t * pRoot, Rwr_Cut_t * pCut )  { +    Abc_Obj_t * pNode, * pFanin0, * pFanin1; +    Rwr_Node_t * pNodeFor; +    int i; +    // mark forest PIs corresponding to cut leaves +    Vec_PtrClear( p->vTfoFor ); +    for ( i = 0; i < (int)pCut->nLeaves; i++ ) +    { +        pNodeFor = p->vForest->pArray[i]; +        Vec_PtrPush( p->vTfoFor, pNodeFor ); +        pCut->ppLeaves[i]->pData = pNodeFor; +        pNodeFor->fMark = 1; +    } +    // detect forest nodes corresponding to TFO +    Vec_PtrForEachEntry( p->vTfo, pNode, i ) +    { +        pFanin0 = Abc_ObjFanin0(pNode); +        if ( pFanin0->pData == NULL ) +            continue; +        pFanin1 = Abc_ObjFanin1(pNode); +        if ( pFanin1->pData == NULL ) +            continue; + +    } + +    // find the best implementation of the root + +    // assign costs + +    // clean the nodes +    for ( i = 0; i < (int)pCut->nLeaves; i++ ) +        pCut->ppLeaves[i]->pData = NULL; +    Vec_PtrForEachEntry( p->vTfo, pNode, i ) +        pNode->pData = NULL;  }  /**Function************************************************************* -  Synopsis    [Evaluates one cut.] +  Synopsis    [Decomposes the cut.]    Description [] @@ -114,12 +150,10 @@ void Rwr_CutEvaluate( Abc_ManRwr_t * p, Rwr_Cut_t * pCut )    SeeAlso     []  ***********************************************************************/ -void Rwr_CutDecompose( Abc_ManRwr_t * p, Rwr_Cut_t * pCut, Vec_Int_t * vForm ) +void Rwr_CutDecompose( Rwr_Man_t * p, Abc_Obj_t * pRoot, Rwr_Cut_t * pCut, Vec_Int_t * vForm )  { -} - - +}  //////////////////////////////////////////////////////////////////////// diff --git a/src/opt/rwr/rwrExp.c b/src/opt/rwr/rwrExp.c index 37eabf5b..a5c355a9 100644 --- a/src/opt/rwr/rwrExp.c +++ b/src/opt/rwr/rwrExp.c @@ -24,8 +24,8 @@  ///                        DECLARATIONS                              ///  //////////////////////////////////////////////////////////////////////// -typedef struct Abc_ManRwrExp_t_ Abc_ManRwrExp_t; -struct Abc_ManRwrExp_t_ +typedef struct Rwr_Man4_t_ Rwr_Man4_t; +struct Rwr_Man4_t_  {      // internal lookups      int                nFuncs;           // the number of four-var functions @@ -35,13 +35,21 @@ struct Abc_ManRwrExp_t_      int                nClasses;         // the number of NN classes  }; -static Abc_ManRwrExp_t * s_pManRwrExp = NULL; +typedef struct Rwr_Man5_t_ Rwr_Man5_t; +struct Rwr_Man5_t_ +{ +    // internal lookups +    stmm_table *       tTableNN;         // the NN canonical forms +    stmm_table *       tTableNPN;        // the NPN canonical forms +}; + +static Rwr_Man4_t * s_pManRwrExp4 = NULL; +static Rwr_Man5_t * s_pManRwrExp5 = NULL;  ////////////////////////////////////////////////////////////////////////  ///                     FUNCTION DEFITIONS                           ///  //////////////////////////////////////////////////////////////////////// -  /**Function*************************************************************    Synopsis    [Collects stats about 4-var functions appearing in netlists.] @@ -53,43 +61,19 @@ static Abc_ManRwrExp_t * s_pManRwrExp = NULL;    SeeAlso     []  ***********************************************************************/ -void Rwt_ManExploreStart() +void Rwt_Man4ExploreStart()  { -    Abc_ManRwrExp_t * p; -    unsigned uTruth; -    int i, k, nClasses; -    int clk = clock(); - -    p = ALLOC( Abc_ManRwrExp_t, 1 ); -    memset( p, 0, sizeof(Abc_ManRwrExp_t) ); +    Rwr_Man4_t * p; +    p = ALLOC( Rwr_Man4_t, 1 ); +    memset( p, 0, sizeof(Rwr_Man4_t) );      // canonical forms      p->nFuncs    = (1<<16); -    p->puCanons  = ALLOC( unsigned short, p->nFuncs ); -    memset( p->puCanons, 0, sizeof(unsigned short) * p->nFuncs ); +    // canonical forms, phases, perms +    Extra_Truth4VarNPN( &p->puCanons, NULL, NULL );      // counters      p->pnCounts  = ALLOC( int, p->nFuncs );      memset( p->pnCounts, 0, sizeof(int) * p->nFuncs ); - -    // initialize the canonical forms -    nClasses = 1; -    for ( i = 1; i < p->nFuncs-1; i++ ) -    { -        if ( p->puCanons[i] ) -            continue; -        nClasses++; -        for ( k = 0; k < 32; k++ ) -        { -            uTruth = Rwr_FunctionPhase( (unsigned)i, (unsigned)k ); -            if ( p->puCanons[uTruth] == 0 ) -                p->puCanons[uTruth] = (unsigned short)i; -            else -                assert( p->puCanons[uTruth] == (unsigned short)i ); -        } -    } -    // set info for constant 1 -    p->puCanons[p->nFuncs-1] = 0; -    printf( "The number of NN-canonical forms = %d.\n", nClasses ); -    s_pManRwrExp = p; +    s_pManRwrExp4 = p;  }  /**Function************************************************************* @@ -103,10 +87,10 @@ void Rwt_ManExploreStart()    SeeAlso     []  ***********************************************************************/ -void Rwt_ManExploreCount( unsigned uTruth ) +void Rwt_Man4ExploreCount( unsigned uTruth )  {      assert( uTruth < (1<<16) ); -    s_pManRwrExp->pnCounts[ s_pManRwrExp->puCanons[uTruth] ]++;     +    s_pManRwrExp4->pnCounts[ s_pManRwrExp4->puCanons[uTruth] ]++;      }  /**Function************************************************************* @@ -120,7 +104,7 @@ void Rwt_ManExploreCount( unsigned uTruth )    SeeAlso     []  ***********************************************************************/ -void Rwt_ManExplorePrint() +void Rwt_Man4ExplorePrint()  {      FILE * pFile;      int i, CountMax, CountWrite, nCuts, nClasses; @@ -129,12 +113,12 @@ void Rwt_ManExplorePrint()      // find the max number of occurences      nCuts = nClasses = 0;      CountMax = 0; -    for ( i = 0; i < s_pManRwrExp->nFuncs; i++ ) +    for ( i = 0; i < s_pManRwrExp4->nFuncs; i++ )      { -        if ( CountMax < s_pManRwrExp->pnCounts[i] ) -            CountMax = s_pManRwrExp->pnCounts[i]; -        nCuts += s_pManRwrExp->pnCounts[i]; -        if ( s_pManRwrExp->pnCounts[i] > 0 ) +        if ( CountMax < s_pManRwrExp4->pnCounts[i] ) +            CountMax = s_pManRwrExp4->pnCounts[i]; +        nCuts += s_pManRwrExp4->pnCounts[i]; +        if ( s_pManRwrExp4->pnCounts[i] > 0 )              nClasses++;      }      printf( "Number of cuts considered       = %8d.\n", nCuts ); @@ -143,10 +127,10 @@ void Rwt_ManExplorePrint()      pDistrib = ALLOC( int, CountMax + 1 );      pReprs   = ALLOC( int, CountMax + 1 );      memset( pDistrib, 0, sizeof(int)*(CountMax + 1) ); -    for ( i = 0; i < s_pManRwrExp->nFuncs; i++ ) +    for ( i = 0; i < s_pManRwrExp4->nFuncs; i++ )      { -        pDistrib[ s_pManRwrExp->pnCounts[i] ]++; -        pReprs[ s_pManRwrExp->pnCounts[i] ] = i; +        pDistrib[ s_pManRwrExp4->pnCounts[i] ]++; +        pReprs[ s_pManRwrExp4->pnCounts[i] ] = i;      }      printf( "Occurence = %6d.  Num classes = %4d.  \n", 0, 2288-nClasses ); @@ -161,17 +145,187 @@ void Rwt_ManExplorePrint()      free( pReprs );      // write into a file all classes above limit (5)      CountWrite = 0; -    pFile = fopen( "nnclass_stats.txt", "w" ); -    for ( i = 0; i < s_pManRwrExp->nFuncs; i++ ) -        if ( s_pManRwrExp->pnCounts[i] > 5 ) +    pFile = fopen( "npnclass_stats4.txt", "w" ); +    for ( i = 0; i < s_pManRwrExp4->nFuncs; i++ ) +        if ( s_pManRwrExp4->pnCounts[i] > 0 )          { -            fprintf( pFile, "%d ", i ); +            Extra_PrintHex( pFile, i, 4 ); +            fprintf( pFile, " %10d\n", s_pManRwrExp4->pnCounts[i] ); +//            fprintf( pFile, "%d ", i );              CountWrite++;          }      fclose( pFile ); -    printf( "%d classes written into file \"%s\".\n", CountWrite, "nnclass_stats.txt" ); +    printf( "%d classes written into file \"%s\".\n", CountWrite, "npnclass_stats4.txt" );  } + + + +/**Function************************************************************* + +  Synopsis    [Collects stats about 4-var functions appearing in netlists.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +void Rwt_Man5ExploreStart() +{ +    Rwr_Man5_t * p; +    p = ALLOC( Rwr_Man5_t, 1 ); +    memset( p, 0, sizeof(Rwr_Man5_t) ); +    p->tTableNN  = stmm_init_table( st_numcmp, st_numhash ); +    p->tTableNPN = stmm_init_table( st_numcmp, st_numhash ); +    s_pManRwrExp5 = p; + +//Extra_PrintHex( stdout, Extra_TruthCanonNPN( 0x0000FFFF, 5 ), 5 ); +//printf( "\n" ); +} + +/**Function************************************************************* + +  Synopsis    [Collects stats about 4-var functions appearing in netlists.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +void Rwt_Man5ExploreCount( unsigned uTruth ) +{ +    int * pCounter; +    if ( !stmm_find_or_add( s_pManRwrExp5->tTableNN, (char *)uTruth, (char***)&pCounter ) ) +        *pCounter = 0; +    (*pCounter)++; +} + +/**Function************************************************************* + +  Synopsis    [Collects stats about 4-var functions appearing in netlists.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +void Rwt_Man5ExplorePrint() +{ +    FILE * pFile; +    stmm_generator * gen; +    int i, CountMax, nCuts, Counter; +    int * pDistrib; +    unsigned * pReprs; +    unsigned uTruth, uTruthC; +    int clk = clock(); +    Vec_Int_t * vClassesNN, * vClassesNPN; + +    // find the max number of occurences +    nCuts = 0; +    CountMax = 0; +    stmm_foreach_item( s_pManRwrExp5->tTableNN, gen, (char **)&uTruth, (char **)&Counter ) +    { +        nCuts += Counter; +        if ( CountMax < Counter ) +            CountMax = Counter; +    } +    printf( "Number of cuts considered       = %8d.\n", nCuts ); +    printf( "Classes occurring at least once = %8d.\n", stmm_count(s_pManRwrExp5->tTableNN) ); +    printf( "The largest number of occurence = %8d.\n", CountMax ); + +    // print the distribution of classes +    pDistrib = ALLOC( int, CountMax + 1 ); +    pReprs   = ALLOC( unsigned, CountMax + 1 ); +    memset( pDistrib, 0, sizeof(int)*(CountMax + 1) ); +    stmm_foreach_item( s_pManRwrExp5->tTableNN, gen, (char **)&uTruth, (char **)&Counter ) +    { +        assert( Counter <= CountMax ); +        pDistrib[ Counter ]++; +        pReprs[ Counter ] = uTruth; +    } + +    for ( i = 1; i <= CountMax; i++ ) +        if ( pDistrib[i] ) +        { +            printf( "Occurence = %6d.  Num classes = %4d.  Repr = ", i, pDistrib[i] ); +            Extra_PrintBinary( stdout, pReprs + i, 32 );  +            printf( "\n" ); +        } +    free( pDistrib ); +    free( pReprs ); + + +    // put them into an array +    vClassesNN = Vec_IntAlloc( stmm_count(s_pManRwrExp5->tTableNN) ); +    stmm_foreach_item( s_pManRwrExp5->tTableNN, gen, (char **)&uTruth, NULL ) +        Vec_IntPush( vClassesNN, (int)uTruth ); +    Vec_IntSortUnsigned( vClassesNN ); + +    // write into a file all classes +    pFile = fopen( "nnclass_stats5.txt", "w" ); +    Vec_IntForEachEntry( vClassesNN, uTruth, i ) +    { +        if ( !stmm_lookup( s_pManRwrExp5->tTableNN, (char *)uTruth, (char **)&Counter ) ) +        { +            assert( 0 ); +        } +        Extra_PrintHex( pFile, uTruth, 5 ); +        fprintf( pFile, " %10d\n", Counter ); +    } +    fclose( pFile ); +    printf( "%d classes written into file \"%s\".\n", vClassesNN->nSize, "nnclass_stats5.txt" ); + + +clk = clock(); +    // how many NPN classes exist? +    Vec_IntForEachEntry( vClassesNN, uTruth, i ) +    { +        int * pCounter; +        uTruthC = Extra_TruthCanonNPN( uTruth, 5 ); +        if ( !stmm_find_or_add( s_pManRwrExp5->tTableNPN, (char *)uTruthC, (char***)&pCounter ) ) +            *pCounter = 0; +        if ( !stmm_lookup( s_pManRwrExp5->tTableNN, (char *)uTruth, (char **)&Counter ) ) +        { +            assert( 0 ); +        } +        (*pCounter) += Counter; +    } +    printf( "The numbe of NPN classes = %d.\n", stmm_count(s_pManRwrExp5->tTableNPN) ); +PRT( "Computing NPN classes", clock() - clk ); + +    // put them into an array +    vClassesNPN = Vec_IntAlloc( stmm_count(s_pManRwrExp5->tTableNPN) ); +    stmm_foreach_item( s_pManRwrExp5->tTableNPN, gen, (char **)&uTruth, NULL ) +        Vec_IntPush( vClassesNPN, (int)uTruth ); +    Vec_IntSortUnsigned( vClassesNPN ); + +    // write into a file all classes +    pFile = fopen( "npnclass_stats5.txt", "w" ); +    Vec_IntForEachEntry( vClassesNPN, uTruth, i ) +    { +        if ( !stmm_lookup( s_pManRwrExp5->tTableNPN, (char *)uTruth, (char **)&Counter ) ) +        { +            assert( 0 ); +        } +        Extra_PrintHex( pFile, uTruth, 5 ); +        fprintf( pFile, " %10d\n", Counter ); +    } +    fclose( pFile ); +    printf( "%d classes written into file \"%s\".\n", vClassesNPN->nSize, "npnclass_stats5.txt" ); + + +    // can they be uniquely characterized? + +} + + +  ////////////////////////////////////////////////////////////////////////  ///                       END OF FILE                                ///  //////////////////////////////////////////////////////////////////////// diff --git a/src/opt/rwr/rwrLib.c b/src/opt/rwr/rwrLib.c index 91604244..a283e38f 100644 --- a/src/opt/rwr/rwrLib.c +++ b/src/opt/rwr/rwrLib.c @@ -24,14 +24,15 @@  ///                        DECLARATIONS                              ///  //////////////////////////////////////////////////////////////////////// -static Rwr_Node_t *        Rwr_ManTryNode( Abc_ManRwr_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1, int fExor, int Level, int Volume ); -static Rwr_Node_t *        Rwr_ManAddNode( Abc_ManRwr_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1, int fExor, int Level, int Volume ); -static int                 Rwr_ManNodeVolume( Abc_ManRwr_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1 ); +static Rwr_Node_t *        Rwr_ManTryNode( Rwr_Man_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1, int fExor, int Level, int Volume ); +static Rwr_Node_t *        Rwr_ManAddNode( Rwr_Man_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1, int fExor, int Level, int Volume ); +static int                 Rwr_ManNodeVolume( Rwr_Man_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1 ); -static void                Rwr_ManIncTravId_int( Abc_ManRwr_t * p ); -static inline void         Rwr_ManIncTravId( Abc_ManRwr_t * p )     { if ( p->nTravIds++ == 0x8FFFFFFF ) Rwr_ManIncTravId_int( p ); } +static void                Rwr_ManIncTravId_int( Rwr_Man_t * p ); +static inline void         Rwr_ManIncTravId( Rwr_Man_t * p )     { if ( p->nTravIds++ == 0x8FFFFFFF ) Rwr_ManIncTravId_int( p ); } -static void                Rwr_MarkUsed_rec( Abc_ManRwr_t * p, Rwr_Node_t * pNode ); +static void                Rwr_MarkUsed_rec( Rwr_Man_t * p, Rwr_Node_t * pNode ); +static void                Rwr_ListAddToTail( Rwr_Node_t ** ppList, Rwr_Node_t * pNode );  ////////////////////////////////////////////////////////////////////////  ///                     FUNCTION DEFITIONS                           /// @@ -48,7 +49,7 @@ static void                Rwr_MarkUsed_rec( Abc_ManRwr_t * p, Rwr_Node_t * pNod    SeeAlso     []  ***********************************************************************/ -void Rwr_ManPrecompute( Abc_ManRwr_t * p ) +void Rwr_ManPrecompute( Rwr_Man_t * p )  {      Rwr_Node_t * p0, * p1;      int i, k, Level, Volume; @@ -80,7 +81,7 @@ void Rwr_ManPrecompute( Abc_ManRwr_t * p )          // compute the level and volume of the new nodes          Level  = 1 + ABC_MAX( p0->Level, p1->Level );          Volume = 1 + Rwr_ManNodeVolume( p, p0, p1 ); -        // try four different nodes +        // try four different AND nodes          Rwr_ManTryNode( p,         p0 ,         p1 , 0, Level, Volume );          Rwr_ManTryNode( p, Rwr_Not(p0),         p1 , 0, Level, Volume );          Rwr_ManTryNode( p,         p0 , Rwr_Not(p1), 0, Level, Volume ); @@ -136,7 +137,7 @@ save :    SeeAlso     []  ***********************************************************************/ -void Rwr_ManWriteToFile( Abc_ManRwr_t * p, char * pFileName ) +void Rwr_ManWriteToFile( Rwr_Man_t * p, char * pFileName )  {      FILE * pFile;      Rwr_Node_t * pNode; @@ -173,7 +174,7 @@ void Rwr_ManWriteToFile( Abc_ManRwr_t * p, char * pFileName )    SeeAlso     []  ***********************************************************************/ -void Rwr_ManLoadFromFile( Abc_ManRwr_t * p, char * pFileName ) +void Rwr_ManLoadFromFile( Rwr_Man_t * p, char * pFileName )  {      FILE * pFile;      Rwr_Node_t * p0, * p1; @@ -227,7 +228,7 @@ void Rwr_ManLoadFromFile( Abc_ManRwr_t * p, char * pFileName )    SeeAlso     []  ***********************************************************************/ -void Rwr_ManIncTravId_int( Abc_ManRwr_t * p ) +void Rwr_ManIncTravId_int( Rwr_Man_t * p )  {      Rwr_Node_t * pNode;      int i; @@ -247,7 +248,7 @@ void Rwr_ManIncTravId_int( Abc_ManRwr_t * p )    SeeAlso     []  ***********************************************************************/ -void Rwr_MarkUsed_rec( Abc_ManRwr_t * p, Rwr_Node_t * pNode ) +void Rwr_MarkUsed_rec( Rwr_Man_t * p, Rwr_Node_t * pNode )  {      if ( pNode->fUsed || pNode->TravId == p->nTravIds )          return; @@ -268,7 +269,7 @@ void Rwr_MarkUsed_rec( Abc_ManRwr_t * p, Rwr_Node_t * pNode )    SeeAlso     []  ***********************************************************************/ -void Rwr_Trav_rec( Abc_ManRwr_t * p, Rwr_Node_t * pNode, int * pVolume ) +void Rwr_Trav_rec( Rwr_Man_t * p, Rwr_Node_t * pNode, int * pVolume )  {      if ( pNode->fMark || pNode->TravId == p->nTravIds )          return; @@ -291,7 +292,7 @@ void Rwr_Trav_rec( Abc_ManRwr_t * p, Rwr_Node_t * pNode, int * pVolume )    SeeAlso     []  ***********************************************************************/ -void Rwr_Trav2_rec( Abc_ManRwr_t * p, Rwr_Node_t * pNode, int * pVolume ) +void Rwr_Trav2_rec( Rwr_Man_t * p, Rwr_Node_t * pNode, int * pVolume )  {      if ( pNode->fMark || pNode->TravId == p->nTravIds )          return; @@ -312,7 +313,7 @@ void Rwr_Trav2_rec( Abc_ManRwr_t * p, Rwr_Node_t * pNode, int * pVolume )    SeeAlso     []  ***********************************************************************/ -int Rwr_ManNodeVolume( Abc_ManRwr_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1 ) +int Rwr_ManNodeVolume( Rwr_Man_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1 )  {      int Volume = 0;      Rwr_ManIncTravId( p ); @@ -332,10 +333,10 @@ int Rwr_ManNodeVolume( Abc_ManRwr_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1 )    SeeAlso     []  ***********************************************************************/ -Rwr_Node_t * Rwr_ManTryNode( Abc_ManRwr_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1, int fExor, int Level, int Volume ) +Rwr_Node_t * Rwr_ManTryNode( Rwr_Man_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1, int fExor, int Level, int Volume )  {      Rwr_Node_t * pOld, * pNew, ** ppPlace; -    unsigned uTruth, uCanon; +    unsigned uTruth;      // compute truth table, level, volume      p->nConsidered++;      if ( fExor ) @@ -346,12 +347,11 @@ Rwr_Node_t * Rwr_ManTryNode( Abc_ManRwr_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1,      else          uTruth = (Rwr_IsComplement(p0)? ~Rwr_Regular(p0)->uTruth : Rwr_Regular(p0)->uTruth) &                    (Rwr_IsComplement(p1)? ~Rwr_Regular(p1)->uTruth : Rwr_Regular(p1)->uTruth) & 0xFFFF; -    uCanon = p->puCanons[uTruth];      // skip non-practical classes -    if ( Level > 2 && p->pPractical[uCanon] == 0 ) +    if ( Level > 2 && !p->pPractical[p->puCanons[uTruth]] )          return NULL;      // enumerate through the nodes with the same canonical form -    ppPlace = p->pTable + uCanon; +    ppPlace = p->pTable + uTruth;      for ( pOld = *ppPlace; pOld; ppPlace = &pOld->pNext, pOld = pOld->pNext )      {          if ( pOld->Level <  (unsigned)Level && pOld->Volume < (unsigned)Volume ) @@ -361,8 +361,19 @@ Rwr_Node_t * Rwr_ManTryNode( Abc_ManRwr_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1,  //        if ( pOld->Level <  (unsigned)Level && pOld->Volume == (unsigned)Volume )  //            return NULL;      } -//    if ( fExor ) -//        printf( "Adding EXOR of %d and %d.\n", p0->Id, p1->Id ); +    // enumerate through the nodes with the opposite polarity +    for ( pOld = p->pTable[~uTruth & 0xFFFF]; pOld; pOld = pOld->pNext ) +    { +        if ( pOld->Level <  (unsigned)Level && pOld->Volume < (unsigned)Volume ) +            return NULL; +        if ( pOld->Level == (unsigned)Level && pOld->Volume < (unsigned)Volume ) +            return NULL; +//        if ( pOld->Level <  (unsigned)Level && pOld->Volume == (unsigned)Volume ) +//            return NULL; +    } +    // count the classes +    if ( p->pTable[uTruth] == NULL && p->puCanons[uTruth] == uTruth ) +        p->nClasses++;      // create the new node      pNew = (Rwr_Node_t *)Extra_MmFixedEntryFetch( p->pMmNode );      pNew->Id     = p->vForest->nSize; @@ -378,8 +389,6 @@ Rwr_Node_t * Rwr_ManTryNode( Abc_ManRwr_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1,      pNew->pNext  = NULL;      Vec_PtrPush( p->vForest, pNew );      *ppPlace     = pNew; -    if ( p->pTable[uCanon] == pNew ) -        p->nClasses++;      return pNew;  } @@ -394,10 +403,10 @@ Rwr_Node_t * Rwr_ManTryNode( Abc_ManRwr_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1,    SeeAlso     []  ***********************************************************************/ -Rwr_Node_t * Rwr_ManAddNode( Abc_ManRwr_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1, int fExor, int Level, int Volume ) +Rwr_Node_t * Rwr_ManAddNode( Rwr_Man_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1, int fExor, int Level, int Volume )  { -    Rwr_Node_t * pOld, * pNew; -    unsigned uTruth, uCanon; +    Rwr_Node_t * pNew; +    unsigned uTruth;      // compute truth table, leve, volume      p->nConsidered++;      if ( fExor ) @@ -405,10 +414,6 @@ Rwr_Node_t * Rwr_ManAddNode( Abc_ManRwr_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1,      else          uTruth = (Rwr_IsComplement(p0)? ~Rwr_Regular(p0)->uTruth : Rwr_Regular(p0)->uTruth) &                    (Rwr_IsComplement(p1)? ~Rwr_Regular(p1)->uTruth : Rwr_Regular(p1)->uTruth) & 0xFFFF; -    uCanon = p->puCanons[uTruth]; -    // skip non-practical classes -//    if ( p->pPractical[uCanon] == 0 ) -//        return NULL;      // create the new node      pNew = (Rwr_Node_t *)Extra_MmFixedEntryFetch( p->pMmNode );      pNew->Id     = p->vForest->nSize; @@ -424,16 +429,14 @@ Rwr_Node_t * Rwr_ManAddNode( Abc_ManRwr_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1,      pNew->pNext  = NULL;      Vec_PtrPush( p->vForest, pNew );      // do not add if the node is not essential -    if ( uTruth != uCanon ) +    if ( uTruth != p->puCanons[uTruth] )          return pNew;      // add to the list      p->nAdded++; -    pOld = p->pTable[uCanon]; -    if ( pOld == NULL ) +    if ( p->pTable[p->pMap[uTruth]] == NULL )          p->nClasses++; -    pNew->pNext = pOld; -    p->pTable[uCanon] = pNew; +    Rwr_ListAddToTail( p->pTable + p->pMap[uTruth], pNew );      return pNew;  } @@ -448,7 +451,7 @@ Rwr_Node_t * Rwr_ManAddNode( Abc_ManRwr_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1,    SeeAlso     []  ***********************************************************************/ -Rwr_Node_t * Rwr_ManAddVar( Abc_ManRwr_t * p, unsigned uTruth ) +Rwr_Node_t * Rwr_ManAddVar( Rwr_Man_t * p, unsigned uTruth, char * pFileName )  {      Rwr_Node_t * pNew;      pNew = (Rwr_Node_t *)Extra_MmFixedEntryFetch( p->pMmNode ); @@ -461,16 +464,40 @@ Rwr_Node_t * Rwr_ManAddVar( Abc_ManRwr_t * p, unsigned uTruth )      pNew->fUsed  = 1;      pNew->fExor  = 0;      pNew->p0     = NULL; -    pNew->p1     = NULL;    pNew->pNext  = NULL; +    pNew->p1     = NULL;     +    pNew->pNext  = NULL;      Vec_PtrPush( p->vForest, pNew ); -    assert( p->pTable[p->puCanons[uTruth]] == NULL ); -    p->pTable[p->puCanons[uTruth]] = pNew; +    if ( pFileName == NULL ) +        Rwr_ListAddToTail( p->pTable + uTruth, pNew ); +//    else +//        Rwr_ListAddToTail( p->pTable + p->pMap[uTruth], pNew );      return pNew;  }  /**Function************************************************************* +  Synopsis    [Adds the node to the end of the list.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +void Rwr_ListAddToTail( Rwr_Node_t ** ppList, Rwr_Node_t * pNode ) +{ +    Rwr_Node_t * pTemp; +    // find the last one +    for ( pTemp = *ppList; pTemp; pTemp = pTemp->pNext ) +        ppList = &pTemp->pNext; +    // attach at the end +    *ppList = pNode; +} + +/**Function************************************************************* +    Synopsis    [Prints one rwr node.]    Description [] @@ -567,16 +594,17 @@ void Rwr_NodePrint_rec( FILE * pFile, Rwr_Node_t * pNode )    SeeAlso     []  ***********************************************************************/ -void Rwr_NodePrint( FILE * pFile, Abc_ManRwr_t * p, Rwr_Node_t * pNode ) +void Rwr_NodePrint( FILE * pFile, Rwr_Man_t * p, Rwr_Node_t * pNode )  {      unsigned uTruth; -    fprintf( pFile, "%5d :", pNode->Id ); -    fprintf( pFile, " tt=", pNode->Id ); +    fprintf( pFile, "%5d : ", pNode->Id ); +    Extra_PrintHex( pFile, pNode->uTruth, 4 ); +    fprintf( pFile, " tt=" );      uTruth = pNode->uTruth;      Extra_PrintBinary( pFile, &uTruth, 16 ); -    fprintf( pFile, " cn=", pNode->Id ); -    uTruth = p->puCanons[pNode->uTruth]; -    Extra_PrintBinary( pFile, &uTruth, 16 ); +//    fprintf( pFile, " cn=", pNode->Id ); +//    uTruth = p->puCanons[pNode->uTruth]; +//    Extra_PrintBinary( pFile, &uTruth, 16 );      fprintf( pFile, " lev=%d", pNode->Level );      fprintf( pFile, " vol=%d", pNode->Volume );      fprintf( pFile, "  " ); @@ -595,45 +623,84 @@ void Rwr_NodePrint( FILE * pFile, Abc_ManRwr_t * p, Rwr_Node_t * pNode )    SeeAlso     []  ***********************************************************************/ -void Rwr_ManPrint( Abc_ManRwr_t * p ) +void Rwr_ManPrintFirst( Rwr_Man_t * p )  { -/* +    FILE * pFile;      Rwr_Node_t * pNode;      unsigned uTruth; -    int Limit = 4; +    int nFuncs; +    int Counter;      int i; -    for ( i = 0; i < p->nFuncs; i++ ) +    pFile = fopen( "graph_lib.txt", "w" ); + +    Counter = 0; +    nFuncs = (1 << 16); +    for ( i = 0; i < nFuncs; i++ )      {          if ( p->pTable[i] == NULL )              continue; -        if ( Limit-- == 0 ) -            break; -        printf( "\nClass " ); +        if ( i != p->puCanons[i] ) +            continue; + +        fprintf( pFile, "\nClass %3d  ", Counter++ ); + +        // count the volume of the bush +        { +            int Volume = 0; +            int nFuncs = 0; +            Rwr_ManIncTravId( p ); +            for ( pNode = p->pTable[i]; pNode; pNode = pNode->pNext ) +            { +                if ( pNode->uTruth != p->puCanons[pNode->uTruth] ) +                    continue; +                nFuncs++; +                Rwr_Trav2_rec( p, pNode, &Volume ); +            } +            fprintf( pFile, "Functions = %2d. Volume = %2d. ", nFuncs, Volume ); +        } +          uTruth = i; -        Extra_PrintBinary( stdout, &uTruth, 16 ); -        printf( "\n" ); +        Extra_PrintBinary( pFile, &uTruth, 16 ); +        fprintf( pFile, "\n" ); +          for ( pNode = p->pTable[i]; pNode; pNode = pNode->pNext )              if ( pNode->uTruth == p->puCanons[pNode->uTruth] ) -                Rwr_NodePrint( p, pNode ); +                Rwr_NodePrint( pFile, p, pNode );      } -*/ + +    fclose( pFile ); +} + +/**Function************************************************************* + +  Synopsis    [Prints one rwr node.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +void Rwr_ManPrintNext( Rwr_Man_t * p ) +{      FILE * pFile;      Rwr_Node_t * pNode;      unsigned uTruth; -    int Limit = 4; +    int nFuncs;      int Counter;      int i; -    pFile = fopen( "graph_lib.txt", "w" ); +    pFile = fopen( "graph_lib2.txt", "w" );      Counter = 0; -    for ( i = 0; i < p->nFuncs; i++ ) +    nFuncs = (1 << 16); +    for ( i = 0; i < 222; i++ )      {          if ( p->pTable[i] == NULL )              continue; -//        if ( Limit-- == 0 ) -//            break; +          fprintf( pFile, "\nClass %3d  ", Counter++ );          // count the volume of the bush @@ -642,15 +709,16 @@ void Rwr_ManPrint( Abc_ManRwr_t * p )              int nFuncs = 0;              Rwr_ManIncTravId( p );              for ( pNode = p->pTable[i]; pNode; pNode = pNode->pNext ) -                if ( pNode->uTruth == p->puCanons[pNode->uTruth] ) -                { -                    nFuncs++; -                    Rwr_Trav2_rec( p, pNode, &Volume ); -                } +            { +                if ( pNode->uTruth != p->puCanons[pNode->uTruth] ) +                    continue; +                nFuncs++; +                Rwr_Trav2_rec( p, pNode, &Volume ); +            }              fprintf( pFile, "Functions = %2d. Volume = %2d. ", nFuncs, Volume );          } -        uTruth = i; +        uTruth = p->pTable[i]->uTruth;          Extra_PrintBinary( pFile, &uTruth, 16 );          fprintf( pFile, "\n" ); diff --git a/src/opt/rwr/rwrMan.c b/src/opt/rwr/rwrMan.c index 46752696..3d40f79e 100644 --- a/src/opt/rwr/rwrMan.c +++ b/src/opt/rwr/rwrMan.c @@ -6,7 +6,7 @@    PackageName [DAG-aware AIG rewriting package.] -  Synopsis    [] +  Synopsis    [Rewriting manager.]    Author      [Alan Mishchenko] @@ -24,51 +24,26 @@  ///                        DECLARATIONS                              ///  //////////////////////////////////////////////////////////////////////// -// the following information was derived by computing all 4-input cuts of IWLS, MCNC, and ISCAS benchmarks -#define RWR_NUM_CLASSES  775 +// the following practical NPN classes of 4-variable functions were computed +// by considering all 4-input cuts appearing in IWLS, MCNC, and ISCAS benchmarks +#define RWR_NUM_CLASSES  135  static int s_PracticalClasses[RWR_NUM_CLASSES] = { -    0, 1, 3, 5, 6, 7, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 51, 53, 54, 55, 60, 61, 63, 85, 86,  -    87, 90, 91, 95, 102, 103, 105, 107, 111, 119, 123, 125, 126, 127, 255, 257, 258, 259, 260, 261, 262, 263, 264, 265,  -    266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 281, 282, 284, 286, 287, 288, 289, 290, 291, 293, 297,  -    298, 299, 300, 302, 303, 304, 305, 306, 307, 308, 310, 311, 312, 313, 315, 316, 317, 319, 320, 321, 323, 324, 325, 329,  -    332, 334, 335, 336, 337, 338, 340, 341, 342, 343, 345, 347, 349, 351, 352, 357, 358, 359, 361, 367, 368, 369, 371,  -    373, 375, 379, 381, 383, 384, 385, 386, 388, 389, 392, 393, 395, 397, 399, 400, 404, 408, 409, 416, 417, 419, 420,  -    421, 424, 425, 426, 427, 431, 433, 443, 448, 449, 451, 453, 456, 457, 459, 460, 461, 462, 463, 465, 476, 477, 480,  -    481, 483, 489, 492, 493, 494, 495, 496, 497, 499, 500, 501, 506, 507, 508, 509, 510, 771, 773, 774, 775, 780, 781,  -    783, 785, 786, 787, 788, 790, 791, 792, 796, 797, 799, 816, 817, 819, 820, 821, 834, 835, 836, 837, 838, 839, 840,  -    844, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 859, 860, 861, 863, 864, 867, 870, 871, 876, 878, 880, 883,  -    884, 885, 887, 967, 973, 975, 979, 984, 988, 989, 990, 1009, 1011, 1012, 1013, 1020, 1285, 1286, 1287, 1290, 1291,  -    1295, 1297, 1298, 1300, 1301, 1303, 1307, 1308, 1309, 1311, 1314, 1316, 1317, 1318, 1319, 1322, 1325, 1327, 1329,  -    1330, 1331, 1332, 1333, 1334, 1335, 1336, 1338, 1340, 1341, 1360, 1361, 1363, 1365, 1367, 1380, 1381, 1382, 1383,  -    1390, 1392, 1395, 1397, 1399, 1440, 1445, 1447, 1450, 1451, 1455, 1458, 1461, 1463, 1467, 1525, 1530, 1542, 1543,  -    1545, 1547, 1551, 1553, 1554, 1558, 1559, 1561, 1567, 1569, 1570, 1572, 1574, 1576, 1587, 1588, 1590, 1591, 1596,  -    1618, 1620, 1621, 1623, 1624, 1632, 1638, 1641, 1647, 1654, 1655, 1680, 1686, 1687, 1689, 1695, 1718, 1776, 1782,  -    1785, 1799, 1803, 1805, 1806, 1807, 1811, 1813, 1815, 1823, 1826, 1831, 1843, 1844, 1847, 1859, 1860, 1863, 1875,  -    1877, 1879, 1895, 1902, 1904, 1911, 1912, 1927, 1928, 1933, 1935, 1945, 1956, 1957, 1959, 1962, 1964, 1965, 1975,  -    1979, 1987, 1991, 1995, 1996, 2000, 2002, 2007, 2013, 2023, 2032, 2040, 3855, 3857, 3859, 3861, 3864, 3866, 3867,  -    3868, 3869, 3870, 3891, 3892, 3893, 3900, 3921, 3925, 3942, 3945, 3956, 3960, 4080, 4369, 4370, 4371, 4372, 4373,  -    4374, 4375, 4376, 4377, 4378, 4379, 4380, 4381, 4382, 4386, 4387, 4388, 4389, 4391, 4392, 4394, 4396, 4403, 4405,  -    4408, 4409, 4411, 4420, 4421, 4422, 4423, 4424, 4426, 4428, 4437, 4439, 4445, 4488, 4494, 4505, 4507, 4509, 4522,  -    4524, 4525, 4526, 4539, 4540, 4542, 4556, 4557, 4573, 4574, 4590, 4626, 4627, 4629, 4630, 4631, 4632, 4634, 4638,  -    4641, 4643, 4648, 4659, 4680, 4695, 4698, 4702, 4713, 4731, 4740, 4758, 4766, 4773, 4791, 4812, 4830, 4845, 4883,  -    4885, 4887, 4888, 4891, 4892, 4899, 4903, 4913, 4914, 4915, 4934, 4940, 4945, 4947, 4949, 4951, 4972, 5005, 5011,  -    5017, 5019, 5029, 5043, 5049, 5058, 5059, 5060, 5068, 5075, 5079, 5083, 5084, 5100, 5140, 5141, 5142, 5143, 5148,  -    5160, 5171, 5174, 5180, 5182, 5185, 5186, 5187, 5189, 5205, 5207, 5214, 5238, 5245, 5246, 5250, 5270, 5278, 5290,  -    5310, 5315, 5335, 5355, 5397, 5399, 5401, 5402, 5405, 5413, 5414, 5415, 5418, 5427, 5429, 5445, 5457, 5460, 5461,  -    5463, 5469, 5482, 5522, 5525, 5533, 5540, 5546, 5557, 5565, 5571, 5580, 5589, 5593, 5605, 5610, 5654, 5673, 5692,  -    5698, 5729, 5734, 5782, 5790, 5796, 5814, 5826, 5846, 5911, 5931, 5965, 6001, 6066, 6120, 6168, 6174, 6180, 6206,  -    6210, 6229, 6234, 6270, 6273, 6279, 6363, 6375, 6425, 6427, 6438, 6446, 6451, 6457, 6478, 6482, 6485, 6489, 6502,  -    6545, 6553, 6564, 6570, 6594, 6617, 6630, 6682, 6683, 6685, 6686, 6693, 6709, 6741, 6746, 6817, 6821, 6826, 6833,  -    6849, 6885, 6939, 6940, 6951, 6963, 6969, 6990, 6997, 7065, 7077, 7089, 7140, 7196, 7212, 7219, 7220, 7228, 7230,  -    7251, 7324, 7356, 7361, 7363, 7372, 7377, 7395, 7453, 7470, 7475, 7495, 7509, 7513, 7526, 7619, 7633, 7650, 7710,  -    7725, 7731, 7740, 7755, 7770, 7800, 7815, 7830, 7845, 7860, 7890, 7905, 13107, 13109, 13110, 13116, 13141, 13146,  -    13161, 13164, 13621, 13622, 13626, 13651, 13653, 13658, 13669, 13670, 13763, 13765, 13770, 13878, 13881, 13884,  -    13910, 13923, 13926, 13932, 13971, 13974, 13980, 14022, 14025, 15420, 15445, 15450, 15462, 15465, 15555, 21845,  -    21846, 21850, 21865, 21866, 21930, 22102, 22105, 22106, 22117, 22118, 22122, 22165, 22166, 22169, 22170, 22181,  -    22182, 22185, 23130, 23142, 23145, 23205, 26214, 26217, 26985, 27030  +    0x0000, 0x0001, 0x0003, 0x0006, 0x0007, 0x000f, 0x0016, 0x0017, 0x0018, 0x0019, 0x001b,  +    0x001e, 0x001f, 0x003c, 0x003d, 0x003f, 0x0069, 0x006b, 0x006f, 0x007e, 0x007f, 0x00ff,  +    0x0116, 0x0118, 0x0119, 0x011a, 0x011b, 0x011e, 0x011f, 0x012c, 0x012d, 0x012f, 0x013c,  +    0x013d, 0x013e, 0x013f, 0x0168, 0x0169, 0x016f, 0x017f, 0x0180, 0x0181, 0x0182, 0x0183,  +    0x0186, 0x0189, 0x018b, 0x018f, 0x0198, 0x0199, 0x019b, 0x01a8, 0x01a9, 0x01aa, 0x01ab,  +    0x01ac, 0x01ad, 0x01ae, 0x01af, 0x01bf, 0x01e9, 0x01ea, 0x01eb, 0x01ee, 0x01ef, 0x01fe,  +    0x033c, 0x033d, 0x033f, 0x0356, 0x0357, 0x0358, 0x0359, 0x035a, 0x035b, 0x035f, 0x0368,  +    0x0369, 0x036c, 0x036e, 0x037d, 0x03c0, 0x03c1, 0x03c3, 0x03c7, 0x03cf, 0x03d4, 0x03d5,  +    0x03d7, 0x03d8, 0x03d9, 0x03dc, 0x03dd, 0x03de, 0x03fc, 0x0660, 0x0661, 0x0666, 0x0669,  +    0x066f, 0x0676, 0x067e, 0x0690, 0x0696, 0x0697, 0x069f, 0x06b1, 0x06b6, 0x06f0, 0x06f2,  +    0x06f6, 0x06f9, 0x0776, 0x0778, 0x07b0, 0x07b1, 0x07b4, 0x07bc, 0x07f0, 0x07f2, 0x07f8,  +    0x0ff0, 0x1683, 0x1696, 0x1698, 0x169e, 0x16e9, 0x178e, 0x17e8, 0x18e7, 0x19e6, 0x1be4,  +    0x1ee1, 0x3cc3, 0x6996   }; -static unsigned short      Rwr_FunctionPerm( unsigned uTruth, int Phase ); +static unsigned short  Rwr_FunctionPerm( unsigned uTruth, int Phase );  ////////////////////////////////////////////////////////////////////////  ///                     FUNCTION DEFITIONS                           /// @@ -85,77 +60,64 @@ static unsigned short      Rwr_FunctionPerm( unsigned uTruth, int Phase );    SeeAlso     []  ***********************************************************************/ -Abc_ManRwr_t * Abc_NtkManRwrStart( char * pFileName ) +Rwr_Man_t * Rwr_ManStart( char * pFileName )  { -    Abc_ManRwr_t * p; -    unsigned uTruth; +    Rwr_Man_t * p;      int i, k, nClasses;      int clk = clock(); +    int TableSize; -    p = ALLOC( Abc_ManRwr_t, 1 ); -    memset( p, 0, sizeof(Abc_ManRwr_t) ); -    // canonical forms +    p = ALLOC( Rwr_Man_t, 1 ); +    memset( p, 0, sizeof(Rwr_Man_t) );      p->nFuncs    = (1<<16); -    p->puCanons  = ALLOC( unsigned short, p->nFuncs ); -    memset( p->puCanons, 0, sizeof(unsigned short) * p->nFuncs ); -    // permutations -    p->puPhases  = ALLOC( char, p->nFuncs ); -    memset( p->puPhases, 0, sizeof(char) * p->nFuncs ); -    // hash table -    p->pTable  = ALLOC( Rwr_Node_t *, p->nFuncs ); -    memset( p->pTable, 0, sizeof(Rwr_Node_t *) * p->nFuncs ); -    // practical classes +    // create the table +    TableSize = pFileName? 222: (1<<16); +    p->pTable = ALLOC( Rwr_Node_t *, TableSize ); +    memset( p->pTable, 0, sizeof(Rwr_Node_t *) * TableSize ); +    // canonical forms, phases, perms +    Extra_Truth4VarNPN( &p->puCanons, &p->pPhases, &p->pPerms ); +    // initialize practical classes      p->pPractical  = ALLOC( char, p->nFuncs );      memset( p->pPractical, 0, sizeof(char) * p->nFuncs ); -    // other stuff -    p->vForest  = Vec_PtrAlloc( 100 ); -    p->vForm    = Vec_IntAlloc( 50 ); -    p->vFanins  = Vec_PtrAlloc( 50 ); -    p->vTfo     = Vec_PtrAlloc( 50 ); -    p->vLevels  = Vec_VecAlloc( 50 ); -    p->pMmNode  = Extra_MmFixedStart( sizeof(Rwr_Node_t) ); -    p->nTravIds = 1; -    assert( sizeof(Rwr_Node_t) == sizeof(Rwr_Cut_t) ); - -    // initialize the canonical forms -    nClasses = 1; -    for ( i = 1; i < p->nFuncs-1; i++ ) +    for ( i = 0; i < RWR_NUM_CLASSES; i++ ) +        p->pPractical[ s_PracticalClasses[i] ] = 1; +    // set the mapping of classes +    nClasses = 0; +    p->pMap = ALLOC( unsigned char, p->nFuncs ); +    for ( i = 0; i < p->nFuncs; i++ )      { -        if ( p->puCanons[i] ) -            continue; -        nClasses++; -        for ( k = 0; k < 32; k++ ) +        if ( i != p->puCanons[i] )          { -            uTruth = Rwr_FunctionPhase( (unsigned)i, (unsigned)k ); -            if ( p->puCanons[uTruth] == 0 ) -            { -                p->puCanons[uTruth] = (unsigned short)i; -                p->puPhases[uTruth] = (char)k; -            } -            else -                assert( p->puCanons[uTruth] == (unsigned short)i ); +            assert( i > p->puCanons[i] ); +            p->pMap[i] = p->pMap[p->puCanons[i]]; +            continue;          } +        p->pMap[i] = nClasses++;      } -    // set info for constant 1 -    p->puCanons[p->nFuncs-1] = 0; -    p->puPhases[p->nFuncs-1] = 16; -    printf( "The number of NN-canonical forms = %d.\n", nClasses ); +    printf( "The number of NPN-canonical forms = %d.\n", nClasses );      // initialize permutations      for ( i = 0; i < 256; i++ )          for ( k = 0; k < 16; k++ )              p->puPerms[i][k] = Rwr_FunctionPerm( i, k ); -    // initialize practical classes -    for ( i = 0; i < RWR_NUM_CLASSES; i++ ) -        p->pPractical[ s_PracticalClasses[i] ] = 1; +    // other stuff +    p->nTravIds = 1; +    p->vForest  = Vec_PtrAlloc( 100 ); +    p->vForm    = Vec_IntAlloc( 50 ); +    p->vFanins  = Vec_PtrAlloc( 50 ); +    p->vTfo     = Vec_PtrAlloc( 50 ); +    p->vTfoFor  = Vec_PtrAlloc( 50 ); +    p->vLevels  = Vec_VecAlloc( 50 ); +    p->pMmNode  = Extra_MmFixedStart( sizeof(Rwr_Node_t) ); +    assert( sizeof(Rwr_Node_t) == sizeof(Rwr_Cut_t) );      // initialize forest -    Rwr_ManAddVar( p, 0xFFFF ); // constant 1 -    Rwr_ManAddVar( p, 0xAAAA ); // var A -    Rwr_ManAddVar( p, 0xCCCC ); // var B -    Rwr_ManAddVar( p, 0xF0F0 ); // var C -    Rwr_ManAddVar( p, 0xFF00 ); // var D +    Rwr_ManAddVar( p, 0x0000, pFileName ); // constant 0 +    Rwr_ManAddVar( p, 0xAAAA, pFileName ); // var A +    Rwr_ManAddVar( p, 0xCCCC, pFileName ); // var B +    Rwr_ManAddVar( p, 0xF0F0, pFileName ); // var C +    Rwr_ManAddVar( p, 0xFF00, pFileName ); // var D      p->nClasses = 5;  PRT( "Manager startup time", clock() - clk );  @@ -164,12 +126,13 @@ PRT( "Manager startup time", clock() - clk );      {   // precompute          Rwr_ManPrecompute( p );          Rwr_ManWriteToFile( p, "data.aaa" ); +        Rwr_ManPrintFirst( p );      }      else      {   // load previously saved nodes          Rwr_ManLoadFromFile( p, pFileName ); +        Rwr_ManPrintNext( p );      } -    Rwr_ManPrint( p );      return p;  } @@ -184,26 +147,29 @@ PRT( "Manager startup time", clock() - clk );    SeeAlso     []  ***********************************************************************/ -void Abc_NtkManRwrStop( Abc_ManRwr_t * p ) +void Rwr_ManStop( Rwr_Man_t * p )  {      if ( p->vFanNums )  Vec_IntFree( p->vFanNums );      if ( p->vReqTimes ) Vec_IntFree( p->vReqTimes );      Vec_IntFree( p->vForm );      Vec_PtrFree( p->vFanins ); +    Vec_PtrFree( p->vTfoFor );      Vec_PtrFree( p->vTfo );      Vec_VecFree( p->vLevels );      Vec_PtrFree( p->vForest );      Extra_MmFixedStop( p->pMmNode,   0 );      free( p->pPractical );      free( p->puCanons ); -    free( p->puPhases ); +    free( p->pPhases ); +    free( p->pPerms ); +    free( p->pMap );      free( p->pTable );      free( p );  }  /**Function************************************************************* -  Synopsis    [Stops the resynthesis manager.] +  Synopsis    [Assigns elementary cuts to the PIs.]    Description [] @@ -212,9 +178,14 @@ void Abc_NtkManRwrStop( Abc_ManRwr_t * p )    SeeAlso     []  ***********************************************************************/ -Vec_Int_t * Abc_NtkManRwrDecs( Abc_ManRwr_t * p ) +void Rwr_ManPrepareNetwork( Rwr_Man_t * p, Abc_Ntk_t * pNtk )  { -    return p->vForm; +    // save the fanout counters for all internal nodes +    p->vFanNums = Rwt_NtkFanoutCounters( pNtk ); +    // precompute the required times for all internal nodes +    p->vReqTimes = Abc_NtkGetRequiredLevels( pNtk ); +    // start the cut computation +    Rwr_NtkStartCuts( p, pNtk );  }  /**Function************************************************************* @@ -228,14 +199,14 @@ Vec_Int_t * Abc_NtkManRwrDecs( Abc_ManRwr_t * p )    SeeAlso     []  ***********************************************************************/ -Vec_Ptr_t * Abc_NtkManRwrFanins( Abc_ManRwr_t * p ) +Vec_Ptr_t * Rwr_ManReadFanins( Rwr_Man_t * p )  {      return p->vFanins;  }  /**Function************************************************************* -  Synopsis    [Computes a phase of the 4-var function.] +  Synopsis    [Stops the resynthesis manager.]    Description [] @@ -244,17 +215,9 @@ Vec_Ptr_t * Abc_NtkManRwrFanins( Abc_ManRwr_t * p )    SeeAlso     []  ***********************************************************************/ -unsigned short Rwr_FunctionPhase( unsigned uTruth, unsigned uPhase ) +Vec_Int_t * Rwr_ManReadDecs( Rwr_Man_t * p )  { -    static unsigned uMasks0[4] = { 0x5555, 0x3333, 0x0F0F, 0x00FF }; -    static unsigned uMasks1[4] = { 0xAAAA, 0xCCCC, 0xF0F0, 0xFF00 }; -    int v, Shift; -    for ( v = 0, Shift = 1; v < 4; v++, Shift <<= 1 ) -        if ( uPhase & Shift ) -            uTruth = (((uTruth & uMasks0[v]) << Shift) | ((uTruth & uMasks1[v]) >> Shift)); -    if ( uPhase & 16 ) -        uTruth = ~uTruth & 0xFFFF; -    return uTruth; +    return p->vForm;  }  /**Function************************************************************* diff --git a/src/opt/rwr/rwrUtil.c b/src/opt/rwr/rwrUtil.c index ae8665ef..96d89db5 100644 --- a/src/opt/rwr/rwrUtil.c +++ b/src/opt/rwr/rwrUtil.c @@ -52,49 +52,6 @@ Vec_Int_t * Rwt_NtkFanoutCounters( Abc_Ntk_t * pNtk )      return vFanNums;  } -/**Function************************************************************* - -  Synopsis    [Creates the array of required times.] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -Vec_Int_t * Rwt_NtkRequiredLevels( Abc_Ntk_t * pNtk ) -{ -    Vec_Int_t * vReqTimes; -    Vec_Ptr_t * vNodes; -    Abc_Obj_t * pObj, * pFanout; -    int i, k, nLevelsMax, nLevelsCur; -    // start the required times -    vReqTimes = Vec_IntAlloc( 0 ); -    Vec_IntFill( vReqTimes, Abc_NtkObjNumMax(pNtk), ABC_INFINITY ); -    // compute levels in reverse topological order -    Abc_NtkForEachCo( pNtk, pObj, i ) -        Vec_IntWriteEntry( vReqTimes, pObj->Id, 0 ); -    vNodes = Abc_NtkDfsReverse( pNtk ); -    Vec_PtrForEachEntry( vNodes, pObj, i ) -    { -        nLevelsCur = 0; -        Abc_ObjForEachFanout( pObj, pFanout, k ) -            if ( nLevelsCur < Vec_IntEntry(vReqTimes, pFanout->Id) ) -                nLevelsCur = Vec_IntEntry(vReqTimes, pFanout->Id); -        Vec_IntWriteEntry( vReqTimes, pObj->Id, nLevelsCur + 1 ); -    } -    Vec_PtrFree( vNodes ); -    // convert levels into required times: RetTime = NumLevels + 1 - Level -    nLevelsMax = Abc_AigGetLevelNum(pNtk) + 1; -    Abc_NtkForEachNode( pNtk, pObj, i ) -        Vec_IntWriteEntry( vReqTimes, pObj->Id, nLevelsMax - Vec_IntEntry(vReqTimes, pObj->Id) ); -//    Abc_NtkForEachNode( pNtk, pObj, i ) -//        printf( "(%d,%d)", pObj->Level, Vec_IntEntry(vReqTimes, pObj->Id) ); -//    printf( "\n" ); -    return vReqTimes; -} -  ////////////////////////////////////////////////////////////////////////  ///                       END OF FILE                                ///  //////////////////////////////////////////////////////////////////////// diff --git a/src/sat/sim/module.make b/src/sat/sim/module.make new file mode 100644 index 00000000..8f1b4ded --- /dev/null +++ b/src/sat/sim/module.make @@ -0,0 +1,6 @@ +SRC +=  simMan.c \ +    simSat.c \ +    simSupp.c \ +    simSym.c \ +    simUnate.c \ +    simUtils.c | 
