]> gitweb.factorcode.org Git - factor.git/commitdiff
Move liveness back to compiler.cfg.liveness, fix a corner-case where it didn't work...
authorSlava Pestov <slava@shill.local>
Wed, 22 Jul 2009 11:07:28 +0000 (06:07 -0500)
committerSlava Pestov <slava@shill.local>
Wed, 22 Jul 2009 11:07:28 +0000 (06:07 -0500)
basis/compiler/cfg/alias-analysis/alias-analysis.factor
basis/compiler/cfg/linear-scan/assignment/assignment.factor
basis/compiler/cfg/linear-scan/linear-scan.factor
basis/compiler/cfg/linear-scan/live-intervals/live-intervals.factor
basis/compiler/cfg/linear-scan/liveness/liveness.factor [deleted file]
basis/compiler/cfg/linear-scan/resolve/resolve.factor
basis/compiler/cfg/liveness/liveness-tests.factor [new file with mode: 0644]
basis/compiler/cfg/liveness/liveness.factor [new file with mode: 0644]

index 78e271c1f6267034f7033b92ef7a13bd8a73a801..f6834c131d48f94de7759a8c037ae0cea7c2f022 100644 (file)
@@ -3,7 +3,7 @@
 USING: kernel math namespaces assocs hashtables sequences arrays
 accessors vectors combinators sets classes compiler.cfg
 compiler.cfg.registers compiler.cfg.instructions
-compiler.cfg.copy-prop compiler.cfg.rpo compiler.cfg.def-use ;
+compiler.cfg.copy-prop compiler.cfg.rpo compiler.cfg.liveness ;
 IN: compiler.cfg.alias-analysis
 
 ! We try to eliminate redundant slot operations using some simple heuristics.
@@ -196,9 +196,6 @@ M: ##set-slot insn-object obj>> resolve ;
 M: ##set-slot-imm insn-object obj>> resolve ;
 M: ##alien-global insn-object drop \ ##alien-global ;
 
-: inputs ( insns -- seq )
-    [ [ ##phi? not ] filter gen-set ] [ kill-set ] bi assoc-diff keys ;
-
 : init-alias-analysis ( insns -- insns' )
     H{ } clone histories set
     H{ } clone vregs>acs set
@@ -210,7 +207,7 @@ M: ##alien-global insn-object drop \ ##alien-global ;
     0 ac-counter set
     next-ac heap-ac set
 
-    dup inputs [ set-heap-ac ] each ;
+    dup local-live-in [ set-heap-ac ] each ;
 
 GENERIC: analyze-aliases* ( insn -- insn' )
 
index 952feb5919a56a8cd6f947dcaeccfb3e30cba2ae..8e21e7e3fb3d8f1f9d06ce4ec80647dfcbb21894 100644 (file)
@@ -6,13 +6,13 @@ cpu.architecture
 compiler.cfg
 compiler.cfg.rpo
 compiler.cfg.def-use
+compiler.cfg.liveness
 compiler.cfg.registers
 compiler.cfg.instructions
 compiler.cfg.linear-scan.mapping
 compiler.cfg.linear-scan.allocation
 compiler.cfg.linear-scan.allocation.state
-compiler.cfg.linear-scan.live-intervals
-compiler.cfg.linear-scan.liveness ;
+compiler.cfg.linear-scan.live-intervals ;
 IN: compiler.cfg.linear-scan.assignment
 
 ! This contains both active and inactive intervals; any interval
index 186a77335583a6493058f5876f8046a43d16ea9d..b081f2ca6e74f5db3319727a75700103ebca2eb4 100644 (file)
@@ -4,9 +4,9 @@ USING: kernel accessors namespaces make locals
 cpu.architecture
 compiler.cfg
 compiler.cfg.rpo
+compiler.cfg.liveness
 compiler.cfg.instructions
 compiler.cfg.linear-scan.numbering
-compiler.cfg.linear-scan.liveness
 compiler.cfg.linear-scan.live-intervals
 compiler.cfg.linear-scan.allocation
 compiler.cfg.linear-scan.allocation.state
index 244f2bc06914c464ba140404d2d06171094d3beb..8813a4e94e7f878b6ae0a5143cb27a411e24ce05 100644 (file)
@@ -2,7 +2,7 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: namespaces kernel assocs accessors sequences math math.order fry
 combinators binary-search compiler.cfg.instructions compiler.cfg.registers
-compiler.cfg.def-use compiler.cfg.linear-scan.liveness compiler.cfg.rpo
+compiler.cfg.def-use compiler.cfg.liveness compiler.cfg.rpo
 compiler.cfg ;
 IN: compiler.cfg.linear-scan.live-intervals
 
diff --git a/basis/compiler/cfg/linear-scan/liveness/liveness.factor b/basis/compiler/cfg/linear-scan/liveness/liveness.factor
deleted file mode 100644 (file)
index ac36fca..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-! Copyright (C) 2009 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: kernel accessors assocs compiler.cfg.def-use
-compiler.cfg.dataflow-analysis ;
-IN: compiler.cfg.linear-scan.liveness
-
-! See http://en.wikipedia.org/wiki/Liveness_analysis
-
-BACKWARD-ANALYSIS: live
-
-M: live-analysis transfer-set
-    drop instructions>>
-    [ gen-set assoc-union ] keep
-    kill-set assoc-diff ;
-
-M: live-analysis join-sets
-    drop assoc-combine ;
\ No newline at end of file
index 5bab261ea896fdf0530c2d262b86eff419f63997..56beaa5379712d99f5f7dc526b37c0c9e06908b0 100644 (file)
@@ -4,11 +4,11 @@ USING: accessors arrays assocs combinators
 combinators.short-circuit fry kernel locals
 make math sequences
 compiler.cfg.rpo
+compiler.cfg.liveness
 compiler.cfg.utilities
 compiler.cfg.instructions
 compiler.cfg.linear-scan.assignment
-compiler.cfg.linear-scan.mapping
-compiler.cfg.linear-scan.liveness ;
+compiler.cfg.linear-scan.mapping ;
 IN: compiler.cfg.linear-scan.resolve
 
 : add-mapping ( from to reg-class -- )
diff --git a/basis/compiler/cfg/liveness/liveness-tests.factor b/basis/compiler/cfg/liveness/liveness-tests.factor
new file mode 100644 (file)
index 0000000..697a1f8
--- /dev/null
@@ -0,0 +1,38 @@
+USING: compiler.cfg.liveness compiler.cfg.debugger
+compiler.cfg.instructions compiler.cfg.predecessors
+compiler.cfg.registers compiler.cfg cpu.architecture
+accessors namespaces sequences kernel tools.test ;
+IN: compiler.cfg.liveness.tests
+
+! Sanity check...
+
+V{
+    T{ ##peek f V int-regs 0 D 0 }
+    T{ ##replace f V int-regs 0 D 0 }
+    T{ ##replace f V int-regs 1 D 1 }
+    T{ ##peek f V int-regs 1 D 1 }
+} 1 test-bb
+
+V{
+    T{ ##replace f V int-regs 2 D 0 }
+} 2 test-bb
+
+V{
+    T{ ##replace f V int-regs 3 D 0 }
+} 3 test-bb
+
+1 get 2 get 3 get V{ } 2sequence >>successors drop
+
+cfg new 1 get >>entry
+compute-predecessors
+compute-live-sets
+
+[
+    H{
+        { V int-regs 1 V int-regs 1 }
+        { V int-regs 2 V int-regs 2 }
+        { V int-regs 3 V int-regs 3 }
+    }
+]
+[ 1 get live-in ]
+unit-test
\ No newline at end of file
diff --git a/basis/compiler/cfg/liveness/liveness.factor b/basis/compiler/cfg/liveness/liveness.factor
new file mode 100644 (file)
index 0000000..c179384
--- /dev/null
@@ -0,0 +1,26 @@
+! Copyright (C) 2009 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel accessors assocs sequences sets
+compiler.cfg.def-use compiler.cfg.dataflow-analysis
+compiler.cfg.instructions ;
+IN: compiler.cfg.liveness
+
+! See http://en.wikipedia.org/wiki/Liveness_analysis
+! Do not run after SSA construction
+
+BACKWARD-ANALYSIS: live
+
+: transfer-liveness ( live-set instructions -- live-set' )
+    [ clone ] [ <reversed> ] bi* [
+        [ uses-vregs [ over conjoin ] each ]
+        [ defs-vregs [ over delete-at ] each ] bi
+    ] each ;
+
+: local-live-in ( instructions -- live-set )
+    [ ##phi? not ] filter [ H{ } ] dip transfer-liveness keys ;
+
+M: live-analysis transfer-set
+    drop instructions>> transfer-liveness ;
+
+M: live-analysis join-sets
+    drop assoc-combine ;
\ No newline at end of file