compiler.cfg.linear-scan.allocation.splitting: better def for split-uses
it seems to be just as fast as the wordier onedb4
parent
ea67379751
commit
86d35982ac
|
@ -18,30 +18,35 @@ IN: compiler.cfg.linear-scan.allocation.splitting.tests
|
||||||
{
|
{
|
||||||
T{ live-interval-state
|
T{ live-interval-state
|
||||||
{ ranges { { 5 8 } } }
|
{ ranges { { 5 8 } } }
|
||||||
{ uses
|
{ uses { T{ vreg-use { n 3 } { def-rep int-rep } } } }
|
||||||
T{ slice
|
|
||||||
{ from 0 }
|
|
||||||
{ to 1 }
|
|
||||||
{ seq {
|
|
||||||
T{ vreg-use { n 3 } { def-rep int-rep } }
|
|
||||||
T{ vreg-use { n 15 } { def-rep int-rep } }
|
|
||||||
} }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
T{ live-interval-state
|
T{ live-interval-state
|
||||||
{ ranges { { 12 20 } } }
|
{ ranges { { 12 20 } } }
|
||||||
{ uses
|
{ uses { T{ vreg-use { n 15 } { def-rep int-rep } } } }
|
||||||
T{ slice
|
|
||||||
{ from 1 }
|
|
||||||
{ to 2 }
|
|
||||||
{ seq {
|
|
||||||
T{ vreg-use { n 3 } { def-rep int-rep } }
|
|
||||||
T{ vreg-use { n 15 } { def-rep int-rep } }
|
|
||||||
} }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} [
|
} [
|
||||||
test-interval-easy 10 split-interval
|
test-interval-easy 10 split-interval
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
! split-uses
|
||||||
|
{
|
||||||
|
{ T{ vreg-use { n 3 } } }
|
||||||
|
{ T{ vreg-use { n 9 } } }
|
||||||
|
} [
|
||||||
|
{ T{ vreg-use { n 3 } } T{ vreg-use { n 9 } } } 6 split-uses
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
{
|
||||||
|
{ T{ vreg-use { n 10 } } T{ vreg-use { n 10 } } } { }
|
||||||
|
} [
|
||||||
|
{ T{ vreg-use { n 10 } } T{ vreg-use { n 10 } } } 12 split-uses
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
! This one is strange. Why is the middle one removed?
|
||||||
|
{
|
||||||
|
{ T{ vreg-use { n 3 } } }
|
||||||
|
{ T{ vreg-use { n 5 } } }
|
||||||
|
} [
|
||||||
|
{ T{ vreg-use { n 3 } } T{ vreg-use { n 4 } } T{ vreg-use { n 5 } } }
|
||||||
|
4 split-uses
|
||||||
|
] unit-test
|
||||||
|
|
|
@ -7,13 +7,8 @@ compiler.cfg.linear-scan.ranges fry hints kernel locals math math.order
|
||||||
namespaces sequences ;
|
namespaces sequences ;
|
||||||
IN: compiler.cfg.linear-scan.allocation.splitting
|
IN: compiler.cfg.linear-scan.allocation.splitting
|
||||||
|
|
||||||
:: split-uses ( uses n -- before after )
|
: split-uses ( uses n -- before after )
|
||||||
uses n uses [ n>> <=> ] with search
|
[ '[ n>> _ < ] filter ] [ '[ n>> _ > ] filter ] 2bi ;
|
||||||
n>> n <=> {
|
|
||||||
{ +eq+ [ [ head-slice ] [ 1 + tail-slice ] 2bi ] }
|
|
||||||
{ +lt+ [ 1 + cut-slice ] }
|
|
||||||
{ +gt+ [ cut-slice ] }
|
|
||||||
} case ;
|
|
||||||
|
|
||||||
ERROR: splitting-too-early ;
|
ERROR: splitting-too-early ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue