]> gitweb.factorcode.org Git - factor.git/commitdiff
def-use puts phi uses in respective predecessors
authorDaniel Ehrenberg <littledan@Macintosh-122.local>
Sun, 2 Aug 2009 22:04:07 +0000 (18:04 -0400)
committerDaniel Ehrenberg <littledan@Macintosh-122.local>
Sun, 2 Aug 2009 22:04:07 +0000 (18:04 -0400)
basis/compiler/cfg/def-use/authors.txt [new file with mode: 0644]
basis/compiler/cfg/def-use/def-use-tests.factor [new file with mode: 0644]
basis/compiler/cfg/def-use/def-use.factor

diff --git a/basis/compiler/cfg/def-use/authors.txt b/basis/compiler/cfg/def-use/authors.txt
new file mode 100644 (file)
index 0000000..a44f8d7
--- /dev/null
@@ -0,0 +1,2 @@
+Slava Pestov
+Daniel Ehrenberg
diff --git a/basis/compiler/cfg/def-use/def-use-tests.factor b/basis/compiler/cfg/def-use/def-use-tests.factor
new file mode 100644 (file)
index 0000000..1153d9e
--- /dev/null
@@ -0,0 +1,37 @@
+! Copyright (C) 2009 Daniel Ehrenberg.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel tools.test accessors vectors sequences namespaces
+arrays
+cpu.architecture
+compiler.cfg.def-use
+compiler.cfg
+compiler.cfg.debugger
+compiler.cfg.instructions
+compiler.cfg.registers ;
+
+V{
+    T{ ##peek f V int-regs 0 D 0 }
+    T{ ##peek f V int-regs 1 D 0 }
+    T{ ##peek f V int-regs 2 D 0 }
+} 1 test-bb
+V{
+    T{ ##replace f V int-regs 2 D 0 }
+} 2 test-bb
+1 get 2 get 1vector >>successors drop
+V{
+    T{ ##replace f V int-regs 0 D 0 }
+} 3 test-bb
+2 get 3 get 1vector >>successors drop
+V{ } 4 test-bb
+V{ } 5 test-bb
+3 get 4 get 5 get V{ } 2sequence >>successors drop
+V int-regs 2
+    2 get V int-regs 0 2array
+    3 get V int-regs 1 2array
+2array \ ##phi new-insn 1vector
+6 test-bb
+4 get 6 get 1vector >>successors drop
+5 get 6 get 1vector >>successors drop
+
+cfg new 1 get >>entry 0 set
+[ ] [ 0 get compute-def-use ] unit-test
index 1c9ac90f78c747ad3f9815231b92771356616921..8e8fbf3a2d1f8e6a7e39f8706440e1bf7a163e4f 100644 (file)
@@ -1,7 +1,7 @@
-! Copyright (C) 2008, 2009 Slava Pestov.
+! Copyright (C) 2008, 2009 Slava Pestov, Daniel Ehrenberg.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors arrays kernel assocs sequences namespaces fry
-sets compiler.cfg.rpo compiler.cfg.instructions ;
+sets compiler.cfg.rpo compiler.cfg.instructions locals ;
 IN: compiler.cfg.def-use
 
 GENERIC: defs-vreg ( insn -- vreg/f )
@@ -80,18 +80,18 @@ SYMBOLS: defs insns uses ;
         ] each-basic-block
     ] keep insns set ;
 
-: compute-uses ( cfg -- )
-    H{ } clone [
-        '[
-            dup instructions>> [
-                uses-vregs [
-                    _ conjoin-at
-                ] with each
-            ] with each
-        ] each-basic-block
-    ] keep
-    [ keys ] assoc-map
-    uses set ;
+:: compute-uses ( cfg -- )
+    ! Here, a phi node uses its argument in the block that it comes from.
+    H{ } clone :> use
+    cfg [| block |
+        block instructions>> [
+            dup ##phi?
+            [ inputs>> [ use conjoin-at ] assoc-each ]
+            [ uses-vregs [ block swap use conjoin-at ] each ]
+            if
+        ] each
+    ] each-basic-block
+    use [ keys ] assoc-map uses set ;
 
 : compute-def-use ( cfg -- )
-    [ compute-defs ] [ compute-uses ] [ compute-insns ] tri ;
\ No newline at end of file
+    [ compute-defs ] [ compute-uses ] [ compute-insns ] tri ;