diff --git a/basis/compiler/cfg/alias-analysis/alias-analysis.factor b/basis/compiler/cfg/alias-analysis/alias-analysis.factor index dcd38277c7..96945dfad0 100644 --- a/basis/compiler/cfg/alias-analysis/alias-analysis.factor +++ b/basis/compiler/cfg/alias-analysis/alias-analysis.factor @@ -325,6 +325,6 @@ M: insn eliminate-dead-stores drop t ; [ 0 [ [ insn#<< ] [ drop 1 + ] 2bi ] reduce drop ] [ [ analyze-aliases ] map! [ eliminate-dead-stores ] filter! ] bi ; -: alias-analysis ( cfg -- cfg ) +: alias-analysis ( cfg -- ) init-alias-analysis - dup [ alias-analysis-step ] simple-optimization ; + [ alias-analysis-step ] simple-optimization ; diff --git a/basis/compiler/cfg/block-joining/block-joining.factor b/basis/compiler/cfg/block-joining/block-joining.factor index 54cff306ed..93f48b52bb 100644 --- a/basis/compiler/cfg/block-joining/block-joining.factor +++ b/basis/compiler/cfg/block-joining/block-joining.factor @@ -26,7 +26,7 @@ IN: compiler.cfg.block-joining : join-block ( bb pred -- ) [ join-instructions ] [ update-successors ] 2bi ; -: join-blocks ( cfg -- cfg' ) +: join-blocks ( cfg -- ) needs-predecessors dup post-order [ @@ -34,4 +34,4 @@ IN: compiler.cfg.block-joining [ dup predecessor join-block ] [ drop ] if ] each - cfg-changed predecessors-changed ; + cfg-changed predecessors-changed drop ; diff --git a/basis/compiler/cfg/branch-splitting/branch-splitting.factor b/basis/compiler/cfg/branch-splitting/branch-splitting.factor index 157fd355cd..fd9eea23df 100644 --- a/basis/compiler/cfg/branch-splitting/branch-splitting.factor +++ b/basis/compiler/cfg/branch-splitting/branch-splitting.factor @@ -93,7 +93,7 @@ SYMBOL: visited HS{ } clone visited set entry>> add-to-worklist ; -: split-branches ( cfg -- cfg' ) +: split-branches ( cfg -- ) needs-predecessors dup init-worklist ! For back-edge? @@ -104,4 +104,4 @@ SYMBOL: visited successors>> [ add-to-worklist ] each ] slurp-deque - cfg-changed ; + cfg-changed drop ; diff --git a/basis/compiler/cfg/copy-prop/copy-prop.factor b/basis/compiler/cfg/copy-prop/copy-prop.factor index 64f0f26f3e..c0024f0752 100644 --- a/basis/compiler/cfg/copy-prop/copy-prop.factor +++ b/basis/compiler/cfg/copy-prop/copy-prop.factor @@ -119,10 +119,8 @@ PRIVATE> USE: compiler.cfg -: copy-propagation ( cfg -- cfg' ) +: copy-propagation ( cfg -- ) needs-predecessors - dup collect-copies dup rename-copies - - predecessors-changed ; + predecessors-changed drop ; diff --git a/basis/compiler/cfg/dce/dce.factor b/basis/compiler/cfg/dce/dce.factor index 28c75ec18a..456cb07827 100644 --- a/basis/compiler/cfg/dce/dce.factor +++ b/basis/compiler/cfg/dce/dce.factor @@ -115,14 +115,13 @@ M: flushable-insn live-insn? defs-vregs [ live-vreg? ] any? ; M: insn live-insn? drop t ; -: eliminate-dead-code ( cfg -- cfg' ) +: eliminate-dead-code ( cfg -- ) ! 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 - dup [ [ [ build-liveness-graph ] each ] simple-analysis ] [ [ [ compute-live-vregs ] each ] simple-analysis ] [ [ [ live-insn? ] filter! ] simple-optimization ] diff --git a/basis/compiler/cfg/height/height.factor b/basis/compiler/cfg/height/height.factor index f8f360f007..1609e609ca 100644 --- a/basis/compiler/cfg/height/height.factor +++ b/basis/compiler/cfg/height/height.factor @@ -51,5 +51,5 @@ M: insn visit-insn drop ; rs-height get [ ##inc-r new-insn prefix ] unless-zero ] bi ; -: normalize-height ( cfg -- cfg' ) - dup [ height-step ] simple-optimization ; +: normalize-height ( cfg -- ) + [ height-step ] simple-optimization ; diff --git a/basis/compiler/cfg/optimizer/optimizer.factor b/basis/compiler/cfg/optimizer/optimizer.factor index 6a62b6f7e7..7138999772 100644 --- a/basis/compiler/cfg/optimizer/optimizer.factor +++ b/basis/compiler/cfg/optimizer/optimizer.factor @@ -9,17 +9,20 @@ compiler.cfg.ssa.construction compiler.cfg.alias-analysis compiler.cfg.value-numbering compiler.cfg.copy-prop -compiler.cfg.dce ; +compiler.cfg.dce +kernel sequences ; IN: compiler.cfg.optimizer : optimize-cfg ( cfg -- cfg' ) - optimize-tail-calls - delete-useless-conditionals - split-branches - join-blocks - normalize-height - construct-ssa - alias-analysis - value-numbering - copy-propagation - eliminate-dead-code ; + dup { + optimize-tail-calls + delete-useless-conditionals + split-branches + join-blocks + normalize-height + construct-ssa + alias-analysis + value-numbering + copy-propagation + eliminate-dead-code + } [ execute( x -- ) ] with each ; diff --git a/basis/compiler/cfg/ssa/construction/construction.factor b/basis/compiler/cfg/ssa/construction/construction.factor index bec0971e03..111cc7fc0d 100644 --- a/basis/compiler/cfg/ssa/construction/construction.factor +++ b/basis/compiler/cfg/ssa/construction/construction.factor @@ -182,10 +182,7 @@ SYMBOL: live-phis PRIVATE> -: construct-ssa ( cfg -- cfg' ) - { - [ compute-merge-sets ] - [ compute-defs compute-phis ] - [ rename compute-live-phis insert-phis ] - [ ] - } cleave ; +: construct-ssa ( cfg -- ) + [ compute-merge-sets ] + [ compute-defs compute-phis ] + [ rename compute-live-phis insert-phis ] tri ; diff --git a/basis/compiler/cfg/tco/tco.factor b/basis/compiler/cfg/tco/tco.factor index 2effc432ac..06bdab7889 100644 --- a/basis/compiler/cfg/tco/tco.factor +++ b/basis/compiler/cfg/tco/tco.factor @@ -71,7 +71,7 @@ IN: compiler.cfg.tco } cond ] [ drop ] if ; -: optimize-tail-calls ( cfg -- cfg' ) +: optimize-tail-calls ( cfg -- ) dup [ optimize-tail-call ] each-basic-block - cfg-changed predecessors-changed ; + cfg-changed predecessors-changed drop ; diff --git a/basis/compiler/cfg/useless-conditionals/useless-conditionals.factor b/basis/compiler/cfg/useless-conditionals/useless-conditionals.factor index cf7a490c9f..126f4892dd 100644 --- a/basis/compiler/cfg/useless-conditionals/useless-conditionals.factor +++ b/basis/compiler/cfg/useless-conditionals/useless-conditionals.factor @@ -25,9 +25,9 @@ IN: compiler.cfg.useless-conditionals [ first skip-empty-blocks 1vector ] change-successors instructions>> [ pop* ] [ [ ##branch new-insn ] dip push ] bi ; -: delete-useless-conditionals ( cfg -- cfg' ) +: delete-useless-conditionals ( cfg -- ) dup [ dup delete-conditional? [ delete-conditional ] [ drop ] if ] each-basic-block - - cfg-changed predecessors-changed ; + + cfg-changed predecessors-changed drop ; diff --git a/basis/compiler/cfg/value-numbering/value-numbering.factor b/basis/compiler/cfg/value-numbering/value-numbering.factor index 2418a67eae..38296c5601 100644 --- a/basis/compiler/cfg/value-numbering/value-numbering.factor +++ b/basis/compiler/cfg/value-numbering/value-numbering.factor @@ -1,9 +1,6 @@ ! Copyright (C) 2008, 2010 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: namespaces arrays assocs kernel accessors -sorting sets sequences locals -cpu.architecture -sequences.deep +USING: accessors arrays assocs compiler.cfg compiler.cfg.rpo compiler.cfg.def-use @@ -16,7 +13,9 @@ compiler.cfg.value-numbering.math compiler.cfg.value-numbering.rewrite compiler.cfg.value-numbering.slots compiler.cfg.value-numbering.misc -compiler.cfg.value-numbering.expressions ; +compiler.cfg.value-numbering.expressions +cpu.architecture kernel locals namespaces sequences sequences.deep sets +sorting ; IN: compiler.cfg.value-numbering GENERIC: process-instruction ( insn -- insn' ) @@ -53,7 +52,6 @@ M: array process-instruction init-value-graph [ process-instruction ] map flatten ; -: value-numbering ( cfg -- cfg ) +: value-numbering ( cfg -- ) dup [ value-numbering-step ] simple-optimization - - cfg-changed predecessors-changed ; + cfg-changed predecessors-changed drop ;