summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2005-08-18 08:01:00 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2005-08-18 08:01:00 -0700
commitdffcc93b8e8779f443762c71098796b01ea7d409 (patch)
tree44113f09a94914013816564bdad846b5939c220a
parent6e496de7ff1a1f9b6f0babc8efb0a13379242505 (diff)
downloadabc-dffcc93b8e8779f443762c71098796b01ea7d409.tar.gz
abc-dffcc93b8e8779f443762c71098796b01ea7d409.tar.bz2
abc-dffcc93b8e8779f443762c71098796b01ea7d409.zip
Version abc50818
-rw-r--r--Makefile4
-rw-r--r--abc.dsp12
-rw-r--r--abc.optbin52736 -> 52736 bytes
-rw-r--r--abc.plg1605
-rw-r--r--src/base/abc/abc.c37
-rw-r--r--src/base/abc/abc.h26
-rw-r--r--src/base/abc/abcAig.c1
-rw-r--r--src/base/abc/abcReconv.c26
-rw-r--r--src/base/abc/abcRefactor.c209
-rw-r--r--src/base/abc/abcRefs.c26
-rw-r--r--src/base/abc/abcResRef.c192
-rw-r--r--src/base/abc/abcRewrite.c (renamed from src/base/abc/abcRes.c)67
-rw-r--r--src/base/abc/abcStrash.c67
-rw-r--r--src/base/abc/abcTiming.c43
-rw-r--r--src/base/abc/module.make3
-rw-r--r--src/map/mapper/mapperTree.c11
-rw-r--r--src/map/mapper/mapperTruth.c10
-rw-r--r--src/misc/extra/extra.h13
-rw-r--r--src/misc/extra/extraUtilFile.c29
-rw-r--r--src/misc/extra/extraUtilMisc.c408
-rw-r--r--src/misc/vec/vecInt.h38
-rw-r--r--src/opt/rwr/module.make6
-rw-r--r--src/opt/rwr/rwr.h94
-rw-r--r--src/opt/rwr/rwrCut.c22
-rw-r--r--src/opt/rwr/rwrEva.c58
-rw-r--r--src/opt/rwr/rwrExp.c256
-rw-r--r--src/opt/rwr/rwrLib.c204
-rw-r--r--src/opt/rwr/rwrMan.c189
-rw-r--r--src/opt/rwr/rwrUtil.c43
-rw-r--r--src/sat/sim/module.make6
30 files changed, 2518 insertions, 1187 deletions
diff --git a/Makefile b/Makefile
index daea4103..3358d267 100644
--- a/Makefile
+++ b/Makefile
@@ -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
diff --git a/abc.dsp b/abc.dsp
index cba3e6aa..2f61e64e 100644
--- a/abc.dsp
+++ b/abc.dsp
@@ -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
diff --git a/abc.opt b/abc.opt
index 911970b8..03ee4074 100644
--- a/abc.opt
+++ b/abc.opt
Binary files differ
diff --git a/abc.plg b/abc.plg
index ccc261f7..2be37ce3 100644
--- a/abc.plg
+++ b/abc.plg
@@ -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