diff --git a/basis/compiler/cfg/linear-scan/live-intervals/live-intervals-tests.factor b/basis/compiler/cfg/linear-scan/live-intervals/live-intervals-tests.factor index 8a998d9f6c..a97c4274e0 100644 --- a/basis/compiler/cfg/linear-scan/live-intervals/live-intervals-tests.factor +++ b/basis/compiler/cfg/linear-scan/live-intervals/live-intervals-tests.factor @@ -70,23 +70,3 @@ IN: compiler.cfg.linear-scan.live-intervals.tests [ H{ { 4 4 } { 8 8 } { 9 9 } } 2array 1array live-outs set ] [ handle-live-out ] bi live-intervals get ] unit-test - -! relevant-ranges -{ - V{ T{ live-range { from 0 } { to 10 } } } - V{ T{ live-range { from 5 } { to 10 } } } -} [ - T{ live-interval-state - { start 0 } - { end 10 } - { uses { 0 10 } } - { ranges V{ T{ live-range f 0 10 } } } - } - T{ live-interval-state - { start 5 } - { end 10 } - { uses { 5 10 } } - { ranges V{ T{ live-range f 5 10 } } } - } - relevant-ranges -] unit-test diff --git a/basis/compiler/cfg/linear-scan/live-intervals/live-intervals.factor b/basis/compiler/cfg/linear-scan/live-intervals/live-intervals.factor index 7079bd3af7..2951844a41 100644 --- a/basis/compiler/cfg/linear-scan/live-intervals/live-intervals.factor +++ b/basis/compiler/cfg/linear-scan/live-intervals/live-intervals.factor @@ -131,8 +131,7 @@ M: hairy-clobber-insn compute-live-intervals* ( insn -- ) } cleave ; : compute-start/end ( live-interval -- ) - dup ranges>> [ first from>> ] [ last to>> ] bi - [ >>start ] [ >>end ] bi* drop ; + dup ranges>> ranges-endpoints [ >>start ] [ >>end ] bi* drop ; ERROR: bad-live-interval live-interval ; @@ -174,11 +173,8 @@ M: insn insn>sync-point drop f ; : compute-live-intervals ( cfg -- intervals/sync-points ) [ cfg>live-intervals ] [ cfg>sync-points ] bi append ; -: relevant-ranges ( interval1 interval2 -- ranges1 ranges2 ) - [ [ ranges>> ] bi@ ] [ nip start>> ] 2bi '[ to>> _ >= ] filter ; - : intersect-intervals ( interval1 interval2 -- n/f ) - relevant-ranges intersect-ranges ; + [ ranges>> ] bi@ intersect-ranges ; : intervals-intersect? ( interval1 interval2 -- ? ) intersect-intervals >boolean ; inline diff --git a/basis/compiler/cfg/linear-scan/ranges/ranges-tests.factor b/basis/compiler/cfg/linear-scan/ranges/ranges-tests.factor index 7284ccfec4..0139f0312f 100644 --- a/basis/compiler/cfg/linear-scan/ranges/ranges-tests.factor +++ b/basis/compiler/cfg/linear-scan/ranges/ranges-tests.factor @@ -198,3 +198,11 @@ IN: compiler.cfg.linear-scan.ranges.tests } [ 20 { T{ live-range { from 0 } { to 40 } } } fix-upper-bound ] unit-test + +! ranges-endpoints +{ 0 40 } [ + V{ + T{ live-range { from 0 } { to 10 } } + T{ live-range { from 30 } { to 40 } } + } ranges-endpoints +] unit-test diff --git a/basis/compiler/cfg/linear-scan/ranges/ranges.factor b/basis/compiler/cfg/linear-scan/ranges/ranges.factor index f10f21d78f..d108e85344 100644 --- a/basis/compiler/cfg/linear-scan/ranges/ranges.factor +++ b/basis/compiler/cfg/linear-scan/ranges/ranges.factor @@ -62,3 +62,6 @@ C: live-range : fix-upper-bound ( n ranges -- ranges' ) over '[ from>> _ <= ] filter [ last to<< ] keep ; + +: ranges-endpoints ( ranges -- start end ) + [ first from>> ] [ last to>> ] bi ;