]> gitweb.factorcode.org Git - factor.git/commitdiff
compiler.cfg.gvn: annotate portions of code where availability will be an issue
authorAlex Vondrak <ajvondrak@csupomona.edu>
Tue, 28 Jun 2011 06:27:13 +0000 (23:27 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Wed, 12 Sep 2012 22:14:09 +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
extra/compiler/cfg/gvn/misc/misc.factor
extra/compiler/cfg/gvn/simd/simd.factor
extra/compiler/cfg/gvn/slots/slots.factor

index 7b7e235dcc2791a6cd7eb131d4eecf30d552406e..e197bd537223906133d461a6c62456afb67d0e2b 100644 (file)
@@ -34,6 +34,7 @@ M: ##box-displaced-alien rewrite
         ##add
     ] { } make ;
 
+! XXX the vregs that src>> vreg>insn uses are not necessarily available
 : rewrite-unbox-any-c-ptr ( insn -- insn/f )
     dup src>> vreg>insn
     {
@@ -51,6 +52,7 @@ M: ##unbox-alien rewrite rewrite-unbox-any-c-ptr ;
 : fuse-base-offset? ( insn -- ? )
     base>> vreg>insn ##add-imm? ;
 
+! XXX base>> vreg>insn src1>> not necessarily available
 : fuse-base-offset ( insn -- insn' )
     clone dup base>> vreg>insn
     [ src1>> ] [ src2>> ] bi
@@ -61,6 +63,7 @@ M: ##unbox-alien rewrite rewrite-unbox-any-c-ptr ;
 : fuse-displacement-offset? ( insn -- ? )
     { [ scale>> 0 = ] [ displacement>> vreg>insn ##add-imm? ] } 1&& ;
 
+! XXX displacement>> vreg>insn src1>> not necessarily available
 : fuse-displacement-offset ( insn -- insn' )
     clone dup displacement>> vreg>insn
     [ src1>> ] [ src2>> ] bi
@@ -85,6 +88,8 @@ GENERIC: new-alien-insn ( value base displacement scale offset rep c-type insn -
 M: ##load-memory-imm new-alien-insn drop \ ##load-memory new-insn ;
 M: ##store-memory-imm new-alien-insn drop \ ##store-memory new-insn ;
 
+! XXX base>> vreg>insn src1>> & src2>> not necessarily
+!     available
 : fuse-displacement ( insn -- insn' )
     {
         [ alien-insn-value ]
@@ -103,6 +108,7 @@ M: ##store-memory-imm new-alien-insn drop \ ##store-memory new-insn ;
 : fuse-scale? ( insn -- ? )
     { [ scale>> 0 = ] [ displacement>> vreg>insn scale-insn? ] } 1&& ;
 
+! XXX displacement>> vreg>insn src1>> not necessarily available
 : fuse-scale ( insn -- insn' )
     clone dup displacement>> vreg>insn
     [ src1>> ] [ src2>> ] bi
index 9437c83a4f34539d583e9149e11ec5ba828e89d8..a7b232e89171763d1b4b93b6efc4bf755897f2df 100644 (file)
@@ -217,6 +217,7 @@ M: ##compare-integer rewrite
         [ cc>> { cc= cc/= } member? ]
     } 1&& ; inline
 
+! XXX the vregs that src1>> vreg>insn uses are not necessarily available
 : rewrite-redundant-comparison ( insn -- insn' )
     [ cc>> ] [ dst>> ] [ src1>> vreg>insn ] tri {
         { [ dup ##compare? ] [ >compare< next-vreg \ ##compare new-insn ] }
@@ -254,6 +255,8 @@ M: ##compare-integer-imm rewrite
         [ drop f ]
     } cond ;
 
+! XXX the vregs (src1>> and src2>>) that src1>> vreg>insn uses
+!     are not necessarily available
 : (simplify-test) ( insn -- src1 src2 cc )
     [ src1>> vreg>insn [ src1>> ] [ src2>> ] bi ] [ cc>> ] bi ; inline
 
@@ -263,6 +266,8 @@ M: ##compare-integer-imm rewrite
 : simplify-test-branch ( insn -- insn )
     (simplify-test) \ ##test-branch new-insn ; inline
 
+! XXX the vregs (src1>> and src2>>) that src1>> vreg>insn uses
+!     are not necessarily available
 : (simplify-test-imm) ( insn -- src1 src2 cc )
     [ src1>> vreg>insn [ src1>> ] [ src2>> ] bi ] [ cc>> ] bi ; inline
 
index 63993a8726eaec5f7841c501ef4820995a984e89..65376d80bb3dc80eb5f5830e2a25722052b47c41 100644 (file)
@@ -23,6 +23,7 @@ M: ##tagged>integer rewrite
         [ 2drop f ]
     } cond ;
 
+! XXX src>> vreg>insn src>> not necessarily available
 : self-inverse ( insn -- insn' )
     [ dst>> ] [ src>> vreg>insn src>> ] bi <copy> ;
 
@@ -101,6 +102,7 @@ M: ##sub-imm rewrite sub-imm>add-imm ;
 : mul-to-shl ( insn -- insn' )
     [ [ dst>> ] [ src1>> ] bi ] [ src2>> log2 ] bi \ ##shl-imm new-insn ;
 
+! XXX not sure if availability is an issue
 ! Distribution converts
 ! ##+-imm 2 1 X
 ! ##*-imm 3 2 Y
index 9e23ae3bdd2aa6b10efc9f3444364b861cc3fba5..2a0a30ee18fb0a6db4da8ea429e6e9862aba1f00 100644 (file)
@@ -15,6 +15,9 @@ M: ##replace rewrite
         [ swap \ ##replace-imm new-insn ] [ 2drop f ] if
     ] [ 2drop f ] if ;
 
+! XXX any particular input's vn isn't necessarily available, so
+!     can't just return a straight-up <copy>; might just do
+!     this with a set-vn in gvn.factor:value-number
 M: ##phi rewrite
     [ dst>> ] [ inputs>> values [ vreg>vn ] map sift ] bi
     dup all-equal? [
index 14fd574eb1d954879f281def58e1978c4114555a..ee64b2fbfbf726f38a96c840dcb21255a6ab0c54 100644 (file)
@@ -18,6 +18,9 @@ IN: compiler.cfg.gvn.simd
 ! Some lame constant folding for SIMD intrinsics. Eventually this
 ! should be redone completely.
 
+! XXX pretty much all of these rely on the vregs used by some
+! vreg>insn, but they aren't necessarily available
+
 : useless-shuffle-vector-imm? ( insn -- ? )
     [ shuffle>> ] [ rep>> rep-length iota ] bi sequence= ;
 
index 15a1040edd4c98551f8f2675dcb4fc46cfaa54dc..fae7459db3fe547151b58cb04182411fb5be110e 100644 (file)
@@ -11,6 +11,7 @@ IN: compiler.cfg.gvn.slots
     complex-addressing?
     [ slot>> vreg>insn ##add-imm? ] [ drop f ] if ;
 
+! XXX the vregs that slot>> vreg>insn uses are not necessarily available
 : simplify-slot-addressing ( insn -- insn/f )
     dup simplify-slot-addressing? [
         clone dup slot>> vreg>insn