From f2638c99dd28062371893ad25d69f7ea2477a8ab Mon Sep 17 00:00:00 2001 From: Alex Vondrak Date: Thu, 2 Aug 2012 16:41:23 -0700 Subject: [PATCH] compiler.cfg.gvn: merge in applicable changes from compiler.cfg.value-numbering --- extra/compiler/cfg/gvn/alien/alien.factor | 6 +- .../cfg/gvn/comparisons/comparisons.factor | 62 ++++++++-------- .../cfg/gvn/expressions/expressions.factor | 2 +- extra/compiler/cfg/gvn/folding/folding.factor | 4 +- extra/compiler/cfg/gvn/math/math.factor | 74 +++++++++---------- extra/compiler/cfg/gvn/misc/misc.factor | 2 +- extra/compiler/cfg/gvn/simd/simd.factor | 26 +++---- 7 files changed, 88 insertions(+), 88 deletions(-) diff --git a/extra/compiler/cfg/gvn/alien/alien.factor b/extra/compiler/cfg/gvn/alien/alien.factor index a83fc13000..e8db481583 100644 --- a/extra/compiler/cfg/gvn/alien/alien.factor +++ b/extra/compiler/cfg/gvn/alien/alien.factor @@ -34,7 +34,7 @@ M: ##box-displaced-alien rewrite [ dst>> ] [ [ base>> ] [ base-class>> ] [ displacement>> ] tri ] bi* [ ^^unbox-c-ptr ] dip - ##add + ##add, ] { } make ; : rewrite-unbox-any-c-ptr ( insn -- insn/f ) @@ -99,8 +99,8 @@ M: ##store-memory-imm alien-insn-value src>> ; GENERIC: new-alien-insn ( value base displacement scale offset rep c-type insn -- 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 ; +M: ##load-memory-imm new-alien-insn drop ##load-memory new-insn ; +M: ##store-memory-imm new-alien-insn drop ##store-memory new-insn ; : fuse-displacement ( insn -- insn' ) { diff --git a/extra/compiler/cfg/gvn/comparisons/comparisons.factor b/extra/compiler/cfg/gvn/comparisons/comparisons.factor index 254edb1327..0730318ec6 100644 --- a/extra/compiler/cfg/gvn/comparisons/comparisons.factor +++ b/extra/compiler/cfg/gvn/comparisons/comparisons.factor @@ -87,15 +87,15 @@ UNION: general-compare-insn scalar-compare-insn ##test-vector ; : rewrite-boolean-comparison ( insn -- insn ) src1>> vreg>insn { - { [ dup ##compare? ] [ >compare< \ ##compare-branch new-insn ] } - { [ dup ##compare-imm? ] [ >compare< \ ##compare-imm-branch new-insn ] } - { [ dup ##compare-integer? ] [ >compare< \ ##compare-integer-branch new-insn ] } - { [ dup ##compare-integer-imm? ] [ >compare< \ ##compare-integer-imm-branch new-insn ] } - { [ dup ##test? ] [ >compare< \ ##test-branch new-insn ] } - { [ dup ##test-imm? ] [ >compare< \ ##test-imm-branch new-insn ] } - { [ dup ##compare-float-unordered? ] [ >compare< \ ##compare-float-unordered-branch new-insn ] } - { [ dup ##compare-float-ordered? ] [ >compare< \ ##compare-float-ordered-branch new-insn ] } - { [ dup ##test-vector? ] [ >test-vector< \ ##test-vector-branch new-insn ] } + { [ dup ##compare? ] [ >compare< ##compare-branch new-insn ] } + { [ dup ##compare-imm? ] [ >compare< ##compare-imm-branch new-insn ] } + { [ dup ##compare-integer? ] [ >compare< ##compare-integer-branch new-insn ] } + { [ dup ##compare-integer-imm? ] [ >compare< ##compare-integer-imm-branch new-insn ] } + { [ dup ##test? ] [ >compare< ##test-branch new-insn ] } + { [ dup ##test-imm? ] [ >compare< ##test-imm-branch new-insn ] } + { [ dup ##compare-float-unordered? ] [ >compare< ##compare-float-unordered-branch new-insn ] } + { [ dup ##compare-float-ordered? ] [ >compare< ##compare-float-ordered-branch new-insn ] } + { [ dup ##test-vector? ] [ >test-vector< ##test-vector-branch new-insn ] } } cond ; : fold-branch ( ? -- insn ) @@ -103,13 +103,13 @@ UNION: general-compare-insn scalar-compare-insn ##test-vector ; 0 1 ? basic-block get [ nth 1vector ] change-successors drop ] [ drop ] if - \ ##branch new-insn ; + ##branch new-insn ; : fold-compare-imm-branch ( insn -- insn/f ) evaluate-compare-imm fold-branch ; : >test-branch ( insn -- insn ) - [ src1>> ] [ src1>> ] [ cc>> ] tri \ ##test-branch new-insn ; + [ src1>> ] [ src1>> ] [ cc>> ] tri ##test-branch new-insn ; M: ##compare-imm-branch rewrite { @@ -146,12 +146,12 @@ M: ##test-imm-branch rewrite : >compare-imm-branch ( insn swap? -- insn' ) (>compare-imm-branch) [ vreg>literal ] dip - \ ##compare-imm-branch new-insn ; inline + ##compare-imm-branch new-insn ; inline : >compare-integer-imm-branch ( insn swap? -- insn' ) (>compare-imm-branch) [ vreg>integer ] dip - \ ##compare-integer-imm-branch new-insn ; inline + ##compare-integer-imm-branch new-insn ; inline : evaluate-self-compare ( insn -- ? ) cc>> { cc= cc<= cc>= } member-eq? ; @@ -182,15 +182,15 @@ M: ##compare-integer-branch rewrite : >compare-imm ( insn swap? -- insn' ) (>compare-imm) [ vreg>literal ] dip - next-vreg \ ##compare-imm new-insn ; inline + next-vreg ##compare-imm new-insn ; inline : >compare-integer-imm ( insn swap? -- insn' ) (>compare-imm) [ vreg>integer ] dip - next-vreg \ ##compare-integer-imm new-insn ; inline + next-vreg ##compare-integer-imm new-insn ; inline : >boolean-insn ( insn ? -- insn' ) - [ dst>> ] dip \ ##load-reference new-insn ; + [ dst>> ] dip ##load-reference new-insn ; : rewrite-self-compare ( insn -- insn' ) dup evaluate-self-compare >boolean-insn ; @@ -220,14 +220,14 @@ M: ##compare-integer rewrite : rewrite-redundant-comparison ( insn -- insn' ) [ cc>> ] [ dst>> ] [ src1>> vreg>insn ] tri { - { [ dup ##compare? ] [ >compare< next-vreg \ ##compare new-insn ] } - { [ dup ##compare-imm? ] [ >compare< next-vreg \ ##compare-imm new-insn ] } - { [ dup ##compare-integer? ] [ >compare< next-vreg \ ##compare-integer new-insn ] } - { [ dup ##compare-integer-imm? ] [ >compare< next-vreg \ ##compare-integer-imm new-insn ] } - { [ dup ##test? ] [ >compare< next-vreg \ ##test new-insn ] } - { [ dup ##test-imm? ] [ >compare< next-vreg \ ##test-imm new-insn ] } - { [ dup ##compare-float-unordered? ] [ >compare< next-vreg \ ##compare-float-unordered new-insn ] } - { [ dup ##compare-float-ordered? ] [ >compare< next-vreg \ ##compare-float-ordered new-insn ] } + { [ dup ##compare? ] [ >compare< next-vreg ##compare new-insn ] } + { [ dup ##compare-imm? ] [ >compare< next-vreg ##compare-imm new-insn ] } + { [ dup ##compare-integer? ] [ >compare< next-vreg ##compare-integer new-insn ] } + { [ dup ##compare-integer-imm? ] [ >compare< next-vreg ##compare-integer-imm new-insn ] } + { [ dup ##test? ] [ >compare< next-vreg ##test new-insn ] } + { [ dup ##test-imm? ] [ >compare< next-vreg ##test-imm new-insn ] } + { [ dup ##compare-float-unordered? ] [ >compare< next-vreg ##compare-float-unordered new-insn ] } + { [ dup ##compare-float-ordered? ] [ >compare< next-vreg ##compare-float-ordered new-insn ] } } cond swap cc= eq? [ [ negate-cc ] change-cc ] when ; @@ -246,7 +246,7 @@ M: ##compare-imm rewrite : >test ( insn -- insn' ) { [ dst>> ] [ src1>> ] [ src1>> ] [ cc>> ] [ temp>> ] } cleave - \ ##test new-insn ; + ##test new-insn ; M: ##compare-integer-imm rewrite { @@ -262,10 +262,10 @@ M: ##compare-integer-imm rewrite [ src1>> vreg>insn [ src1>> ] [ src2>> ] bi ] [ cc>> ] bi ; inline : simplify-test ( insn -- insn ) - [ dst>> ] [ (simplify-test) ] [ temp>> ] tri \ ##test new-insn ; inline + [ dst>> ] [ (simplify-test) ] [ temp>> ] tri ##test new-insn ; inline : simplify-test-branch ( insn -- insn ) - (simplify-test) \ ##test-branch new-insn ; inline + (simplify-test) ##test-branch new-insn ; inline : simplify-test-imm? ( insn -- ? ) src1>> vreg>insn [ ##and-imm? ] with-available-uses? ; @@ -274,18 +274,18 @@ M: ##compare-integer-imm rewrite [ src1>> vreg>insn [ src1>> ] [ src2>> ] bi ] [ cc>> ] bi ; inline : simplify-test-imm ( insn -- insn ) - [ dst>> ] [ (simplify-test-imm) ] [ temp>> ] tri \ ##test-imm new-insn ; inline + [ dst>> ] [ (simplify-test-imm) ] [ temp>> ] tri ##test-imm new-insn ; inline : simplify-test-imm-branch ( insn -- insn ) - (simplify-test-imm) \ ##test-imm-branch new-insn ; inline + (simplify-test-imm) ##test-imm-branch new-insn ; inline : >test-imm ( insn ? -- insn' ) (>compare-imm) [ vreg>integer ] dip next-vreg - \ ##test-imm new-insn ; inline + ##test-imm new-insn ; inline : >test-imm-branch ( insn ? -- insn' ) (>compare-imm-branch) [ vreg>integer ] dip - \ ##test-imm-branch new-insn ; inline + ##test-imm-branch new-insn ; inline M: ##test rewrite { diff --git a/extra/compiler/cfg/gvn/expressions/expressions.factor b/extra/compiler/cfg/gvn/expressions/expressions.factor index 62a061499e..a56eb64425 100644 --- a/extra/compiler/cfg/gvn/expressions/expressions.factor +++ b/extra/compiler/cfg/gvn/expressions/expressions.factor @@ -91,4 +91,4 @@ M: ##load-reference >expr obj>> ; M: ##phi >expr inputs>> values [ vreg>vn ] map basic-block get number>> prefix - \ ##phi prefix ; + ##phi prefix ; diff --git a/extra/compiler/cfg/gvn/folding/folding.factor b/extra/compiler/cfg/gvn/folding/folding.factor index ca6c2ef321..206ab3c10e 100644 --- a/extra/compiler/cfg/gvn/folding/folding.factor +++ b/extra/compiler/cfg/gvn/folding/folding.factor @@ -24,7 +24,7 @@ M: ##shl-imm binary-constant-fold* drop shift ; : binary-constant-fold ( insn -- insn' ) [ dst>> ] [ [ src1>> vreg>integer ] [ src2>> ] [ ] tri binary-constant-fold* ] bi - \ ##load-integer new-insn ; inline + ##load-integer new-insn ; inline : unary-constant-fold? ( insn -- ? ) src>> vreg>insn ##load-integer? ; inline @@ -36,4 +36,4 @@ M: ##neg unary-constant-fold* drop neg ; : unary-constant-fold ( insn -- insn' ) [ dst>> ] [ [ src>> vreg>integer ] [ ] bi unary-constant-fold* ] bi - \ ##load-integer new-insn ; inline + ##load-integer new-insn ; inline diff --git a/extra/compiler/cfg/gvn/math/math.factor b/extra/compiler/cfg/gvn/math/math.factor index 0b5804acec..5b5fcd0bd5 100644 --- a/extra/compiler/cfg/gvn/math/math.factor +++ b/extra/compiler/cfg/gvn/math/math.factor @@ -20,8 +20,8 @@ IN: compiler.cfg.gvn.math M: ##tagged>integer rewrite [ dst>> ] [ src>> vreg>insn ] bi { - { [ dup ##load-integer? ] [ val>> tag-fixnum \ ##load-integer new-insn ] } - { [ dup f-insn? ] [ drop \ f type-number \ ##load-integer new-insn ] } + { [ dup ##load-integer? ] [ val>> tag-fixnum ##load-integer new-insn ] } + { [ dup f-insn? ] [ drop \ f type-number ##load-integer new-insn ] } [ 2drop f ] } cond ; @@ -81,14 +81,14 @@ M: ##add-imm rewrite { { [ dup src2>> 0 = ] [ identity ] } { [ dup binary-constant-fold? ] [ binary-constant-fold ] } - { [ dup src1>> vreg>insn ##add-imm? ] [ \ ##add-imm reassociate-arithmetic ] } + { [ dup src1>> vreg>insn ##add-imm? ] [ ##add-imm reassociate-arithmetic ] } [ drop f ] } cond ; : sub-imm>add-imm ( insn -- insn' ) [ dst>> ] [ src1>> ] [ src2>> neg ] tri dup immediate-arithmetic? - \ ##add-imm ?new-insn ; + ##add-imm ?new-insn ; M: ##sub-imm rewrite sub-imm>add-imm ; @@ -97,14 +97,14 @@ M: ##sub-imm rewrite sub-imm>add-imm ; src2>> -1 = ; : mul-to-neg ( insn -- insn' ) - [ dst>> ] [ src1>> ] bi \ ##neg new-insn ; + [ dst>> ] [ src1>> ] bi ##neg new-insn ; ! Convert ##mul-imm 2^X => ##shl-imm X : mul-to-shl? ( insn -- ? ) src2>> power-of-2? ; : mul-to-shl ( insn -- insn' ) - [ [ dst>> ] [ src1>> ] bi ] [ src2>> log2 ] bi \ ##shl-imm new-insn ; + [ [ dst>> ] [ src1>> ] bi ] [ src2>> log2 ] bi ##shl-imm new-insn ; ! Distribution converts ! ##+-imm 2 1 X @@ -145,17 +145,17 @@ M: ##mul-imm rewrite { [ dup binary-constant-fold? ] [ binary-constant-fold ] } { [ dup mul-to-neg? ] [ mul-to-neg ] } { [ dup mul-to-shl? ] [ mul-to-shl ] } - { [ dup src1>> vreg>insn ##mul-imm? ] [ \ ##mul-imm reassociate-arithmetic ] } - { [ dup distribute-over-add? ] [ \ ##add-imm \ ##mul-imm distribute ] } - { [ dup distribute-over-sub? ] [ \ ##sub-imm \ ##mul-imm distribute ] } + { [ dup src1>> vreg>insn ##mul-imm? ] [ ##mul-imm reassociate-arithmetic ] } + { [ dup distribute-over-add? ] [ \ ##add-imm, \ ##mul-imm, distribute ] } + { [ dup distribute-over-sub? ] [ \ ##sub-imm, \ ##mul-imm, distribute ] } [ drop f ] } cond ; M: ##and-imm rewrite { { [ dup binary-constant-fold? ] [ binary-constant-fold ] } - { [ dup src1>> vreg>insn ##and-imm? ] [ \ ##and-imm reassociate-bitwise ] } - { [ dup src2>> 0 = ] [ dst>> 0 \ ##load-integer new-insn ] } + { [ dup src1>> vreg>insn ##and-imm? ] [ ##and-imm reassociate-bitwise ] } + { [ dup src2>> 0 = ] [ dst>> 0 ##load-integer new-insn ] } { [ dup src2>> -1 = ] [ identity ] } [ drop f ] } cond ; @@ -163,18 +163,18 @@ M: ##and-imm rewrite M: ##or-imm rewrite { { [ dup src2>> 0 = ] [ identity ] } - { [ dup src2>> -1 = ] [ dst>> -1 \ ##load-integer new-insn ] } + { [ dup src2>> -1 = ] [ dst>> -1 ##load-integer new-insn ] } { [ dup binary-constant-fold? ] [ binary-constant-fold ] } - { [ dup src1>> vreg>insn ##or-imm? ] [ \ ##or-imm reassociate-bitwise ] } + { [ dup src1>> vreg>insn ##or-imm? ] [ ##or-imm reassociate-bitwise ] } [ drop f ] } cond ; M: ##xor-imm rewrite { { [ dup src2>> 0 = ] [ identity ] } - { [ dup src2>> -1 = ] [ [ dst>> ] [ src1>> ] bi \ ##not new-insn ] } + { [ dup src2>> -1 = ] [ [ dst>> ] [ src1>> ] bi ##not new-insn ] } { [ dup binary-constant-fold? ] [ binary-constant-fold ] } - { [ dup src1>> vreg>insn ##xor-imm? ] [ \ ##xor-imm reassociate-bitwise ] } + { [ dup src1>> vreg>insn ##xor-imm? ] [ ##xor-imm reassociate-bitwise ] } [ drop f ] } cond ; @@ -182,9 +182,9 @@ M: ##shl-imm rewrite { { [ dup src2>> 0 = ] [ identity ] } { [ dup binary-constant-fold? ] [ binary-constant-fold ] } - { [ dup src1>> vreg>insn ##shl-imm? ] [ \ ##shl-imm reassociate-shift ] } - { [ dup distribute-over-add? ] [ \ ##add-imm \ ##shl-imm distribute ] } - { [ dup distribute-over-sub? ] [ \ ##sub-imm \ ##shl-imm distribute ] } + { [ dup src1>> vreg>insn ##shl-imm? ] [ ##shl-imm reassociate-shift ] } + { [ dup distribute-over-add? ] [ \ ##add-imm, \ ##shl-imm, distribute ] } + { [ dup distribute-over-sub? ] [ \ ##sub-imm, \ ##shl-imm, distribute ] } [ drop f ] } cond ; @@ -192,7 +192,7 @@ M: ##shr-imm rewrite { { [ dup src2>> 0 = ] [ identity ] } { [ dup binary-constant-fold? ] [ binary-constant-fold ] } - { [ dup src1>> vreg>insn ##shr-imm? ] [ \ ##shr-imm reassociate-shift ] } + { [ dup src1>> vreg>insn ##shr-imm? ] [ ##shr-imm reassociate-shift ] } [ drop f ] } cond ; @@ -200,7 +200,7 @@ M: ##sar-imm rewrite { { [ dup src2>> 0 = ] [ identity ] } { [ dup binary-constant-fold? ] [ binary-constant-fold ] } - { [ dup src1>> vreg>insn ##sar-imm? ] [ \ ##sar-imm reassociate-shift ] } + { [ dup src1>> vreg>insn ##sar-imm? ] [ ##sar-imm reassociate-shift ] } [ drop f ] } cond ; @@ -217,8 +217,8 @@ M: ##sar-imm rewrite M: ##add rewrite { - { [ dup src2>> vreg-immediate-arithmetic? ] [ \ ##add-imm f insn>imm-insn ] } - { [ dup src1>> vreg-immediate-arithmetic? ] [ \ ##add-imm t insn>imm-insn ] } + { [ dup src2>> vreg-immediate-arithmetic? ] [ ##add-imm f insn>imm-insn ] } + { [ dup src1>> vreg-immediate-arithmetic? ] [ ##add-imm t insn>imm-insn ] } [ drop f ] } cond ; @@ -227,7 +227,7 @@ M: ##add rewrite ! ##sub 2 1 1 => ##load-integer 2 0 : rewrite-subtraction-identity ( insn -- insn' ) - dst>> 0 \ ##load-integer new-insn ; + dst>> 0 ##load-integer new-insn ; ! ##load-integer 1 0 ! ##sub 3 1 2 @@ -237,61 +237,61 @@ M: ##add rewrite src1>> vreg>insn zero-insn? ; : sub-to-neg ( ##sub -- insn ) - [ dst>> ] [ src2>> ] bi \ ##neg new-insn ; + [ dst>> ] [ src2>> ] bi ##neg new-insn ; M: ##sub rewrite { { [ dup sub-to-neg? ] [ sub-to-neg ] } { [ dup diagonal? ] [ rewrite-subtraction-identity ] } - { [ dup src2>> vreg-immediate-arithmetic? ] [ \ ##sub-imm f insn>imm-insn ] } + { [ dup src2>> vreg-immediate-arithmetic? ] [ ##sub-imm f insn>imm-insn ] } [ drop f ] } cond ; M: ##mul rewrite { - { [ dup src2>> vreg-immediate-arithmetic? ] [ \ ##mul-imm f insn>imm-insn ] } - { [ dup src1>> vreg-immediate-arithmetic? ] [ \ ##mul-imm t insn>imm-insn ] } + { [ dup src2>> vreg-immediate-arithmetic? ] [ ##mul-imm f insn>imm-insn ] } + { [ dup src1>> vreg-immediate-arithmetic? ] [ ##mul-imm t insn>imm-insn ] } [ drop f ] } cond ; M: ##and rewrite { { [ dup diagonal? ] [ identity ] } - { [ dup src2>> vreg-immediate-bitwise? ] [ \ ##and-imm f insn>imm-insn ] } - { [ dup src1>> vreg-immediate-bitwise? ] [ \ ##and-imm t insn>imm-insn ] } + { [ dup src2>> vreg-immediate-bitwise? ] [ ##and-imm f insn>imm-insn ] } + { [ dup src1>> vreg-immediate-bitwise? ] [ ##and-imm t insn>imm-insn ] } [ drop f ] } cond ; M: ##or rewrite { { [ dup diagonal? ] [ identity ] } - { [ dup src2>> vreg-immediate-bitwise? ] [ \ ##or-imm f insn>imm-insn ] } - { [ dup src1>> vreg-immediate-bitwise? ] [ \ ##or-imm t insn>imm-insn ] } + { [ dup src2>> vreg-immediate-bitwise? ] [ ##or-imm f insn>imm-insn ] } + { [ dup src1>> vreg-immediate-bitwise? ] [ ##or-imm t insn>imm-insn ] } [ drop f ] } cond ; M: ##xor rewrite { - { [ dup diagonal? ] [ dst>> 0 \ ##load-integer new-insn ] } - { [ dup src2>> vreg-immediate-bitwise? ] [ \ ##xor-imm f insn>imm-insn ] } - { [ dup src1>> vreg-immediate-bitwise? ] [ \ ##xor-imm t insn>imm-insn ] } + { [ dup diagonal? ] [ dst>> 0 ##load-integer new-insn ] } + { [ dup src2>> vreg-immediate-bitwise? ] [ ##xor-imm f insn>imm-insn ] } + { [ dup src1>> vreg-immediate-bitwise? ] [ ##xor-imm t insn>imm-insn ] } [ drop f ] } cond ; M: ##shl rewrite { - { [ dup src2>> vreg-immediate-bitwise? ] [ \ ##shl-imm f insn>imm-insn ] } + { [ dup src2>> vreg-immediate-bitwise? ] [ ##shl-imm f insn>imm-insn ] } [ drop f ] } cond ; M: ##shr rewrite { - { [ dup src2>> vreg-immediate-bitwise? ] [ \ ##shr-imm f insn>imm-insn ] } + { [ dup src2>> vreg-immediate-bitwise? ] [ ##shr-imm f insn>imm-insn ] } [ drop f ] } cond ; M: ##sar rewrite { - { [ dup src2>> vreg-immediate-bitwise? ] [ \ ##sar-imm f insn>imm-insn ] } + { [ dup src2>> vreg-immediate-bitwise? ] [ ##sar-imm f insn>imm-insn ] } [ drop f ] } cond ; diff --git a/extra/compiler/cfg/gvn/misc/misc.factor b/extra/compiler/cfg/gvn/misc/misc.factor index c55778799c..66f1dd2d52 100644 --- a/extra/compiler/cfg/gvn/misc/misc.factor +++ b/extra/compiler/cfg/gvn/misc/misc.factor @@ -11,5 +11,5 @@ M: ##replace rewrite [ loc>> ] [ src>> vreg>insn ] bi dup literal-insn? [ insn>literal dup immediate-store? - [ swap \ ##replace-imm new-insn ] [ 2drop f ] if + [ swap ##replace-imm new-insn ] [ 2drop f ] if ] [ 2drop f ] if ; diff --git a/extra/compiler/cfg/gvn/simd/simd.factor b/extra/compiler/cfg/gvn/simd/simd.factor index 36c63e65f6..17fa4f355a 100644 --- a/extra/compiler/cfg/gvn/simd/simd.factor +++ b/extra/compiler/cfg/gvn/simd/simd.factor @@ -3,7 +3,7 @@ USING: accessors combinators combinators.short-circuit arrays fry kernel layouts math namespaces sequences cpu.architecture math.bitwise math.order classes generalizations -combinators.smart locals make alien.c-types io.binary grouping +locals make alien.c-types io.binary grouping math.vectors.simd.intrinsics compiler.cfg compiler.cfg.registers @@ -27,7 +27,7 @@ IN: compiler.cfg.gvn.simd [ [ dst>> ] [ src>> ] bi* ] [ [ shuffle>> ] bi@ nths ] [ drop rep>> ] - 2tri \ ##shuffle-vector-imm new-insn + 2tri ##shuffle-vector-imm new-insn ] [ 2drop f ] if ; : (fold-shuffle-vector-imm) ( shuffle bytes -- bytes' ) @@ -35,7 +35,7 @@ IN: compiler.cfg.gvn.simd : fold-shuffle-vector-imm ( outer inner -- insn' ) [ [ dst>> ] [ shuffle>> ] bi ] [ obj>> ] bi* - (fold-shuffle-vector-imm) \ ##load-reference new-insn ; + (fold-shuffle-vector-imm) ##load-reference new-insn ; M: ##shuffle-vector-imm rewrite dup src>> vreg>insn { @@ -54,7 +54,7 @@ M: ##shuffle-vector-imm rewrite : (fold-scalar>vector) ( insn bytes -- insn' ) [ [ dst>> ] [ rep>> rep-length ] bi ] dip concat - \ ##load-reference new-insn ; + ##load-reference new-insn ; : fold-scalar>vector ( outer inner -- insn' ) over rep>> scalar-value (fold-scalar>vector) ; @@ -69,7 +69,7 @@ M: ##scalar>vector rewrite :: fold-gather-vector-2 ( insn src1 src2 -- insn ) insn dst>> src1 src2 [ insn rep>> scalar-value ] bi@ append - \ ##load-reference new-insn ; + ##load-reference new-insn ; : rewrite-gather-vector-2 ( insn -- insn/f ) dup [ src1>> vreg>insn ] [ src2>> vreg>insn ] bi { @@ -85,9 +85,9 @@ M: ##gather-int-vector-2 rewrite rewrite-gather-vector-2 ; insn dst>> [ src1 src2 src3 src4 - [ insn rep>> scalar-value ] 4 napply - ] B{ } append-outputs-as - \ ##load-reference new-insn ; + [ insn rep>> scalar-value % ] 4 napply + ] B{ } make + ##load-reference new-insn ; : rewrite-gather-vector-4 ( insn -- insn/f ) dup { [ src1>> ] [ src2>> ] [ src3>> ] [ src4>> ] } cleave [ vreg>insn ] 4 napply @@ -102,7 +102,7 @@ M: ##gather-int-vector-4 rewrite rewrite-gather-vector-4 ; : fold-shuffle-vector ( insn src1 src2 -- insn ) [ dst>> ] [ obj>> ] [ obj>> ] tri* - swap nths \ ##load-reference new-insn ; + swap nths ##load-reference new-insn ; M: ##shuffle-vector rewrite dup [ src>> vreg>insn ] [ shuffle>> vreg>insn ] bi @@ -113,7 +113,7 @@ M: ##shuffle-vector rewrite M: ##xor-vector rewrite dup diagonal? - [ [ dst>> ] [ rep>> ] bi \ ##zero-vector new-insn ] [ drop f ] if ; + [ [ dst>> ] [ rep>> ] bi ##zero-vector new-insn ] [ drop f ] if ; : vector-not? ( insn -- ? ) { @@ -140,7 +140,7 @@ M: ##and-vector rewrite [ src1>> vreg>insn vector-not-src ] [ src2>> ] [ rep>> ] - } cleave \ ##andn-vector new-insn + } cleave ##andn-vector new-insn ] } { [ dup src2>> vreg>insn vector-not? ] [ { @@ -148,7 +148,7 @@ M: ##and-vector rewrite [ src2>> vreg>insn vector-not-src ] [ src1>> ] [ rep>> ] - } cleave \ ##andn-vector new-insn + } cleave ##andn-vector new-insn ] } [ drop f ] } cond ; @@ -160,5 +160,5 @@ M: ##andn-vector rewrite [ src1>> vreg>insn vector-not-src ] [ src2>> ] [ rep>> ] - } cleave \ ##and-vector new-insn + } cleave ##and-vector new-insn ] [ drop f ] if ;