From f7542e95a9d81d3f202e270a0c3a20129dc66d87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Lindqvist?= Date: Thu, 1 Sep 2016 01:50:40 +0200 Subject: [PATCH] compiler.cfg.stacks.finalize: only insert blocks if they aren't empty Previously, a lot of empty blocks were added too. --- basis/compiler/cfg/stacks/finalize/finalize-docs.factor | 5 +++-- basis/compiler/cfg/stacks/finalize/finalize-tests.factor | 5 ++--- basis/compiler/cfg/stacks/finalize/finalize.factor | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/basis/compiler/cfg/stacks/finalize/finalize-docs.factor b/basis/compiler/cfg/stacks/finalize/finalize-docs.factor index 31a688a225..d081e1cc5b 100644 --- a/basis/compiler/cfg/stacks/finalize/finalize-docs.factor +++ b/basis/compiler/cfg/stacks/finalize/finalize-docs.factor @@ -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 HELP: inserting-peeks @@ -24,7 +25,7 @@ HELP: finalize-stack-shuffling HELP: visit-edge { $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" "This pass inserts peeks and replaces." ; diff --git a/basis/compiler/cfg/stacks/finalize/finalize-tests.factor b/basis/compiler/cfg/stacks/finalize/finalize-tests.factor index 4d50f62315..88d8aa8726 100644 --- a/basis/compiler/cfg/stacks/finalize/finalize-tests.factor +++ b/basis/compiler/cfg/stacks/finalize/finalize-tests.factor @@ -5,10 +5,9 @@ compiler.cfg.utilities kernel sequences tools.test ; IN: compiler.cfg.stacks.finalize.tests { - T{ ##branch f f } - T{ ##branch f f } + "there" "hi" } [ - 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 [ successors>> first instructions>> first ] [ predecessors>> first instructions>> first ] bi* diff --git a/basis/compiler/cfg/stacks/finalize/finalize.factor b/basis/compiler/cfg/stacks/finalize/finalize.factor index dffb7682d3..2842acce82 100644 --- a/basis/compiler/cfg/stacks/finalize/finalize.factor +++ b/basis/compiler/cfg/stacks/finalize/finalize.factor @@ -37,10 +37,10 @@ ERROR: bad-peek dst loc ; [ dup n>> 0 < [ 2drop ] [ ##replace, ] if ] each-insertion ; : 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 - ] if ; + ] [ 3drop ] if ; : visit-block ( bb -- ) [ predecessors>> ] keep '[ _ visit-edge ] each ;