]> gitweb.factorcode.org Git - factor.git/commitdiff
compiler.cfg.gvn: forgot to make certain defs available
authorAlex Vondrak <ajvondrak@csupomona.edu>
Wed, 6 Jul 2011 02:19:30 +0000 (19:19 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Wed, 12 Sep 2012 22:14:11 +0000 (15:14 -0700)
extra/compiler/cfg/gvn/avail/avail.factor
extra/compiler/cfg/gvn/gvn.factor

index 7851e837231204df1de7638280d74a4954fad4f1..a60e72a2e4e7affba5c55b77c4eefa95d48e7883 100644 (file)
@@ -36,6 +36,5 @@ M: avail-analysis transfer-set drop defined assoc-union ;
 : with-available-uses? ( quot -- ? )
     keep swap [ available-uses? ] [ drop f ] if ; inline
 
-: make-available ( insn -- insn )
-    dup dst>>
+: make-available ( vreg -- )
     basic-block get avail-ins get [ dupd clone ?set-at ] change-at ;
index 1ce57aeb31c41207fc81d3c95cb658bee4e25102..40281d0299b244f88e9f804c7721c7fade7dcda3 100644 (file)
@@ -83,18 +83,21 @@ GENERIC: gcse ( insn -- insn' )
 
 M: array gcse [ gcse ] map ;
 
-M: alien-call-insn gcse ;
-M: ##callback-inputs gcse ;
-M: ##copy gcse ;
+: defs-available ( insn -- insn )
+    dup defs-vregs [ make-available ] each ;
+
+M: alien-call-insn gcse defs-available ;
+M: ##callback-inputs gcse defs-available ;
+M: ##copy gcse defs-available ;
 
 : ?eliminate ( insn vn -- insn' )
     dup available? [
-        [ dst>> ] dip <copy>
-    ] [ drop make-available ] if ;
+        [ dst>> dup make-available ] dip <copy>
+    ] [ drop defs-available ] if ;
 
 : eliminate-redundancy ( insn -- insn' )
     dup >expr exprs>vns get at
-    [ ?eliminate ] [ make-available ] if* ;
+    [ ?eliminate ] [ defs-available ] if* ;
 
 M: ##phi gcse
     dup inputs>> values [ vreg>vn ] map sift