]> gitweb.factorcode.org Git - factor.git/commitdiff
compiler.cfg.gvn: preparing for avail-based redundancy elimination
authorAlex Vondrak <ajvondrak@csupomona.edu>
Fri, 24 Jun 2011 00:39:46 +0000 (17:39 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Wed, 12 Sep 2012 22:14:08 +0000 (15:14 -0700)
extra/compiler/cfg/gvn/graph/graph.factor
extra/compiler/cfg/gvn/gvn.factor

index bcdd2bea00961646f8b4f4e3c5847dcdf7f11470..080acf6e0c5455a8b90e6ee5a2c48e6b0a29f400 100644 (file)
@@ -15,6 +15,10 @@ SYMBOL: exprs>vns
 ! assoc mapping value numbers to instructions
 SYMBOL: vns>insns
 
+! assoc mapping basic blocks to the set of value numbers that
+! are defined in the block
+SYMBOL: bbs>defns
+
 ! boolean to track whether vregs>vns changes
 SYMBOL: changed?
 
@@ -27,12 +31,16 @@ SYMBOL: changed?
 
 : vreg>insn ( vreg -- insn ) vreg>vn vn>insn ;
 
+: defined ( bb -- vns ) bbs>defns get at ;
+
 : clear-exprs ( -- )
     exprs>vns get clear-assoc
-    vns>insns get clear-assoc ;
+    vns>insns get clear-assoc
+    bbs>defns get clear-assoc ;
 
 : init-value-graph ( -- )
     0 input-expr-counter set
     H{ } clone vregs>vns set
     H{ } clone exprs>vns set
-    H{ } clone vns>insns set ;
+    H{ } clone vns>insns set
+    H{ } clone bbs>defns set ;
index 685de8bd7ad371c5e02b443a8cc484d778f55bd4..f2317f6dca08371d47a0f4881952c6883d5b3b7e 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2008, 2010 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: namespaces arrays assocs kernel accessors fry grouping
-sorting sets sequences locals
+USING: namespaces arrays assocs hashtables kernel accessors fry
+grouping sorting sets sequences locals
 cpu.architecture
 sequences.deep
 compiler.cfg
@@ -29,6 +29,7 @@ GENERIC: process-instruction ( insn -- insn' )
     vn vn set-vn
     vn expr exprs>vns get set-at
     insn vn vns>insns get set-at
+    vn vn basic-block get bbs>defns get [ ?set-at ] change-at
     insn ;
 
 : check-redundancy ( insn -- insn' )
@@ -62,6 +63,10 @@ M: array process-instruction
         changed? get
     ] loop ;
 
+! FIXME can't just do a pass through the cfg to rewrite---not
+! all canonical leaders are necessarily available in a
+! particular rewrite
+
 : eliminate-redundancies ( cfg -- )
     final-iteration? on
     clear-exprs
@@ -69,5 +74,5 @@ M: array process-instruction
 
 : value-numbering ( cfg -- cfg )
     dup identify-redundancies
-    dup eliminate-redundancies
+    dup eliminate-redundancies
     cfg-changed predecessors-changed ;