]> gitweb.factorcode.org Git - factor.git/commitdiff
Oops, we weren't doing TCO in some cases
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Sun, 31 Aug 2008 10:40:29 +0000 (05:40 -0500)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Sun, 31 Aug 2008 10:40:29 +0000 (05:40 -0500)
basis/compiler/tree/finalization/finalization.factor [new file with mode: 0644]
basis/compiler/tree/optimizer/optimizer.factor
extra/benchmark/empty-loop-0/empty-loop-0.factor
extra/benchmark/empty-loop-2/empty-loop-2.factor

diff --git a/basis/compiler/tree/finalization/finalization.factor b/basis/compiler/tree/finalization/finalization.factor
new file mode 100644 (file)
index 0000000..08734ec
--- /dev/null
@@ -0,0 +1,18 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel accessors sequences
+compiler.tree compiler.tree.combinators ;
+IN: compiler.tree.finalization
+
+GENERIC: finalize* ( node -- nodes )
+
+M: #copy finalize* drop f ;
+
+M: #shuffle finalize*
+    dup shuffle-effect
+    [ in>> ] [ out>> ] bi sequence=
+    [ drop f ] when ;
+
+M: node finalize* ;
+
+: finalize ( nodes -- nodes' ) [ finalize* ] map-nodes ;
index 5d0b8d089bcc73c450db2a3cf825453b436dc0dd..593c13b27702b33930738d7cd3a52a3eed1352ae 100644 (file)
@@ -11,6 +11,7 @@ compiler.tree.strength-reduction
 compiler.tree.loop.detection
 compiler.tree.loop.inversion
 compiler.tree.branch-fusion
+compiler.tree.finalization
 compiler.tree.checker ;
 IN: compiler.tree.optimizer
 
@@ -25,6 +26,7 @@ IN: compiler.tree.optimizer
     unbox-tuples
     compute-def-use
     remove-dead-code
+    finalize
     ! strength-reduce
     ! USE: kernel
     ! compute-def-use
index 65390e84f247da170641a4161efb43fedcd34c22..1922274cac59947df1b2bb711b85562c010b98bc 100644 (file)
@@ -5,6 +5,6 @@ IN: benchmark.empty-loop-0
     dup 0 fixnum< [ drop ] [ 1 fixnum-fast empty-loop-0 ] if ;
 
 : empty-loop-main ( -- )
-    5000000 empty-loop-0 ;
+    50000000 empty-loop-0 ;
 
 MAIN: empty-loop-main
index f7d66b04abea62d260cc09681a9f9c5ee8a61664..f09aee6adaa47a52e334d3ea18d51bf45ee356ce 100644 (file)
@@ -5,6 +5,6 @@ IN: benchmark.empty-loop-2
     [ drop ] each ;
 
 : empty-loop-main ( -- )
-    5000000 empty-loop-2 ;
+    50000000 empty-loop-2 ;
 
 MAIN: empty-loop-main