compiler.cfg.*: fix stack effect of compiler passes in optimize-cfg

since they all modify the cfg in place, it is better if their stack
effect is ( cfg -- ) instead of ( cfg -- cfg' )
db4
Björn Lindqvist 2014-12-08 03:36:52 +01:00
parent cf3c0d96a1
commit 8744d908b6
11 changed files with 40 additions and 45 deletions

View File

@ -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 ;

View File

@ -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 ;

View File

@ -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 ;

View File

@ -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 ;

View File

@ -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 ]

View File

@ -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 ;

View File

@ -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 ;

View File

@ -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 ;

View File

@ -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 ;

View File

@ -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 ;

View File

@ -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 ;