2008-07-24 00:50:21 -04:00
|
|
|
USING: namespaces assocs sequences compiler.tree.builder
|
2008-07-20 05:24:37 -04:00
|
|
|
compiler.tree.dead-code compiler.tree.def-use compiler.tree
|
2008-08-15 00:35:19 -04:00
|
|
|
compiler.tree.combinators compiler.tree.propagation
|
|
|
|
compiler.tree.cleanup compiler.tree.escape-analysis
|
|
|
|
compiler.tree.tuple-unboxing compiler.tree.debugger
|
2008-08-14 00:52:49 -04:00
|
|
|
compiler.tree.normalization compiler.tree.checker tools.test
|
2008-08-18 16:47:49 -04:00
|
|
|
kernel math stack-checker.state accessors combinators io
|
|
|
|
prettyprint ;
|
2008-07-20 05:24:37 -04:00
|
|
|
IN: compiler.tree.dead-code.tests
|
|
|
|
|
|
|
|
\ remove-dead-code must-infer
|
|
|
|
|
|
|
|
: count-live-values ( quot -- n )
|
2008-07-24 00:50:21 -04:00
|
|
|
build-tree
|
2008-08-13 15:17:04 -04:00
|
|
|
normalize
|
2008-08-15 00:35:19 -04:00
|
|
|
propagate
|
|
|
|
cleanup
|
|
|
|
escape-analysis
|
|
|
|
unbox-tuples
|
2008-07-20 05:24:37 -04:00
|
|
|
compute-def-use
|
|
|
|
remove-dead-code
|
2008-08-08 14:14:36 -04:00
|
|
|
0 swap [
|
2008-08-14 00:52:49 -04:00
|
|
|
dup
|
|
|
|
[ #push? ] [ #introduce? ] bi or
|
|
|
|
[ out-d>> length + ] [ drop ] if
|
2008-08-08 14:14:36 -04:00
|
|
|
] each-node ;
|
2008-07-20 05:24:37 -04:00
|
|
|
|
|
|
|
[ 3 ] [ [ 1 2 3 ] count-live-values ] unit-test
|
|
|
|
|
2008-08-08 14:14:36 -04:00
|
|
|
[ 1 ] [ [ drop ] count-live-values ] unit-test
|
|
|
|
|
2008-07-20 05:24:37 -04:00
|
|
|
[ 0 ] [ [ 1 drop ] count-live-values ] unit-test
|
|
|
|
|
|
|
|
[ 1 ] [ [ 1 2 drop ] count-live-values ] unit-test
|
|
|
|
|
2008-08-08 14:14:36 -04:00
|
|
|
[ 3 ] [ [ [ 1 ] [ 2 ] if ] count-live-values ] unit-test
|
2008-07-20 05:24:37 -04:00
|
|
|
|
2008-08-08 14:14:36 -04:00
|
|
|
[ 1 ] [ [ [ 1 ] [ 2 ] if drop ] count-live-values ] unit-test
|
2008-07-20 05:24:37 -04:00
|
|
|
|
2008-08-08 14:14:36 -04:00
|
|
|
[ 2 ] [ [ [ 1 ] [ dup ] if drop ] count-live-values ] unit-test
|
2008-07-20 05:24:37 -04:00
|
|
|
|
2008-08-15 00:35:19 -04:00
|
|
|
[ 2 ] [ [ 1 + ] count-live-values ] unit-test
|
2008-07-20 05:24:37 -04:00
|
|
|
|
|
|
|
[ 0 ] [ [ 1 2 + drop ] count-live-values ] unit-test
|
|
|
|
|
2008-08-15 00:35:19 -04:00
|
|
|
[ 3 ] [ [ 1 + 3 + ] count-live-values ] unit-test
|
2008-07-20 05:24:37 -04:00
|
|
|
|
|
|
|
[ 0 ] [ [ 1 2 + 3 + drop ] count-live-values ] unit-test
|
|
|
|
|
2008-08-08 14:14:36 -04:00
|
|
|
[ 4 ] [ [ [ 1 ] [ 2 ] if 3 + ] count-live-values ] unit-test
|
2008-07-20 05:24:37 -04:00
|
|
|
|
2008-08-08 14:14:36 -04:00
|
|
|
[ 1 ] [ [ [ 1 ] [ 2 ] if 3 + drop ] count-live-values ] unit-test
|
2008-07-20 05:24:37 -04:00
|
|
|
|
|
|
|
[ 0 ] [ [ [ ] call ] count-live-values ] unit-test
|
|
|
|
|
|
|
|
[ 1 ] [ [ [ 1 ] call ] count-live-values ] unit-test
|
|
|
|
|
|
|
|
[ 2 ] [ [ [ 1 ] [ 2 ] compose call ] count-live-values ] unit-test
|
|
|
|
|
|
|
|
[ 0 ] [ [ [ 1 ] [ 2 ] compose call + drop ] count-live-values ] unit-test
|
2008-08-13 15:17:04 -04:00
|
|
|
|
2008-08-15 00:35:19 -04:00
|
|
|
[ 3 ] [ [ 10 [ ] times ] count-live-values ] unit-test
|
|
|
|
|
2008-08-13 15:17:04 -04:00
|
|
|
: optimize-quot ( quot -- quot' )
|
2008-08-15 00:35:19 -04:00
|
|
|
build-tree
|
|
|
|
normalize
|
|
|
|
propagate
|
|
|
|
cleanup
|
|
|
|
escape-analysis
|
|
|
|
unbox-tuples
|
|
|
|
compute-def-use
|
|
|
|
remove-dead-code
|
|
|
|
"no-check" get [ dup check-nodes ] unless nodes>quot ;
|
2008-08-13 15:17:04 -04:00
|
|
|
|
|
|
|
[ [ drop 1 ] ] [ [ >r 1 r> drop ] optimize-quot ] unit-test
|
|
|
|
|
2008-08-14 00:52:49 -04:00
|
|
|
[ [ read drop 1 2 ] ] [ [ read >r 1 2 r> drop ] optimize-quot ] unit-test
|
2008-08-13 15:17:04 -04:00
|
|
|
|
|
|
|
[ [ over >r + r> ] ] [ [ [ + ] [ drop ] 2bi ] optimize-quot ] unit-test
|
2008-08-14 00:52:49 -04:00
|
|
|
|
|
|
|
[ [ [ ] [ ] if ] ] [ [ [ 1 ] [ 2 ] if drop ] optimize-quot ] unit-test
|
|
|
|
|
|
|
|
: flushable-1 ( a b -- c ) 2drop f ; flushable
|
|
|
|
: flushable-2 ( a b -- c ) 2drop f ; flushable
|
|
|
|
|
|
|
|
[ [ 2nip [ ] [ ] if ] ] [
|
|
|
|
[ [ flushable-1 ] [ flushable-2 ] if drop ] optimize-quot
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
: non-flushable-3 ( a b -- c ) 2drop f ;
|
|
|
|
|
|
|
|
[ [ [ drop drop ] [ non-flushable-3 drop ] if ] ] [
|
|
|
|
[ [ flushable-1 ] [ non-flushable-3 ] if drop ] optimize-quot
|
|
|
|
] unit-test
|
2008-08-15 00:35:19 -04:00
|
|
|
|
|
|
|
[ [ [ f ] [ f ] if ] ] [ [ [ f ] [ f ] if ] optimize-quot ] unit-test
|
|
|
|
|
|
|
|
[ ] [ [ dup [ 3 throw ] [ ] if ] optimize-quot drop ] unit-test
|
|
|
|
|
2008-08-18 16:47:49 -04:00
|
|
|
[ [ [ . ] [ drop ] if ] ] [ [ [ dup . ] [ ] if drop ] optimize-quot ] unit-test
|
2008-08-18 22:30:10 -04:00
|
|
|
|
|
|
|
[ [ f ] ] [ [ f dup [ ] [ ] if ] optimize-quot ] unit-test
|