From e5866dfa808f879d3b3426499e30e5382cc52c24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Lindqvist?= Date: Wed, 10 Dec 2014 18:24:12 +0100 Subject: [PATCH] compiler.cfg.*: changed stack effect of needs-predecessors from ( cfg -- cfg') to ( cfg -- ) --- .../cfg/block-joining/block-joining.factor | 24 +++++++++++-------- .../branch-splitting-tests.factor | 6 ++--- .../branch-splitting/branch-splitting.factor | 24 ++++++++++--------- basis/compiler/cfg/copy-prop/copy-prop.factor | 10 ++++---- .../dataflow-analysis.factor | 2 +- basis/compiler/cfg/dce/dce.factor | 16 ++++++------- basis/compiler/cfg/dominance/dominance.factor | 2 +- basis/compiler/cfg/gc-checks/gc-checks.factor | 2 +- .../cfg/linear-scan/resolve/resolve.factor | 4 ++-- .../cfg/linearization/linearization.factor | 2 +- basis/compiler/cfg/liveness/liveness.factor | 8 +++---- .../cfg/loop-detection/loop-detection.factor | 7 +++--- .../cfg/predecessors/predecessors-docs.factor | 2 +- .../cfg/predecessors/predecessors.factor | 19 +++++++-------- .../representations/representations.factor | 3 +-- basis/compiler/cfg/ssa/cssa/cssa.factor | 8 +++---- .../cfg/stacks/finalize/finalize.factor | 9 ++++--- extra/compiler/cfg/gvn/gvn.factor | 12 ++++++---- extra/compiler/graphviz/graphviz.factor | 4 ++-- 19 files changed, 84 insertions(+), 80 deletions(-) diff --git a/basis/compiler/cfg/block-joining/block-joining.factor b/basis/compiler/cfg/block-joining/block-joining.factor index 39faa05790..0649923b16 100644 --- a/basis/compiler/cfg/block-joining/block-joining.factor +++ b/basis/compiler/cfg/block-joining/block-joining.factor @@ -1,8 +1,8 @@ ! Copyright (C) 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors combinators.short-circuit kernel sequences math -compiler.utilities compiler.cfg compiler.cfg.instructions compiler.cfg.rpo -compiler.cfg.predecessors compiler.cfg.utilities ; +USING: accessors combinators combinators.short-circuit compiler.utilities +compiler.cfg compiler.cfg.instructions compiler.cfg.rpo +compiler.cfg.predecessors compiler.cfg.utilities kernel math sequences ; IN: compiler.cfg.block-joining ! Joining blocks that are not calls and are connected by a single CFG edge. @@ -27,10 +27,14 @@ IN: compiler.cfg.block-joining [ join-instructions ] [ update-successors ] 2bi ; : join-blocks ( cfg -- ) - needs-predecessors - [ - post-order [ - dup join-block? - [ dup predecessor join-block ] [ drop ] if - ] each - ] [ cfg-changed ] [ predecessors-changed ] tri ; + { + [ needs-predecessors ] + [ + post-order [ + dup join-block? + [ dup predecessor join-block ] [ drop ] if + ] each + ] + [ cfg-changed ] + [ predecessors-changed ] + } cleave ; diff --git a/basis/compiler/cfg/branch-splitting/branch-splitting-tests.factor b/basis/compiler/cfg/branch-splitting/branch-splitting-tests.factor index 4785fd8129..4c29a1c613 100644 --- a/basis/compiler/cfg/branch-splitting/branch-splitting-tests.factor +++ b/basis/compiler/cfg/branch-splitting/branch-splitting-tests.factor @@ -9,13 +9,11 @@ IN: compiler.cfg.branch-splitting.tests : check-predecessors ( cfg -- ) [ get-predecessors ] - [ needs-predecessors drop ] + [ needs-predecessors ] [ get-predecessors ] tri assert= ; : check-branch-splitting ( cfg -- ) - needs-predecessors - split-branches - check-predecessors ; + [ needs-predecessors ] [ split-branches ] [ check-predecessors ] tri ; : test-branch-splitting ( -- ) 0 get block>cfg check-branch-splitting ; diff --git a/basis/compiler/cfg/branch-splitting/branch-splitting.factor b/basis/compiler/cfg/branch-splitting/branch-splitting.factor index f323ed4afd..80f57e116a 100644 --- a/basis/compiler/cfg/branch-splitting/branch-splitting.factor +++ b/basis/compiler/cfg/branch-splitting/branch-splitting.factor @@ -94,14 +94,16 @@ SYMBOL: visited entry>> add-to-worklist ; : split-branches ( cfg -- ) - needs-predecessors - dup init-worklist - ! For back-edge? - dup post-order drop - - worklist get [ - dup split-branch? [ dup split-branch ] when - successors>> [ add-to-worklist ] each - ] slurp-deque - - cfg-changed ; + { + [ needs-predecessors ] + [ init-worklist ] + [ + ! For back-edge? + post-order drop + worklist get [ + dup split-branch? [ dup split-branch ] when + successors>> [ add-to-worklist ] each + ] slurp-deque + ] + [ cfg-changed ] + } cleave ; diff --git a/basis/compiler/cfg/copy-prop/copy-prop.factor b/basis/compiler/cfg/copy-prop/copy-prop.factor index 795028806a..e65b25d4fa 100644 --- a/basis/compiler/cfg/copy-prop/copy-prop.factor +++ b/basis/compiler/cfg/copy-prop/copy-prop.factor @@ -120,7 +120,9 @@ PRIVATE> USE: compiler.cfg : copy-propagation ( cfg -- ) - needs-predecessors - dup collect-copies - dup rename-copies - predecessors-changed ; + { + [ needs-predecessors ] + [ collect-copies ] + [ rename-copies ] + [ predecessors-changed ] + } cleave ; diff --git a/basis/compiler/cfg/dataflow-analysis/dataflow-analysis.factor b/basis/compiler/cfg/dataflow-analysis/dataflow-analysis.factor index 30017f87ec..e227ca0f61 100644 --- a/basis/compiler/cfg/dataflow-analysis/dataflow-analysis.factor +++ b/basis/compiler/cfg/dataflow-analysis/dataflow-analysis.factor @@ -47,7 +47,7 @@ MIXIN: dataflow-analysis ] when ; inline :: run-dataflow-analysis ( cfg dfa -- in-sets out-sets ) - cfg needs-predecessors drop + cfg needs-predecessors H{ } clone :> in-sets H{ } clone :> out-sets cfg dfa :> work-list diff --git a/basis/compiler/cfg/dce/dce.factor b/basis/compiler/cfg/dce/dce.factor index 456cb07827..0cf4b11136 100644 --- a/basis/compiler/cfg/dce/dce.factor +++ b/basis/compiler/cfg/dce/dce.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2008, 2010 Slava Pestov, Daniel Ehrenberg. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors arrays assocs kernel namespaces sequences +USING: accessors arrays assocs kernel namespaces sequences combinators compiler.cfg.instructions compiler.cfg.def-use compiler.cfg.rpo compiler.cfg.predecessors hash-sets sets ; FROM: assocs => change-at ; @@ -116,13 +116,13 @@ M: flushable-insn live-insn? defs-vregs [ live-vreg? ] any? ; M: insn live-insn? drop t ; : eliminate-dead-code ( cfg -- ) + init-dead-code ! Even though we don't use predecessors directly, we depend ! on the predecessors pass updating phi nodes to remove dead ! inputs. - needs-predecessors - - init-dead-code - [ [ [ build-liveness-graph ] each ] simple-analysis ] - [ [ [ compute-live-vregs ] each ] simple-analysis ] - [ [ [ live-insn? ] filter! ] simple-optimization ] - tri ; + { + [ needs-predecessors ] + [ [ [ build-liveness-graph ] each ] simple-analysis ] + [ [ [ compute-live-vregs ] each ] simple-analysis ] + [ [ [ live-insn? ] filter! ] simple-optimization ] + } cleave ; diff --git a/basis/compiler/cfg/dominance/dominance.factor b/basis/compiler/cfg/dominance/dominance.factor index 8d8b868f3d..86742574d3 100644 --- a/basis/compiler/cfg/dominance/dominance.factor +++ b/basis/compiler/cfg/dominance/dominance.factor @@ -79,7 +79,7 @@ PRIVATE> PRIVATE> : needs-dominance ( cfg -- ) - needs-predecessors + dup needs-predecessors dup dominance-valid?>> [ compute-dominance t >>dominance-valid? ] unless drop ; diff --git a/basis/compiler/cfg/gc-checks/gc-checks.factor b/basis/compiler/cfg/gc-checks/gc-checks.factor index a73f94a235..cb929fb47d 100644 --- a/basis/compiler/cfg/gc-checks/gc-checks.factor +++ b/basis/compiler/cfg/gc-checks/gc-checks.factor @@ -129,7 +129,7 @@ PRIVATE> : insert-gc-checks ( cfg -- cfg' ) dup blocks-with-gc [ - [ needs-predecessors ] dip + [ dup needs-predecessors ] dip [ process-block ] each dup cfg-changed ] unless-empty ; diff --git a/basis/compiler/cfg/linear-scan/resolve/resolve.factor b/basis/compiler/cfg/linear-scan/resolve/resolve.factor index a925b0d080..c52382c979 100644 --- a/basis/compiler/cfg/linear-scan/resolve/resolve.factor +++ b/basis/compiler/cfg/linear-scan/resolve/resolve.factor @@ -107,6 +107,6 @@ SYMBOL: temp-locations ] if ; : resolve-data-flow ( cfg -- ) - needs-predecessors init-resolve - [ resolve-block-data-flow ] each-basic-block ; + [ needs-predecessors ] + [ [ resolve-block-data-flow ] each-basic-block ] bi ; diff --git a/basis/compiler/cfg/linearization/linearization.factor b/basis/compiler/cfg/linearization/linearization.factor index a113ac277a..3654271684 100644 --- a/basis/compiler/cfg/linearization/linearization.factor +++ b/basis/compiler/cfg/linearization/linearization.factor @@ -75,7 +75,7 @@ SYMBOLS: work-list loop-heads visited ; PRIVATE> : linearization-order ( cfg -- bbs ) - needs-post-order needs-loops needs-predecessors + needs-post-order needs-loops dup needs-predecessors dup linear-order>> [ ] [ dup (linearization-order) diff --git a/basis/compiler/cfg/liveness/liveness.factor b/basis/compiler/cfg/liveness/liveness.factor index 82002fea71..5eaf3446f7 100644 --- a/basis/compiler/cfg/liveness/liveness.factor +++ b/basis/compiler/cfg/liveness/liveness.factor @@ -158,15 +158,15 @@ SYMBOL: work-list ] [ drop ] if ; : compute-live-sets ( cfg -- ) - needs-predecessors - dup compute-insns - work-list set H{ } clone live-ins set H{ } clone edge-live-ins set H{ } clone live-outs set H{ } clone base-pointers set - post-order add-to-work-list + + [ needs-predecessors ] + [ compute-insns ] + [ post-order add-to-work-list ] tri work-list get [ liveness-step ] slurp-deque ; : live-in? ( vreg bb -- ? ) live-in key? ; diff --git a/basis/compiler/cfg/loop-detection/loop-detection.factor b/basis/compiler/cfg/loop-detection/loop-detection.factor index 34693046e4..f0fdc7c61e 100644 --- a/basis/compiler/cfg/loop-detection/loop-detection.factor +++ b/basis/compiler/cfg/loop-detection/loop-detection.factor @@ -63,12 +63,13 @@ SYMBOL: loop-nesting ] keep loop-nesting set ; : detect-loops ( cfg -- cfg' ) - needs-predecessors H{ } clone loops set HS{ } clone visited set HS{ } clone active set H{ } clone loop-nesting set - dup entry>> find-loop-headers process-loop-headers compute-loop-nesting ; + [ needs-predecessors ] + [ entry>> find-loop-headers process-loop-headers compute-loop-nesting ] + [ ] tri ; PRIVATE> @@ -77,5 +78,5 @@ PRIVATE> : current-loop-nesting ( -- n ) basic-block get loop-nesting-at ; : needs-loops ( cfg -- cfg' ) - needs-predecessors + dup needs-predecessors dup loops-valid?>> [ detect-loops t >>loops-valid? ] unless ; diff --git a/basis/compiler/cfg/predecessors/predecessors-docs.factor b/basis/compiler/cfg/predecessors/predecessors-docs.factor index 1977d727fb..c77d783a8a 100644 --- a/basis/compiler/cfg/predecessors/predecessors-docs.factor +++ b/basis/compiler/cfg/predecessors/predecessors-docs.factor @@ -2,5 +2,5 @@ USING: compiler.cfg help.markup help.syntax kernel ; IN: compiler.cfg.predecessors HELP: needs-predecessors -{ $values { "cfg" cfg } { "cfg'" cfg } } +{ $values { "cfg" cfg } } { $description "Computes predecessor info for the cfg unless it already is up-to-date." } ; diff --git a/basis/compiler/cfg/predecessors/predecessors.factor b/basis/compiler/cfg/predecessors/predecessors.factor index 506d4aa46c..a329d3ab6b 100644 --- a/basis/compiler/cfg/predecessors/predecessors.factor +++ b/basis/compiler/cfg/predecessors/predecessors.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2008, 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel accessors combinators fry sequences assocs compiler.cfg.rpo +USING: kernel accessors fry sequences assocs compiler.cfg.rpo compiler.cfg.instructions compiler.cfg.utilities ; IN: compiler.cfg.predecessors @@ -18,16 +18,13 @@ IN: compiler.cfg.predecessors : update-phis ( bb -- ) dup [ update-phi ] with each-phi ; -: compute-predecessors ( cfg -- cfg' ) - { - [ [ V{ } clone >>predecessors drop ] each-basic-block ] - [ [ update-predecessors ] each-basic-block ] - [ [ update-phis ] each-basic-block ] - [ ] - } cleave ; +: compute-predecessors ( cfg -- ) + [ [ V{ } clone >>predecessors drop ] each-basic-block ] + [ [ update-predecessors ] each-basic-block ] + [ [ update-phis ] each-basic-block ] tri ; PRIVATE> -: needs-predecessors ( cfg -- cfg' ) - dup predecessors-valid?>> - [ compute-predecessors t >>predecessors-valid? ] unless ; +: needs-predecessors ( cfg -- ) + dup predecessors-valid?>> [ drop ] + [ t >>predecessors-valid? compute-predecessors ] if ; diff --git a/basis/compiler/cfg/representations/representations.factor b/basis/compiler/cfg/representations/representations.factor index 2160ad26e6..2267aa1333 100644 --- a/basis/compiler/cfg/representations/representations.factor +++ b/basis/compiler/cfg/representations/representations.factor @@ -18,9 +18,8 @@ IN: compiler.cfg.representations : select-representations ( cfg -- cfg' ) needs-loops - needs-predecessors - { + [ needs-predecessors ] [ compute-components ] [ compute-possibilities ] [ compute-representations ] diff --git a/basis/compiler/cfg/ssa/cssa/cssa.factor b/basis/compiler/cfg/ssa/cssa/cssa.factor index 68b2939886..ff8521ce3a 100644 --- a/basis/compiler/cfg/ssa/cssa/cssa.factor +++ b/basis/compiler/cfg/ssa/cssa/cssa.factor @@ -70,8 +70,6 @@ SYMBOLS: edge-copies phi-copies ; tri ; : construct-cssa ( cfg -- ) - needs-predecessors - - dup [ convert-phis ] each-basic-block - - cfg-changed ; + [ needs-predecessors ] + [ [ convert-phis ] each-basic-block ] + [ cfg-changed ] tri ; diff --git a/basis/compiler/cfg/stacks/finalize/finalize.factor b/basis/compiler/cfg/stacks/finalize/finalize.factor index cba8c8e0f7..663d6938c7 100644 --- a/basis/compiler/cfg/stacks/finalize/finalize.factor +++ b/basis/compiler/cfg/stacks/finalize/finalize.factor @@ -52,8 +52,7 @@ ERROR: bad-peek dst loc ; [ predecessors>> ] keep '[ _ visit-edge ] each ; : finalize-stack-shuffling ( cfg -- cfg' ) - needs-predecessors - - dup [ visit-block ] each-basic-block - - dup cfg-changed ; + dup + [ needs-predecessors ] + [ [ visit-block ] each-basic-block ] + [ cfg-changed ] tri ; diff --git a/extra/compiler/cfg/gvn/gvn.factor b/extra/compiler/cfg/gvn/gvn.factor index c172aa644c..959cd7930a 100644 --- a/extra/compiler/cfg/gvn/gvn.factor +++ b/extra/compiler/cfg/gvn/gvn.factor @@ -4,6 +4,7 @@ USING: namespaces arrays assocs hashtables kernel accessors fry grouping sorting sets sequences locals cpu.architecture sequences.deep +combinators compiler.cfg compiler.cfg.rpo compiler.cfg.def-use @@ -118,7 +119,10 @@ M: insn gcse [ gcse-step ] simple-optimization ; : value-numbering ( cfg -- cfg ) - needs-predecessors - dup determine-value-numbers - dup eliminate-common-subexpressions - [ cfg-changed ] [ predecessors-changed ] bi ; + dup { + [ needs-predecessors ] + [ determine-value-numbers ] + [ eliminate-common-subexpressions ] + [ cfg-changed ] + [ predecessors-changed ] + } cleave ; diff --git a/extra/compiler/graphviz/graphviz.factor b/extra/compiler/graphviz/graphviz.factor index f0b7c85494..fa268c6db5 100644 --- a/extra/compiler/graphviz/graphviz.factor +++ b/extra/compiler/graphviz/graphviz.factor @@ -90,7 +90,7 @@ IN: compiler.graphviz : dom-trees ( cfgs -- ) [ [ - needs-dominance drop + needs-dominance dom-childrens get [ [ bb-edge, @@ -125,7 +125,7 @@ SYMBOL: vertex-names { [ { } call-graph-edge, ] [ [ vertex-name ] [ label>> loop?>> { "shape=box" } { } ? ] bi node-style, ] - [ [ vertex-name ] [ calls>> ] bi (call-graph-back-edges) ] + [ [ vertex-name ] [ calls>> ] bi (call-graph-back-edges) ] [ [ vertex-name ] [ children>> ] bi (call-graph-edges) ] } cleave ] with each ;