diff --git a/basis/compiler/cfg/linear-scan/allocation/splitting/splitting-tests.factor b/basis/compiler/cfg/linear-scan/allocation/splitting/splitting-tests.factor index 767eea8e2f..12010e9fa4 100644 --- a/basis/compiler/cfg/linear-scan/allocation/splitting/splitting-tests.factor +++ b/basis/compiler/cfg/linear-scan/allocation/splitting/splitting-tests.factor @@ -18,30 +18,35 @@ IN: compiler.cfg.linear-scan.allocation.splitting.tests { T{ live-interval-state { ranges { { 5 8 } } } - { uses - 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 } } - } } - } - } + { uses { T{ vreg-use { n 3 } { def-rep int-rep } } } } } T{ live-interval-state { ranges { { 12 20 } } } - { uses - 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 } } - } } - } - } + { uses { T{ vreg-use { n 15 } { def-rep int-rep } } } } } } [ test-interval-easy 10 split-interval ] 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 diff --git a/basis/compiler/cfg/linear-scan/allocation/splitting/splitting.factor b/basis/compiler/cfg/linear-scan/allocation/splitting/splitting.factor index e2d6ec3aa3..4d30f24753 100644 --- a/basis/compiler/cfg/linear-scan/allocation/splitting/splitting.factor +++ b/basis/compiler/cfg/linear-scan/allocation/splitting/splitting.factor @@ -7,13 +7,8 @@ compiler.cfg.linear-scan.ranges fry hints kernel locals math math.order namespaces sequences ; IN: compiler.cfg.linear-scan.allocation.splitting -:: split-uses ( uses n -- before after ) - uses n uses [ n>> <=> ] with search - n>> n <=> { - { +eq+ [ [ head-slice ] [ 1 + tail-slice ] 2bi ] } - { +lt+ [ 1 + cut-slice ] } - { +gt+ [ cut-slice ] } - } case ; +: split-uses ( uses n -- before after ) + [ '[ n>> _ < ] filter ] [ '[ n>> _ > ] filter ] 2bi ; ERROR: splitting-too-early ;