compiler.cfg.value-numbering: add slot addressing rewrite rule to eliminate a redundant ##add-imm from array-nth and set-array-nth
parent
2475699736
commit
b8d556514c
|
@ -0,0 +1 @@
|
||||||
|
Slava Pestov
|
|
@ -0,0 +1,25 @@
|
||||||
|
! Copyright (C) 2010 Slava Pestov.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
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 ;
|
||||||
|
IN: compiler.cfg.value-numbering.slots
|
||||||
|
|
||||||
|
: simplify-slot-addressing? ( insn -- ? )
|
||||||
|
complex-addressing?
|
||||||
|
[ slot>> vreg>expr add-imm-expr? ] [ drop f ] if ;
|
||||||
|
|
||||||
|
: simplify-slot-addressing ( insn -- insn/f )
|
||||||
|
dup simplify-slot-addressing? [
|
||||||
|
dup slot>> vreg>expr
|
||||||
|
[ src1>> vn>vreg >>slot ]
|
||||||
|
[ src2>> vn>integer over scale>> '[ _ _ shift - ] change-tag ]
|
||||||
|
bi
|
||||||
|
] [ drop f ] if ;
|
||||||
|
|
||||||
|
M: ##slot rewrite simplify-slot-addressing ;
|
||||||
|
M: ##set-slot rewrite simplify-slot-addressing ;
|
||||||
|
M: ##write-barrier rewrite simplify-slot-addressing ;
|
|
@ -2209,6 +2209,25 @@ V{
|
||||||
|
|
||||||
[ f ] [ 1 get instructions>> [ ##peek? ] any? ] unit-test
|
[ f ] [ 1 get instructions>> [ ##peek? ] any? ] unit-test
|
||||||
|
|
||||||
|
! Slot addressing optimization
|
||||||
|
cpu x86? [
|
||||||
|
[
|
||||||
|
V{
|
||||||
|
T{ ##peek f 0 D 0 }
|
||||||
|
T{ ##peek f 1 D 1 }
|
||||||
|
T{ ##add-imm f 2 1 2 }
|
||||||
|
T{ ##slot f 3 0 1 2 $[ 7 2 cells - ] }
|
||||||
|
}
|
||||||
|
] [
|
||||||
|
V{
|
||||||
|
T{ ##peek f 0 D 0 }
|
||||||
|
T{ ##peek f 1 D 1 }
|
||||||
|
T{ ##add-imm f 2 1 2 }
|
||||||
|
T{ ##slot f 3 0 2 2 7 }
|
||||||
|
} value-numbering-step
|
||||||
|
] unit-test
|
||||||
|
] when
|
||||||
|
|
||||||
! Alien addressing optimization
|
! Alien addressing optimization
|
||||||
[
|
[
|
||||||
V{
|
V{
|
||||||
|
|
|
@ -14,7 +14,8 @@ compiler.cfg.value-numbering.expressions
|
||||||
compiler.cfg.value-numbering.graph
|
compiler.cfg.value-numbering.graph
|
||||||
compiler.cfg.value-numbering.math
|
compiler.cfg.value-numbering.math
|
||||||
compiler.cfg.value-numbering.rewrite
|
compiler.cfg.value-numbering.rewrite
|
||||||
compiler.cfg.value-numbering.simplify ;
|
compiler.cfg.value-numbering.simplify
|
||||||
|
compiler.cfg.value-numbering.slots ;
|
||||||
IN: compiler.cfg.value-numbering
|
IN: compiler.cfg.value-numbering
|
||||||
|
|
||||||
! Local value numbering.
|
! Local value numbering.
|
||||||
|
|
Loading…
Reference in New Issue