From fd8136786bbe0ee38b67404b2fabbddc4efd6a02 Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@slava-pestovs-macbook-pro.local>
Date: Fri, 22 Aug 2008 18:09:48 -0500
Subject: [PATCH] Cleaning up DCE

---
 .../tree/cleanup/cleanup-tests.factor         |  4 +--
 .../tree/dead-code/branches/branches.factor   |  4 +--
 .../tree/dead-code/recursive/recursive.factor | 36 ++++++++++---------
 .../tree/dead-code/simple/simple.factor       | 30 ++++++++++------
 basis/compiler/tree/debugger/debugger.factor  |  2 +-
 5 files changed, 43 insertions(+), 33 deletions(-)

diff --git a/basis/compiler/tree/cleanup/cleanup-tests.factor b/basis/compiler/tree/cleanup/cleanup-tests.factor
index 3a645955c2..437112625c 100644
--- a/basis/compiler/tree/cleanup/cleanup-tests.factor
+++ b/basis/compiler/tree/cleanup/cleanup-tests.factor
@@ -144,7 +144,7 @@ M: object xyz ;
 
 [ f ] [ [ dup 0 < [ neg ] when ] \ - inlined? ] unit-test
 
-[ f ] [
+[ t ] [
     [
         [ no-cond ] 1
         [ 1array dup quotation? [ >quotation ] unless ] times
@@ -433,7 +433,7 @@ cell-bits 32 = [
     ] { >= fixnum>= } inlined?
 ] unit-test
 
-[ t ] [
+[ ] [
     [
         4 pick array-capacity?
         [ set-slot ] [ \ array-capacity 2nip bad-slot-value ] if
diff --git a/basis/compiler/tree/dead-code/branches/branches.factor b/basis/compiler/tree/dead-code/branches/branches.factor
index bbae02b4ff..0014a1d4d7 100644
--- a/basis/compiler/tree/dead-code/branches/branches.factor
+++ b/basis/compiler/tree/dead-code/branches/branches.factor
@@ -35,7 +35,7 @@ M: #branch remove-dead-code*
     [ length ] keep live-values get
     '[ , nth , key? ] filter ; inline
 
-: drop-values ( values indices -- node )
+: drop-indexed-values ( values indices -- node )
     [ drop filter-live ] [ nths ] 2bi
     [ make-values ] keep
     [ drop ] [ zip ] 2bi
@@ -44,7 +44,7 @@ M: #branch remove-dead-code*
 : insert-drops ( nodes values indices -- nodes' )
     '[
         over ends-with-terminate?
-        [ drop ] [ , drop-values suffix ] if
+        [ drop ] [ , drop-indexed-values suffix ] if
     ] 2map ;
 
 : hoist-drops ( #phi -- )
diff --git a/basis/compiler/tree/dead-code/recursive/recursive.factor b/basis/compiler/tree/dead-code/recursive/recursive.factor
index 022912ff4e..4c6b411430 100644
--- a/basis/compiler/tree/dead-code/recursive/recursive.factor
+++ b/basis/compiler/tree/dead-code/recursive/recursive.factor
@@ -25,14 +25,13 @@ M: #call-recursive compute-live-values*
     [ out-d>> ] [ label>> return>> in-d>> ] bi look-at-mapping ;
 
 :: drop-dead-inputs ( inputs outputs -- #shuffle )
-    [let* | new-inputs [ inputs make-values ]
-            live-inputs [ outputs inputs filter-corresponding ]
-            new-live-inputs [ outputs new-inputs filter-corresponding ]
-            mapping [ new-live-inputs live-inputs zip ] |
-        inputs filter-live
+    [let* | live-inputs [ inputs filter-live ]
+            new-live-inputs [ outputs inputs filter-corresponding make-values ] |
+        live-inputs
         new-live-inputs
-        mapping
-        #shuffle
+        outputs
+        inputs
+        drop-values
     ] ;
 
 M: #recursive remove-dead-code* ( node -- nodes )
@@ -53,18 +52,21 @@ M: #enter-recursive remove-dead-code*
     [ nip ]
     2bi ;
 
-:: drop-call-recursive-outputs ( node -- #shuffle )
-    [let* | node-out [ node out-d>> ]
-            return-in [ node label>> return>> in-d>> ]
-            node-out-live [ return-in node-out filter-corresponding ]
-            new-node-out-live [ node-out-live make-values ]
-            node-out-dropped [ node-out filter-live ]
-            new-node-out-dropped [ node-out-dropped new-node-out-live filter-corresponding ]
-            mapping [ node-out-dropped new-node-out-dropped zip ] |
-        node new-node-out-live >>out-d drop
-        new-node-out-live node-out-dropped mapping #shuffle
+:: (drop-call-recursive-outputs) ( inputs outputs -- #shuffle )
+    [let* | new-live-outputs [ inputs outputs filter-corresponding make-values ]
+            live-outputs [ outputs filter-live ] |
+        new-live-outputs
+        live-outputs
+        live-outputs
+        new-live-outputs
+        drop-values
     ] ;
 
+: drop-call-recursive-outputs ( node -- #shuffle )
+    dup [ label>> return>> in-d>> ] [ out-d>> ] bi
+    (drop-call-recursive-outputs)
+    [ in-d>> >>out-d drop ] keep ;
+
 M: #call-recursive remove-dead-code*
     [ drop-call-recursive-inputs ]
     [ ]
diff --git a/basis/compiler/tree/dead-code/simple/simple.factor b/basis/compiler/tree/dead-code/simple/simple.factor
index 01c535a819..f1be869295 100644
--- a/basis/compiler/tree/dead-code/simple/simple.factor
+++ b/basis/compiler/tree/dead-code/simple/simple.factor
@@ -61,20 +61,28 @@ M: #alien-indirect compute-live-values* nip look-at-inputs ;
 : filter-live ( values -- values' )
     [ live-value? ] filter ;
 
-: drop-dead-values ( in out -- #shuffle )
-    [ make-values dup ] keep zip #shuffle ;
+:: drop-values ( inputs outputs mapping-keys mapping-values -- #shuffle )
+    inputs
+    outputs
+    outputs
+    mapping-keys
+    mapping-values
+    filter-corresponding zip #shuffle ; inline
 
-:: drop-dead-outputs ( node -- nodes )
-    [let* | old-outputs [ node out-d>> ]
-            new-outputs [ old-outputs make-values ]
-            old-live-outputs [ old-outputs filter-live ]
-            new-live-outputs [ old-outputs new-outputs filter-corresponding ]
-            mapping [ old-live-outputs new-live-outputs zip ] |
-        node new-outputs >>out-d
-        new-outputs old-live-outputs mapping #shuffle
-        2array
+:: drop-dead-values ( outputs -- #shuffle )
+    [let* | new-outputs [ outputs make-values ]
+            live-outputs [ outputs filter-live ] |
+        new-outputs
+        live-outputs
+        outputs
+        new-outputs
+        drop-values
     ] ;
 
+: drop-dead-outputs ( node -- nodes )
+    dup out-d>> drop-dead-values
+    [ in-d>> >>out-d drop ] [ 2array ] 2bi ;
+
 M: #introduce remove-dead-code* ( #introduce -- nodes )
     drop-dead-outputs ;
 
diff --git a/basis/compiler/tree/debugger/debugger.factor b/basis/compiler/tree/debugger/debugger.factor
index 7660ec3222..db742197a5 100644
--- a/basis/compiler/tree/debugger/debugger.factor
+++ b/basis/compiler/tree/debugger/debugger.factor
@@ -3,7 +3,7 @@
 USING: kernel assocs fry match accessors namespaces effects
 sequences sequences.private quotations generic macros arrays
 prettyprint prettyprint.backend prettyprint.sections math words
-combinators io sorting
+combinators io sorting hints
 compiler.tree
 compiler.tree.builder
 compiler.tree.optimizer