diff --git a/basis/compiler/cfg/value-numbering/rewrite/rewrite.factor b/basis/compiler/cfg/value-numbering/rewrite/rewrite.factor index ca7a959a82..92965e40c5 100755 --- a/basis/compiler/cfg/value-numbering/rewrite/rewrite.factor +++ b/basis/compiler/cfg/value-numbering/rewrite/rewrite.factor @@ -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? [ diff --git a/core/sequences/sequences-tests.factor b/core/sequences/sequences-tests.factor index 5e0d5597ca..2aa95b23ab 100644 --- a/core/sequences/sequences-tests.factor +++ b/core/sequences/sequences-tests.factor @@ -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 \ No newline at end of file +[ 1 { "a" "b" "c" } [ [ dup , ] [ , ] interleave drop ] { } make ] unit-test + +[ t ] [ 0 array-capacity? ] unit-test +[ f ] [ -1 array-capacity? ] unit-test \ No newline at end of file