]> gitweb.factorcode.org Git - factor.git/commitdiff
compiler.cfg.gvn: found infinite loop issues when rewrites define new vregs
authorAlex Vondrak <ajvondrak@csupomona.edu>
Sat, 2 Jul 2011 20:43:28 +0000 (13:43 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Wed, 12 Sep 2012 22:14:10 +0000 (15:14 -0700)
extra/compiler/cfg/gvn/alien/alien.factor
extra/compiler/cfg/gvn/comparisons/comparisons.factor
extra/compiler/cfg/gvn/math/math.factor

index 4f57e0f51040b2d319f6c0515a7671bcff68b155..0c6d31fb2e5b84bfa676d323af9b586012530c68 100644 (file)
@@ -27,6 +27,8 @@ M: ##box-displaced-alien rewrite
 : rewrite-unbox-alien ( insn box-insn -- insn )
     [ dst>> ] [ src>> ] bi* <copy> ;
 
+! XXX  next-vreg makes vregs>vns change on every iteration
+! (hidden in ^^unbox-c-ptr)
 : rewrite-unbox-displaced-alien ( insn box-insn -- insns )
     [
         [ dst>> ]
@@ -43,7 +45,8 @@ M: ##box-displaced-alien rewrite
             [ rewrite-unbox-alien ]
         }
         {
-            [ dup [ ##box-displaced-alien? ] with-available-uses? ]
+            ! [ dup [ ##box-displaced-alien? ] with-available-uses? ]
+            [ f ]
             [ rewrite-unbox-displaced-alien ]
         }
         [ 2drop f ]
index b84126419c4858395fe5de1777be8612f1539f90..ca50b6e4b584ad1b3f61052e312952f40677275c 100644 (file)
@@ -58,6 +58,7 @@ IN: compiler.cfg.gvn.comparisons
 : >compare< ( insn -- in1 in2 cc )
     [ src1>> ] [ src2>> ] [ cc>> ] tri ; inline
 
+! XXX next-vreg may make vregs>vns change on every iteration
 : >test-vector< ( insn -- src1 temp rep vcc )
     {
         [ src1>> ]
@@ -179,11 +180,13 @@ M: ##compare-integer-branch rewrite
     [ { [ dst>> ] [ src1>> ] [ src2>> ] [ cc>> ] } cleave ] dip
     swap-compare ; inline
 
+! XXX next-vreg may make vregs>vns change on every iteration
 : >compare-imm ( insn swap? -- insn' )
     (>compare-imm)
     [ vreg>literal ] dip
     next-vreg \ ##compare-imm new-insn ; inline
 
+! XXX next-vreg may make vregs>vns change on every iteration
 : >compare-integer-imm ( insn swap? -- insn' )
     (>compare-imm)
     [ vreg>integer ] dip
@@ -218,6 +221,7 @@ M: ##compare-integer rewrite
         [ cc>> { cc= cc/= } member? ]
     } 1&& ; inline
 
+! XXX next-vreg may make vregs>vns change on every iteration
 : rewrite-redundant-comparison ( insn -- insn' )
     [ cc>> ] [ dst>> ] [ src1>> vreg>insn ] tri {
         { [ dup ##compare? ] [ >compare< next-vreg \ ##compare new-insn ] }
@@ -279,6 +283,7 @@ M: ##compare-integer-imm rewrite
 : simplify-test-imm-branch ( insn -- insn )
     (simplify-test-imm) \ ##test-imm-branch new-insn ; inline
 
+! XXX next-vreg may make vregs>vns change on every iteration
 : >test-imm ( insn ? -- insn' )
     (>compare-imm) [ vreg>integer ] dip next-vreg
     \ ##test-imm new-insn ; inline
index 50f62cadf9898da4eb54b3d470ccff8450f5664d..0b6f4291dc1e657900640d7286dea1d4115bb935 100644 (file)
@@ -122,11 +122,14 @@ M: ##sub-imm rewrite sub-imm>add-imm ;
     ] [ f ] if ; inline
 
 : distribute-over-add? ( insn -- ? )
-    src1>> vreg>insn [ ##add-imm? ] with-available-uses? ;
+    drop f ;
+    ! src1>> vreg>insn [ ##add-imm? ] with-available-uses? ;
 
 : distribute-over-sub? ( insn -- ? )
-    src1>> vreg>insn [ ##sub-imm? ] with-available-uses? ;
+    drop f ;
+    ! src1>> vreg>insn [ ##sub-imm? ] with-available-uses? ;
 
+! XXX next-vreg makes vregs>vns change on every iteration
 : distribute ( insn add-op mul-op -- new-insns/f )
     [
         dup src1>> vreg>insn