compiler.cfg.stacks.finalize: only insert blocks if they aren't empty
Previously, a lot of empty blocks were added too.char-rename
parent
c26379ea7e
commit
f7542e95a9
|
@ -1,4 +1,5 @@
|
||||||
USING: assocs compiler.cfg help.markup help.syntax ;
|
USING: assocs compiler.cfg compiler.cfg.instructions help.markup
|
||||||
|
help.syntax ;
|
||||||
IN: compiler.cfg.stacks.finalize
|
IN: compiler.cfg.stacks.finalize
|
||||||
|
|
||||||
HELP: inserting-peeks
|
HELP: inserting-peeks
|
||||||
|
@ -24,7 +25,7 @@ HELP: finalize-stack-shuffling
|
||||||
|
|
||||||
HELP: visit-edge
|
HELP: visit-edge
|
||||||
{ $values { "from" basic-block } { "to" basic-block } }
|
{ $values { "from" basic-block } { "to" basic-block } }
|
||||||
{ $description "If both blocks are subroutine calls, don't bother computing anything." } ;
|
{ $description "If required, insert a block containing " { $link ##peek } " and " { $link ##replace } " instructions on the edge between the 'from' and 'to' block. If no such instructions are needed, then no block is inserted." } ;
|
||||||
|
|
||||||
ARTICLE: "compiler.cfg.stacks.finalize" "Stack finalization"
|
ARTICLE: "compiler.cfg.stacks.finalize" "Stack finalization"
|
||||||
"This pass inserts peeks and replaces." ;
|
"This pass inserts peeks and replaces." ;
|
||||||
|
|
|
@ -5,10 +5,9 @@ compiler.cfg.utilities kernel sequences tools.test ;
|
||||||
IN: compiler.cfg.stacks.finalize.tests
|
IN: compiler.cfg.stacks.finalize.tests
|
||||||
|
|
||||||
{
|
{
|
||||||
T{ ##branch f f }
|
"there" "hi"
|
||||||
T{ ##branch f f }
|
|
||||||
} [
|
} [
|
||||||
V{ } clone 1 insns>block V{ } clone 2 insns>block
|
V{ "hi" } clone 1 insns>block V{ "there" } clone 2 insns>block
|
||||||
2dup connect-bbs 2dup visit-edge
|
2dup connect-bbs 2dup visit-edge
|
||||||
[ successors>> first instructions>> first ]
|
[ successors>> first instructions>> first ]
|
||||||
[ predecessors>> first instructions>> first ] bi*
|
[ predecessors>> first instructions>> first ] bi*
|
||||||
|
|
|
@ -37,10 +37,10 @@ ERROR: bad-peek dst loc ;
|
||||||
[ dup n>> 0 < [ 2drop ] [ ##replace, ] if ] each-insertion ;
|
[ dup n>> 0 < [ 2drop ] [ ##replace, ] if ] each-insertion ;
|
||||||
|
|
||||||
: visit-edge ( from to -- )
|
: visit-edge ( from to -- )
|
||||||
2dup [ kill-block?>> ] both? [ 2drop ] [
|
|
||||||
2dup [ [ insert-replaces ] [ insert-peeks ] 2bi ##branch, ] V{ } make
|
2dup [ [ insert-replaces ] [ insert-peeks ] 2bi ##branch, ] V{ } make
|
||||||
|
dup length 1 > [
|
||||||
insert-basic-block
|
insert-basic-block
|
||||||
] if ;
|
] [ 3drop ] if ;
|
||||||
|
|
||||||
: visit-block ( bb -- )
|
: visit-block ( bb -- )
|
||||||
[ predecessors>> ] keep '[ _ visit-edge ] each ;
|
[ predecessors>> ] keep '[ _ visit-edge ] each ;
|
||||||
|
|
Loading…
Reference in New Issue