compiler.cfg.linear-scan.ranges: new word ranges-endpoints and remove relevant-ranges

db4
Björn Lindqvist 2015-09-15 20:47:50 +02:00
parent 8c781639ed
commit 2943e7f246
4 changed files with 13 additions and 26 deletions

View File

@ -70,23 +70,3 @@ IN: compiler.cfg.linear-scan.live-intervals.tests
<basic-block> [ 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

View File

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

View File

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

View File

@ -62,3 +62,6 @@ C: <live-range> live-range
: fix-upper-bound ( n ranges -- ranges' )
over '[ from>> _ <= ] filter [ last to<< ] keep ;
: ranges-endpoints ( ranges -- start end )
[ first from>> ] [ last to>> ] bi ;