compiler.cfg.linear-scan.assignment: refactoring vreg>reg and
assign-registers-in-block so locals aren't neededdb4
parent
135d7f5ff3
commit
2077ae9180
|
@ -5,7 +5,7 @@ compiler.cfg.linearization compiler.cfg.liveness compiler.cfg.registers
|
||||||
compiler.cfg.instructions compiler.cfg.linear-scan.allocation.state
|
compiler.cfg.instructions compiler.cfg.linear-scan.allocation.state
|
||||||
compiler.cfg.linear-scan.live-intervals compiler.cfg.renaming.functor
|
compiler.cfg.linear-scan.live-intervals compiler.cfg.renaming.functor
|
||||||
compiler.cfg.ssa.destruction.leaders cpu.architecture
|
compiler.cfg.ssa.destruction.leaders cpu.architecture
|
||||||
fry heaps kernel locals make math namespaces sequences sets ;
|
fry heaps kernel make math namespaces sequences sets ;
|
||||||
FROM: namespaces => set ;
|
FROM: namespaces => set ;
|
||||||
IN: compiler.cfg.linear-scan.assignment
|
IN: compiler.cfg.linear-scan.assignment
|
||||||
|
|
||||||
|
@ -22,11 +22,9 @@ SYMBOL: pending-interval-assoc
|
||||||
: remove-pending ( live-interval -- )
|
: remove-pending ( live-interval -- )
|
||||||
vreg>> pending-interval-assoc get delete-at ;
|
vreg>> pending-interval-assoc get delete-at ;
|
||||||
|
|
||||||
:: vreg>reg ( vreg -- reg/spill-slot )
|
: vreg>reg ( vreg -- reg/spill-slot )
|
||||||
vreg leader :> leader
|
dup leader dup pending-interval-assoc get at
|
||||||
leader pending-interval-assoc get at* [
|
[ 2nip ] [ swap rep-of lookup-spill-slot ] if* ;
|
||||||
drop leader vreg rep-of lookup-spill-slot
|
|
||||||
] unless ;
|
|
||||||
|
|
||||||
ERROR: not-spilled-error vreg ;
|
ERROR: not-spilled-error vreg ;
|
||||||
|
|
||||||
|
@ -124,9 +122,9 @@ M: insn assign-registers-in-insn drop ;
|
||||||
[ compute-live-in ]
|
[ compute-live-in ]
|
||||||
} cleave ;
|
} cleave ;
|
||||||
|
|
||||||
:: assign-registers-in-block ( bb -- )
|
: assign-registers-in-block ( bb -- )
|
||||||
bb begin-block
|
dup begin-block
|
||||||
bb [
|
[
|
||||||
[
|
[
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
|
@ -137,9 +135,7 @@ M: insn assign-registers-in-insn drop ;
|
||||||
} cleave
|
} cleave
|
||||||
] each
|
] each
|
||||||
] V{ } make
|
] V{ } make
|
||||||
] change-instructions drop
|
] change-instructions compute-live-out ;
|
||||||
|
|
||||||
bb compute-live-out ;
|
|
||||||
|
|
||||||
: init-assignment ( live-intervals -- )
|
: init-assignment ( live-intervals -- )
|
||||||
[ [ start>> ] map ] keep zip >min-heap unhandled-intervals set
|
[ [ start>> ] map ] keep zip >min-heap unhandled-intervals set
|
||||||
|
|
Loading…
Reference in New Issue