compiler.cfg.value-numbering: fix ##compare and ##compare-branch rewrites

db4
Slava Pestov 2009-07-13 12:33:58 -05:00
parent 5e71bf7907
commit 3b244d5d41
2 changed files with 25 additions and 19 deletions
basis/compiler/cfg/value-numbering/rewrite

View File

@ -77,13 +77,19 @@ M: ##compare-imm-branch rewrite
insn cc>> swap? [ swap-cc ] when
i \ ##compare-imm new-insn ; inline
! M: ##compare rewrite
! dup [ src1>> ] [ src2>> ] bi
! [ vreg>expr constant-expr? ] bi@ 2array {
! { { f t } [ f >compare-imm ] }
! { { t f } [ t >compare-imm ] }
! [ drop ]
! } case ;
: vreg-small-constant? ( vreg -- ? )
vreg>expr {
[ constant-expr? ]
[ value>> small-enough? ]
} 1&& ;
M: ##compare rewrite
dup [ src1>> ] [ src2>> ] bi
[ vreg-small-constant? ] bi@ 2array {
{ { f t } [ f >compare-imm ] }
{ { t f } [ t >compare-imm ] }
[ drop ]
} case ;
:: >compare-imm-branch ( insn swap? -- insn' )
insn src1>>
@ -91,13 +97,13 @@ M: ##compare-imm-branch rewrite
insn cc>> swap? [ swap-cc ] when
\ ##compare-imm-branch new-insn ; inline
! M: ##compare-branch rewrite
! dup [ src1>> ] [ src2>> ] bi
! [ vreg>expr constant-expr? ] bi@ 2array {
! { { f t } [ f >compare-imm-branch ] }
! { { t f } [ t >compare-imm-branch ] }
! [ drop ]
! } case ;
M: ##compare-branch rewrite
dup [ src1>> ] [ src2>> ] bi
[ vreg-small-constant? ] bi@ 2array {
{ { f t } [ f >compare-imm-branch ] }
{ { t f } [ t >compare-imm-branch ] }
[ drop ]
} case ;
: rewrite-redundant-comparison? ( insn -- ? )
{
@ -198,10 +204,7 @@ M: ##or-imm rewrite [ bitor ] \ ##or-imm combine-imm ;
M: ##xor-imm rewrite [ bitxor ] \ ##xor-imm combine-imm ;
: rewrite-add? ( insn -- ? )
src2>> {
[ vreg>expr constant-expr? ]
[ vreg>constant small-enough? ]
} 1&& ;
src2>> vreg-small-constant? ;
M: ##add rewrite
dup rewrite-add? [

View File

@ -290,4 +290,7 @@ M: bogus-hashcode hashcode* 2drop 0 >bignum ;
USE: make
[ { "a" 1 "b" 1 "c" } ]
[ 1 { "a" "b" "c" } [ [ dup , ] [ , ] interleave drop ] { } make ] unit-test
[ 1 { "a" "b" "c" } [ [ dup , ] [ , ] interleave drop ] { } make ] unit-test
[ t ] [ 0 array-capacity? ] unit-test
[ f ] [ -1 array-capacity? ] unit-test