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