USING: classes io kernel kernel.private math.parser namespaces
optimizer prettyprint prettyprint.backend sequences words arrays
match macros assocs sequences.private generic combinators
-sorting math quotations accessors inference inference.dataflow
-optimizer.specializers ;
+sorting math quotations accessors inference inference.backend
+inference.dataflow optimizer.specializers generator ;
IN: optimizer.debugger
! A simple tool for turning dataflow IR into quotations, for
: optimized-word. ( word ? -- ) >r specialized-def r> optimized-quot. ;
+SYMBOL: pass-count
SYMBOL: words-called
SYMBOL: generics-called
SYMBOL: methods-called
SYMBOL: intrinsics-called
SYMBOL: node-count
-: dataflow>report ( node -- alist )
+: count-optimization-passes ( node n -- node n )
+ >r optimize-1
+ [ r> 1+ count-optimization-passes ] [ r> ] if ;
+
+: make-report ( word -- assoc )
[
+ word-dataflow nip 1 count-optimization-passes pass-count set
+
H{ } clone words-called set
H{ } clone generics-called set
H{ } clone methods-called set
node-count set
] H{ } make-assoc ;
-: quot-optimize-report ( quot -- report )
- dataflow optimize dataflow>report ;
-
-: word-optimize-report ( word -- report )
- def>> quot-optimize-report ;
-
: report. ( report -- )
[
+ "==== Optimization passes:" print
+ pass-count get .
+ nl
+
"==== Total number of dataflow nodes:" print
node-count get .
] bind ;
: optimizer-report. ( word -- )
- word-optimize-report report. ;
+ make-report report. ;
! See http://factorcode.org/license.txt for BSD license.\r
USING: accessors assocs words sequences arrays compiler\r
tools.time io.styles io prettyprint vocabs kernel sorting\r
-generator optimizer math math.order math.statistics combinators ;\r
+generator optimizer math math.order math.statistics combinators\r
+optimizer.debugger ;\r
IN: report.optimizer\r
\r
-: count-optimization-passes ( nodes n -- n )\r
- >r optimize-1\r
- [ r> 1+ count-optimization-passes ] [ drop r> ] if ;\r
-\r
: table. ( alist -- )\r
20 short tail*\r
standard-table-style\r
tri\r
] 2bi ; inline\r
\r
+: optimization-passes ( word -- n )\r
+ word-dataflow nip 1 count-optimization-passes nip ;\r
+\r
: optimizer-measurements ( -- alist )\r
all-words [ compiled>> ] filter\r
- [\r
- dup [\r
- word-dataflow nip 1 count-optimization-passes\r
- ] benchmark 2array\r
- ] { } map>assoc ;\r
+ [ dup [ optimization-passes ] benchmark 2array ] { } map>assoc ;\r
\r
: optimizer-measurements. ( alist -- )\r
{\r