Fixing local optimizations

db4
Slava Pestov 2009-05-27 18:58:41 -05:00
parent f3688c9373
commit 117cb78d6b
6 changed files with 22 additions and 10 deletions

View File

@ -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 ;

View File

@ -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 ;

View File

@ -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

View File

@ -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

View File

@ -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 ;
[
{

View File

@ -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 ;