compiler.cfg.value-numbering: fix ##compare and ##compare-branch rewrites
parent
5e71bf7907
commit
3b244d5d41
|
@ -77,13 +77,19 @@ M: ##compare-imm-branch rewrite
|
||||||
insn cc>> swap? [ swap-cc ] when
|
insn cc>> swap? [ swap-cc ] when
|
||||||
i \ ##compare-imm new-insn ; inline
|
i \ ##compare-imm new-insn ; inline
|
||||||
|
|
||||||
! M: ##compare rewrite
|
: vreg-small-constant? ( vreg -- ? )
|
||||||
! dup [ src1>> ] [ src2>> ] bi
|
vreg>expr {
|
||||||
! [ vreg>expr constant-expr? ] bi@ 2array {
|
[ constant-expr? ]
|
||||||
! { { f t } [ f >compare-imm ] }
|
[ value>> small-enough? ]
|
||||||
! { { t f } [ t >compare-imm ] }
|
} 1&& ;
|
||||||
! [ drop ]
|
|
||||||
! } case ;
|
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' )
|
:: >compare-imm-branch ( insn swap? -- insn' )
|
||||||
insn src1>>
|
insn src1>>
|
||||||
|
@ -91,13 +97,13 @@ M: ##compare-imm-branch rewrite
|
||||||
insn cc>> swap? [ swap-cc ] when
|
insn cc>> swap? [ swap-cc ] when
|
||||||
\ ##compare-imm-branch new-insn ; inline
|
\ ##compare-imm-branch new-insn ; inline
|
||||||
|
|
||||||
! M: ##compare-branch rewrite
|
M: ##compare-branch rewrite
|
||||||
! dup [ src1>> ] [ src2>> ] bi
|
dup [ src1>> ] [ src2>> ] bi
|
||||||
! [ vreg>expr constant-expr? ] bi@ 2array {
|
[ vreg-small-constant? ] bi@ 2array {
|
||||||
! { { f t } [ f >compare-imm-branch ] }
|
{ { f t } [ f >compare-imm-branch ] }
|
||||||
! { { t f } [ t >compare-imm-branch ] }
|
{ { t f } [ t >compare-imm-branch ] }
|
||||||
! [ drop ]
|
[ drop ]
|
||||||
! } case ;
|
} case ;
|
||||||
|
|
||||||
: rewrite-redundant-comparison? ( insn -- ? )
|
: 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 ;
|
M: ##xor-imm rewrite [ bitxor ] \ ##xor-imm combine-imm ;
|
||||||
|
|
||||||
: rewrite-add? ( insn -- ? )
|
: rewrite-add? ( insn -- ? )
|
||||||
src2>> {
|
src2>> vreg-small-constant? ;
|
||||||
[ vreg>expr constant-expr? ]
|
|
||||||
[ vreg>constant small-enough? ]
|
|
||||||
} 1&& ;
|
|
||||||
|
|
||||||
M: ##add rewrite
|
M: ##add rewrite
|
||||||
dup rewrite-add? [
|
dup rewrite-add? [
|
||||||
|
|
|
@ -291,3 +291,6 @@ USE: make
|
||||||
|
|
||||||
[ { "a" 1 "b" 1 "c" } ]
|
[ { "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
|
Loading…
Reference in New Issue