Fixing local optimizations
parent
f3688c9373
commit
117cb78d6b
|
@ -48,8 +48,8 @@ M: insn normalize-height* ;
|
||||||
0 rs-height set
|
0 rs-height set
|
||||||
[ [ compute-heights ] each ]
|
[ [ compute-heights ] each ]
|
||||||
[ [ [ normalize-height* ] map sift ] with-scope ] bi
|
[ [ [ normalize-height* ] map sift ] with-scope ] bi
|
||||||
ds-height get dup zero? [ drop ] [ f \ ##inc-d boa prefix ] if
|
ds-height get dup 0 = [ drop ] [ f \ ##inc-d boa prefix ] if
|
||||||
rs-height get dup zero? [ drop ] [ f \ ##inc-r boa prefix ] if ;
|
rs-height get dup 0 = [ drop ] [ f \ ##inc-r boa prefix ] if ;
|
||||||
|
|
||||||
: normalize-height ( rpo -- )
|
: normalize-height ( rpo -- )
|
||||||
[ ] [ height-step ] local-optimization ;
|
[ drop ] [ height-step ] local-optimization ;
|
||||||
|
|
|
@ -31,7 +31,7 @@ SYMBOL: visited
|
||||||
[ reverse-post-order ] dip each ; inline
|
[ reverse-post-order ] dip each ; inline
|
||||||
|
|
||||||
: optimize-basic-block ( bb init-quot insn-quot -- )
|
: optimize-basic-block ( bb init-quot insn-quot -- )
|
||||||
[ '[ live-in keys _ each ] ] [ '[ _ change-instructions drop ] ] bi* bi ; inline
|
[ '[ live-in keys _ call ] ] [ '[ _ change-instructions drop ] ] bi* bi ; inline
|
||||||
|
|
||||||
: local-optimization ( rpo init-quot: ( live-in -- ) insn-quot: ( insns -- insns' ) -- )
|
: local-optimization ( rpo init-quot: ( live-in -- ) insn-quot: ( insns -- insns' ) -- )
|
||||||
'[ _ _ optimize-basic-block ] each ;
|
'[ _ _ optimize-basic-block ] each ;
|
|
@ -14,8 +14,8 @@ sequences compiler.cfg vectors arrays ;
|
||||||
] map ;
|
] map ;
|
||||||
|
|
||||||
: test-value-numbering ( insns -- insns )
|
: test-value-numbering ( insns -- insns )
|
||||||
basic-block new swap >vector >>instructions
|
{ } init-value-numbering
|
||||||
dup value-numbering-step instructions>> >array ;
|
value-numbering-step ;
|
||||||
|
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
|
@ -156,3 +156,16 @@ sequences compiler.cfg vectors arrays ;
|
||||||
T{ ##compare-imm-branch f V int-regs 33 5 cc/= }
|
T{ ##compare-imm-branch f V int-regs 33 5 cc/= }
|
||||||
} test-value-numbering trim-temps
|
} test-value-numbering trim-temps
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
[
|
||||||
|
{
|
||||||
|
T{ ##copy f V int-regs 48 V int-regs 45 }
|
||||||
|
T{ ##compare-imm-branch f V int-regs 45 7 cc/= }
|
||||||
|
}
|
||||||
|
] [
|
||||||
|
{ V int-regs 45 } init-value-numbering
|
||||||
|
{
|
||||||
|
T{ ##copy f V int-regs 48 V int-regs 45 }
|
||||||
|
T{ ##compare-imm-branch f V int-regs 48 7 cc/= }
|
||||||
|
} value-numbering-step
|
||||||
|
] unit-test
|
||||||
|
|
|
@ -11,7 +11,7 @@ compiler.cfg.value-numbering.rewrite ;
|
||||||
IN: compiler.cfg.value-numbering
|
IN: compiler.cfg.value-numbering
|
||||||
|
|
||||||
: number-input-values ( live-in -- )
|
: number-input-values ( live-in -- )
|
||||||
[ [ f next-input-expr ] dip set-vn ] each ;
|
[ [ f next-input-expr simplify ] dip set-vn ] each ;
|
||||||
|
|
||||||
: init-value-numbering ( live-in -- )
|
: init-value-numbering ( live-in -- )
|
||||||
init-value-graph
|
init-value-graph
|
||||||
|
|
|
@ -4,8 +4,7 @@ arrays tools.test vectors compiler.cfg kernel accessors ;
|
||||||
IN: compiler.cfg.write-barrier.tests
|
IN: compiler.cfg.write-barrier.tests
|
||||||
|
|
||||||
: test-write-barrier ( insns -- insns )
|
: test-write-barrier ( insns -- insns )
|
||||||
basic-block new swap >vector >>instructions
|
write-barriers-step ;
|
||||||
dup write-barriers-step instructions>> >array ;
|
|
||||||
|
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
|
|
|
@ -43,4 +43,4 @@ M: insn eliminate-write-barrier ;
|
||||||
[ eliminate-write-barrier ] map sift ;
|
[ eliminate-write-barrier ] map sift ;
|
||||||
|
|
||||||
: eliminate-write-barriers ( rpo -- )
|
: eliminate-write-barriers ( rpo -- )
|
||||||
[ ] [ write-barriers-step ] local-optimization ;
|
[ drop ] [ write-barriers-step ] local-optimization ;
|
||||||
|
|
Loading…
Reference in New Issue