From ca4f442eaa20055e5ded3af24ee577c5ed77741c Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@slava-pestovs-macbook-pro.local>
Date: Mon, 3 May 2010 18:20:28 -0400
Subject: [PATCH 1/2] compiler.cfg.alias-analysis: storing a reference into an
 object now merges the reference's alias class with the heap alias class

---
 .../cfg/alias-analysis/alias-analysis.factor  | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/basis/compiler/cfg/alias-analysis/alias-analysis.factor b/basis/compiler/cfg/alias-analysis/alias-analysis.factor
index 3cf099d149..438395e2a7 100644
--- a/basis/compiler/cfg/alias-analysis/alias-analysis.factor
+++ b/basis/compiler/cfg/alias-analysis/alias-analysis.factor
@@ -2,7 +2,7 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: kernel math namespaces assocs hashtables sequences arrays
 accessors words vectors combinators combinators.short-circuit
-sets classes layouts cpu.architecture
+sets classes layouts fry cpu.architecture
 compiler.cfg
 compiler.cfg.rpo
 compiler.cfg.def-use
@@ -100,6 +100,15 @@ SYMBOL: acs>vregs
 : each-alias ( vreg quot -- )
     [ aliases ] dip each ; inline
 
+: merge-acs ( vreg into -- )
+    [ vreg>ac ] dip
+    2dup eq? [ 2drop ] [
+        [ ac>vregs ] dip
+        [ vregs>acs get '[ [ _ ] dip _ set-at ] each ]
+        [ acs>vregs get at push-all ]
+        2bi
+    ] if ;
+
 ! Map vregs -> slot# -> vreg
 SYMBOL: live-slots
 
@@ -187,7 +196,8 @@ SYMBOL: heap-ac
 : remember-set-slot ( slot#/f vreg -- )
     over [
         [ record-constant-set-slot ]
-        [ kill-constant-set-slot ] 2bi
+        [ kill-constant-set-slot ]
+        2bi
     ] [ nip kill-computed-set-slot ] if ;
 
 GENERIC: insn-slot# ( insn -- slot#/f )
@@ -262,7 +272,10 @@ M: ##write analyze-aliases*
     dup
     [ src>> resolve ] [ insn-slot# ] [ insn-object ] tri
     3dup idempotent? [ 3drop ] [
-        [ remember-set-slot drop ] [ load-slot ] 3bi
+        [ 2drop heap-ac get merge-acs ]
+        [ remember-set-slot drop ]
+        [ load-slot ]
+        3tri
     ] if ;
 
 M: ##copy analyze-aliases*

From 4352902bb6b9a65e2579c19e3a8805a47028ab61 Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@slava-pestovs-macbook-pro.local>
Date: Mon, 3 May 2010 18:23:54 -0400
Subject: [PATCH 2/2] compiler.cfg.empty-blocks: remove unused pass

---
 .../cfg/empty-blocks/empty-blocks.factor      | 47 -------------------
 .../cfg/finalization/finalization.factor      |  7 ++-
 basis/compiler/cfg/optimizer/optimizer.factor |  1 -
 3 files changed, 3 insertions(+), 52 deletions(-)
 delete mode 100644 basis/compiler/cfg/empty-blocks/empty-blocks.factor

diff --git a/basis/compiler/cfg/empty-blocks/empty-blocks.factor b/basis/compiler/cfg/empty-blocks/empty-blocks.factor
deleted file mode 100644
index 605c572cb3..0000000000
--- a/basis/compiler/cfg/empty-blocks/empty-blocks.factor
+++ /dev/null
@@ -1,47 +0,0 @@
-! Copyright (C) 2008, 2009 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: kernel accessors sequences namespaces combinators
-combinators.short-circuit classes vectors compiler.cfg
-compiler.cfg.instructions compiler.cfg.rpo ;
-IN: compiler.cfg.empty-blocks
-
-<PRIVATE
-
-: update-predecessor ( bb -- )
-    ! We have to replace occurrences of bb with bb's successor
-    ! in bb's predecessor's list of successors.
-    dup predecessors>> first [
-        [
-            2dup eq? [ drop successors>> first ] [ nip ] if
-        ] with map
-    ] change-successors drop ;
- 
-: update-successor ( bb -- )
-    ! We have to replace occurrences of bb with bb's predecessor
-    ! in bb's sucessor's list of predecessors.
-    dup successors>> first [
-        [
-            2dup eq? [ drop predecessors>> first ] [ nip ] if
-        ] with map
-    ] change-predecessors drop ;
-
-SYMBOL: changed?
-
-: delete-basic-block ( bb -- )
-    [ update-predecessor ] [ update-successor ] bi
-    changed? on ;
- 
-: delete-basic-block? ( bb -- ? )
-    {
-        [ instructions>> length 1 = ]
-        [ predecessors>> length 1 = ]
-        [ successors>> length 1 = ]
-        [ instructions>> first ##branch? ]
-    } 1&& ;
-
-PRIVATE>
-
-: delete-empty-blocks ( cfg -- cfg' )
-    changed? off
-    dup [ dup delete-basic-block? [ delete-basic-block ] [ drop ] if ] each-basic-block
-    changed? get [ cfg-changed ] when ;
\ No newline at end of file
diff --git a/basis/compiler/cfg/finalization/finalization.factor b/basis/compiler/cfg/finalization/finalization.factor
index 3ee7ba06e3..681563da34 100644
--- a/basis/compiler/cfg/finalization/finalization.factor
+++ b/basis/compiler/cfg/finalization/finalization.factor
@@ -1,9 +1,8 @@
 ! Copyright (C) 2010 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: compiler.cfg.empty-blocks compiler.cfg.gc-checks
-compiler.cfg.representations compiler.cfg.save-contexts
-compiler.cfg.ssa.destruction compiler.cfg.build-stack-frame
-compiler.cfg.linear-scan ;
+USING: compiler.cfg.gc-checks compiler.cfg.representations
+compiler.cfg.save-contexts compiler.cfg.ssa.destruction
+compiler.cfg.build-stack-frame compiler.cfg.linear-scan ;
 IN: compiler.cfg.finalization
 
 : finalize-cfg ( cfg -- cfg' )
diff --git a/basis/compiler/cfg/optimizer/optimizer.factor b/basis/compiler/cfg/optimizer/optimizer.factor
index ca1886bcd6..d819e227c9 100644
--- a/basis/compiler/cfg/optimizer/optimizer.factor
+++ b/basis/compiler/cfg/optimizer/optimizer.factor
@@ -14,7 +14,6 @@ compiler.cfg.representations
 compiler.cfg.gc-checks
 compiler.cfg.save-contexts
 compiler.cfg.ssa.destruction
-compiler.cfg.empty-blocks
 compiler.cfg.checker ;
 IN: compiler.cfg.optimizer