compiler.cfg.linear-scan.allocation.state: set spill-area-size/align when the cfg tuple is created
parent
d486de889d
commit
5cd44dc07c
|
@ -19,7 +19,7 @@ HELP: <basic-block>
|
||||||
|
|
||||||
HELP: <cfg>
|
HELP: <cfg>
|
||||||
{ $values { "entry" basic-block } { "word" word } { "label" "label" } { "cfg" cfg } }
|
{ $values { "entry" basic-block } { "word" word } { "label" "label" } { "cfg" cfg } }
|
||||||
{ $description "Constructor for " { $link cfg } "." } ;
|
{ $description "Constructor for " { $link cfg } ". " { $slot "spill-area-size" } " and " { $slot "spill-area-align" } " are set to default values." } ;
|
||||||
|
|
||||||
HELP: cfg
|
HELP: cfg
|
||||||
{ $class-description
|
{ $class-description
|
||||||
|
|
|
@ -1,10 +1,17 @@
|
||||||
USING: accessors compiler.cfg kernel tools.test ;
|
USING: accessors combinators compiler.cfg kernel layouts tools.test ;
|
||||||
IN: compiler.cfg.tests
|
IN: compiler.cfg.tests
|
||||||
|
|
||||||
{
|
{
|
||||||
"word"
|
"word"
|
||||||
"label"
|
"label"
|
||||||
|
0
|
||||||
|
t
|
||||||
} [
|
} [
|
||||||
"word" "label" <basic-block> <cfg>
|
"word" "label" <basic-block> <cfg>
|
||||||
[ word>> ] [ label>> ] bi
|
{
|
||||||
|
[ word>> ]
|
||||||
|
[ label>> ]
|
||||||
|
[ spill-area-size>> ]
|
||||||
|
[ spill-area-align>> cell = ]
|
||||||
|
} cleave
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
! Copyright (C) 2008, 2010 Slava Pestov.
|
! Copyright (C) 2008, 2010 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors kernel math namespaces vectors ;
|
USING: accessors kernel layouts math namespaces vectors ;
|
||||||
IN: compiler.cfg
|
IN: compiler.cfg
|
||||||
|
|
||||||
TUPLE: basic-block < identity-tuple
|
TUPLE: basic-block < identity-tuple
|
||||||
|
@ -20,18 +20,24 @@ number
|
||||||
|
|
||||||
M: basic-block hashcode* nip id>> ;
|
M: basic-block hashcode* nip id>> ;
|
||||||
|
|
||||||
TUPLE: cfg { entry basic-block } word label
|
TUPLE: cfg
|
||||||
spill-area-size spill-area-align
|
{ entry basic-block }
|
||||||
stack-frame
|
word
|
||||||
frame-pointer?
|
label
|
||||||
post-order linear-order
|
{ spill-area-size integer }
|
||||||
predecessors-valid? dominance-valid? loops-valid? ;
|
{ spill-area-align integer }
|
||||||
|
stack-frame
|
||||||
|
frame-pointer?
|
||||||
|
post-order linear-order
|
||||||
|
predecessors-valid? dominance-valid? loops-valid? ;
|
||||||
|
|
||||||
: <cfg> ( word label entry -- cfg )
|
: <cfg> ( word label entry -- cfg )
|
||||||
cfg new
|
cfg new
|
||||||
swap >>entry
|
swap >>entry
|
||||||
swap >>label
|
swap >>label
|
||||||
swap >>word ;
|
swap >>word
|
||||||
|
0 >>spill-area-size
|
||||||
|
cell >>spill-area-align ;
|
||||||
|
|
||||||
: cfg-changed ( cfg -- )
|
: cfg-changed ( cfg -- )
|
||||||
f >>post-order
|
f >>post-order
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
USING: combinators.extras compiler.cfg compiler.cfg.instructions
|
USING: accessors combinators.extras compiler.cfg compiler.cfg.instructions
|
||||||
compiler.cfg.linear-scan.allocation.state
|
compiler.cfg.linear-scan.allocation.state
|
||||||
compiler.cfg.linear-scan.live-intervals cpu.architecture
|
compiler.cfg.linear-scan.live-intervals compiler.cfg.utilities cpu.architecture
|
||||||
cpu.x86.assembler.operands heaps kernel namespaces system tools.test ;
|
cpu.x86.assembler.operands heaps kernel layouts namespaces system tools.test ;
|
||||||
IN: compiler.cfg.linear-scan.allocation.state.tests
|
IN: compiler.cfg.linear-scan.allocation.state.tests
|
||||||
|
|
||||||
! add-active
|
! add-active
|
||||||
|
@ -47,6 +47,12 @@ cpu x86.64? [
|
||||||
] unit-test
|
] unit-test
|
||||||
] when
|
] when
|
||||||
|
|
||||||
|
! align-spill-area
|
||||||
|
{ t } [
|
||||||
|
3 f f { } 0 insns>block <cfg> [ align-spill-area ] keep
|
||||||
|
spill-area-align>> cell =
|
||||||
|
] unit-test
|
||||||
|
|
||||||
{
|
{
|
||||||
T{ spill-slot f 0 }
|
T{ spill-slot f 0 }
|
||||||
T{ spill-slot f 8 }
|
T{ spill-slot f 8 }
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
USING: accessors arrays assocs combinators compiler.cfg
|
USING: accessors arrays assocs combinators compiler.cfg
|
||||||
compiler.cfg.instructions
|
compiler.cfg.instructions
|
||||||
compiler.cfg.linear-scan.live-intervals compiler.cfg.registers
|
compiler.cfg.linear-scan.live-intervals compiler.cfg.registers
|
||||||
cpu.architecture fry heaps kernel layouts linked-assocs math
|
cpu.architecture fry heaps kernel linked-assocs math
|
||||||
math.order namespaces sequences ;
|
math.order namespaces sequences ;
|
||||||
FROM: assocs => change-at ;
|
FROM: assocs => change-at ;
|
||||||
IN: compiler.cfg.linear-scan.allocation.state
|
IN: compiler.cfg.linear-scan.allocation.state
|
||||||
|
@ -121,14 +121,14 @@ ERROR: register-already-used live-interval ;
|
||||||
[ swap [ align dup ] [ + ] bi ] change-spill-area-size drop
|
[ swap [ align dup ] [ + ] bi ] change-spill-area-size drop
|
||||||
<spill-slot> ;
|
<spill-slot> ;
|
||||||
|
|
||||||
: align-spill-area ( align -- )
|
: align-spill-area ( align cfg -- )
|
||||||
cfg get [ max ] change-spill-area-align drop ;
|
[ max ] change-spill-area-align drop ;
|
||||||
|
|
||||||
SYMBOL: spill-slots
|
SYMBOL: spill-slots
|
||||||
|
|
||||||
: assign-spill-slot ( coalesced-vreg rep -- spill-slot )
|
: assign-spill-slot ( coalesced-vreg rep -- spill-slot )
|
||||||
rep-size
|
rep-size
|
||||||
[ align-spill-area ]
|
[ cfg get align-spill-area ]
|
||||||
[ spill-slots get [ nip next-spill-slot ] 2cache ]
|
[ spill-slots get [ nip next-spill-slot ] 2cache ]
|
||||||
bi ;
|
bi ;
|
||||||
|
|
||||||
|
@ -141,7 +141,6 @@ SYMBOL: spill-slots
|
||||||
[ V{ } clone ] reg-class-assoc active-intervals set
|
[ V{ } clone ] reg-class-assoc active-intervals set
|
||||||
[ V{ } clone ] reg-class-assoc inactive-intervals set
|
[ V{ } clone ] reg-class-assoc inactive-intervals set
|
||||||
V{ } clone handled-intervals set
|
V{ } clone handled-intervals set
|
||||||
cfg get 0 >>spill-area-size cell >>spill-area-align drop
|
|
||||||
H{ } clone spill-slots set
|
H{ } clone spill-slots set
|
||||||
-1 progress set ;
|
-1 progress set ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue