diff --git a/basis/compiler/cfg/value-numbering/alien/alien.factor b/basis/compiler/cfg/value-numbering/alien/alien.factor index 8b508550b4..190d911ad5 100644 --- a/basis/compiler/cfg/value-numbering/alien/alien.factor +++ b/basis/compiler/cfg/value-numbering/alien/alien.factor @@ -9,8 +9,7 @@ compiler.cfg.registers compiler.cfg.instructions compiler.cfg.value-numbering.math compiler.cfg.value-numbering.graph -compiler.cfg.value-numbering.rewrite -compiler.cfg.value-numbering.expressions ; +compiler.cfg.value-numbering.rewrite ; IN: compiler.cfg.value-numbering.alien M: ##box-displaced-alien rewrite diff --git a/basis/compiler/cfg/value-numbering/comparisons/comparisons.factor b/basis/compiler/cfg/value-numbering/comparisons/comparisons.factor index d9af124f30..63ac3575ef 100644 --- a/basis/compiler/cfg/value-numbering/comparisons/comparisons.factor +++ b/basis/compiler/cfg/value-numbering/comparisons/comparisons.factor @@ -6,8 +6,7 @@ compiler.cfg.comparisons compiler.cfg.instructions compiler.cfg.registers compiler.cfg.value-numbering.math compiler.cfg.value-numbering.graph -compiler.cfg.value-numbering.rewrite -compiler.cfg.value-numbering.expressions ; +compiler.cfg.value-numbering.rewrite ; IN: compiler.cfg.value-numbering.comparisons ! Optimizations performed here: diff --git a/basis/compiler/cfg/value-numbering/expressions/expressions.factor b/basis/compiler/cfg/value-numbering/expressions/expressions.factor index 087aedf50d..46e5a09907 100644 --- a/basis/compiler/cfg/value-numbering/expressions/expressions.factor +++ b/basis/compiler/cfg/value-numbering/expressions/expressions.factor @@ -1,10 +1,8 @@ ! Copyright (C) 2008, 2010 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors arrays classes classes.algebra classes.parser -classes.tuple combinators combinators.short-circuit fry -generic.parser kernel layouts math namespaces quotations -sequences slots splitting words make -cpu.architecture +USING: accessors arrays classes classes.algebra combinators fry +generic.parser kernel math namespaces quotations sequences slots +words make compiler.cfg.instructions compiler.cfg.instructions.syntax compiler.cfg.value-numbering.graph ; @@ -84,36 +82,3 @@ M: ##copy >expr "Fail" throw ; M: ##load-integer >expr val>> <integer-expr> ; M: ##load-reference >expr obj>> <reference-expr> ; - -GENERIC: insn>integer ( insn -- n ) - -M: ##load-integer insn>integer val>> ; - -: vreg>integer ( vreg -- n ) vreg>insn insn>integer ; inline - -: vreg-immediate-arithmetic? ( vreg -- ? ) - vreg>insn { - [ ##load-integer? ] - [ val>> immediate-arithmetic? ] - } 1&& ; - -: vreg-immediate-bitwise? ( vreg -- ? ) - vreg>insn { - [ ##load-integer? ] - [ val>> immediate-bitwise? ] - } 1&& ; - -GENERIC: insn>comparand ( expr -- n ) - -M: ##load-integer insn>comparand val>> tag-fixnum ; - -M: ##load-reference insn>comparand obj>> ; - -: vreg>comparand ( vreg -- n ) vreg>insn insn>comparand ; inline - -: vreg-immediate-comparand? ( vreg -- ? ) - vreg>insn { - { [ dup ##load-integer? ] [ val>> tag-fixnum immediate-comparand? ] } - { [ dup ##load-reference? ] [ obj>> immediate-comparand? ] } - [ drop f ] - } cond ; diff --git a/basis/compiler/cfg/value-numbering/folding/folding.factor b/basis/compiler/cfg/value-numbering/folding/folding.factor index 6e70e3f80f..4d79ed5655 100644 --- a/basis/compiler/cfg/value-numbering/folding/folding.factor +++ b/basis/compiler/cfg/value-numbering/folding/folding.factor @@ -2,8 +2,8 @@ ! See http://factorcode.org/license.txt for BSD license. USING: accessors kernel layouts math math.bitwise compiler.cfg.instructions -compiler.cfg.value-numbering.expressions -compiler.cfg.value-numbering.graph ; +compiler.cfg.value-numbering.graph +compiler.cfg.value-numbering.rewrite ; IN: compiler.cfg.value-numbering.folding : binary-constant-fold? ( insn -- ? ) diff --git a/basis/compiler/cfg/value-numbering/math/math.factor b/basis/compiler/cfg/value-numbering/math/math.factor index 557fce7d50..c2f63692ac 100644 --- a/basis/compiler/cfg/value-numbering/math/math.factor +++ b/basis/compiler/cfg/value-numbering/math/math.factor @@ -5,7 +5,6 @@ cpu.architecture fry kernel layouts locals make math sequences compiler.cfg.instructions compiler.cfg.registers compiler.cfg.utilities -compiler.cfg.value-numbering.expressions compiler.cfg.value-numbering.folding compiler.cfg.value-numbering.graph compiler.cfg.value-numbering.rewrite ; diff --git a/basis/compiler/cfg/value-numbering/rewrite/rewrite.factor b/basis/compiler/cfg/value-numbering/rewrite/rewrite.factor index dc34f2dcd8..1e2327d765 100644 --- a/basis/compiler/cfg/value-numbering/rewrite/rewrite.factor +++ b/basis/compiler/cfg/value-numbering/rewrite/rewrite.factor @@ -1,9 +1,46 @@ ! Copyright (C) 2010 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel compiler.cfg.instructions ; +USING: accessors combinators combinators.short-circuit kernel layouts +cpu.architecture +compiler.cfg.instructions +compiler.cfg.value-numbering.graph ; IN: compiler.cfg.value-numbering.rewrite ! Outputs f to mean no change GENERIC: rewrite ( insn -- insn/f ) M: insn rewrite drop f ; + +! Utilities +GENERIC: insn>integer ( insn -- n ) + +M: ##load-integer insn>integer val>> ; + +: vreg>integer ( vreg -- n ) vreg>insn insn>integer ; inline + +: vreg-immediate-arithmetic? ( vreg -- ? ) + vreg>insn { + [ ##load-integer? ] + [ val>> immediate-arithmetic? ] + } 1&& ; + +: vreg-immediate-bitwise? ( vreg -- ? ) + vreg>insn { + [ ##load-integer? ] + [ val>> immediate-bitwise? ] + } 1&& ; + +GENERIC: insn>comparand ( expr -- n ) + +M: ##load-integer insn>comparand val>> tag-fixnum ; + +M: ##load-reference insn>comparand obj>> ; + +: vreg>comparand ( vreg -- n ) vreg>insn insn>comparand ; inline + +: vreg-immediate-comparand? ( vreg -- ? ) + vreg>insn { + { [ dup ##load-integer? ] [ val>> tag-fixnum immediate-comparand? ] } + { [ dup ##load-reference? ] [ obj>> immediate-comparand? ] } + [ drop f ] + } cond ; diff --git a/basis/compiler/cfg/value-numbering/simd/simd.factor b/basis/compiler/cfg/value-numbering/simd/simd.factor index 4aabfd3d9a..1983c07190 100644 --- a/basis/compiler/cfg/value-numbering/simd/simd.factor +++ b/basis/compiler/cfg/value-numbering/simd/simd.factor @@ -12,7 +12,6 @@ compiler.cfg.comparisons compiler.cfg.instructions compiler.cfg.value-numbering.math compiler.cfg.value-numbering.graph -compiler.cfg.value-numbering.expressions compiler.cfg.value-numbering.rewrite ; IN: compiler.cfg.value-numbering.simd diff --git a/basis/compiler/cfg/value-numbering/slots/slots.factor b/basis/compiler/cfg/value-numbering/slots/slots.factor index 8733e5f6e9..7c2b562a84 100644 --- a/basis/compiler/cfg/value-numbering/slots/slots.factor +++ b/basis/compiler/cfg/value-numbering/slots/slots.factor @@ -4,8 +4,7 @@ USING: accessors combinators.short-circuit cpu.architecture fry kernel math compiler.cfg.instructions compiler.cfg.value-numbering.graph -compiler.cfg.value-numbering.rewrite -compiler.cfg.value-numbering.expressions ; +compiler.cfg.value-numbering.rewrite ; IN: compiler.cfg.value-numbering.slots : simplify-slot-addressing? ( insn -- ? ) diff --git a/basis/compiler/cfg/value-numbering/value-numbering.factor b/basis/compiler/cfg/value-numbering/value-numbering.factor index 01b095fbd7..ad3ccb1693 100644 --- a/basis/compiler/cfg/value-numbering/value-numbering.factor +++ b/basis/compiler/cfg/value-numbering/value-numbering.factor @@ -11,11 +11,11 @@ compiler.cfg.utilities compiler.cfg.instructions compiler.cfg.value-numbering.alien compiler.cfg.value-numbering.comparisons -compiler.cfg.value-numbering.expressions compiler.cfg.value-numbering.graph compiler.cfg.value-numbering.math compiler.cfg.value-numbering.rewrite -compiler.cfg.value-numbering.slots ; +compiler.cfg.value-numbering.slots +compiler.cfg.value-numbering.expressions ; IN: compiler.cfg.value-numbering GENERIC: process-instruction ( insn -- insn' )