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 ] [ 0 [ [ insn#<< ] [ drop 1 + ] 2bi ] reduce drop ]
[ [ analyze-aliases ] map! [ eliminate-dead-stores ] filter! ] bi ; [ [ analyze-aliases ] map! [ eliminate-dead-stores ] filter! ] bi ;
: alias-analysis ( cfg -- cfg ) : alias-analysis ( cfg -- )
init-alias-analysis 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-block ( bb pred -- )
[ join-instructions ] [ update-successors ] 2bi ; [ join-instructions ] [ update-successors ] 2bi ;
: join-blocks ( cfg -- cfg' ) : join-blocks ( cfg -- )
needs-predecessors needs-predecessors
dup post-order [ dup post-order [
@ -34,4 +34,4 @@ IN: compiler.cfg.block-joining
[ dup predecessor join-block ] [ drop ] if [ dup predecessor join-block ] [ drop ] if
] each ] each
cfg-changed predecessors-changed ; cfg-changed predecessors-changed drop ;

View File

@ -93,7 +93,7 @@ SYMBOL: visited
HS{ } clone visited set HS{ } clone visited set
entry>> add-to-worklist ; entry>> add-to-worklist ;
: split-branches ( cfg -- cfg' ) : split-branches ( cfg -- )
needs-predecessors needs-predecessors
dup init-worklist dup init-worklist
! For back-edge? ! For back-edge?
@ -104,4 +104,4 @@ SYMBOL: visited
successors>> [ add-to-worklist ] each successors>> [ add-to-worklist ] each
] slurp-deque ] slurp-deque
cfg-changed ; cfg-changed drop ;

View File

@ -119,10 +119,8 @@ PRIVATE>
USE: compiler.cfg USE: compiler.cfg
: copy-propagation ( cfg -- cfg' ) : copy-propagation ( cfg -- )
needs-predecessors needs-predecessors
dup collect-copies dup collect-copies
dup rename-copies dup rename-copies
predecessors-changed drop ;
predecessors-changed ;

View File

@ -115,14 +115,13 @@ M: flushable-insn live-insn? defs-vregs [ live-vreg? ] any? ;
M: insn live-insn? drop t ; 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 ! Even though we don't use predecessors directly, we depend
! on the predecessors pass updating phi nodes to remove dead ! on the predecessors pass updating phi nodes to remove dead
! inputs. ! inputs.
needs-predecessors needs-predecessors
init-dead-code init-dead-code
dup
[ [ [ build-liveness-graph ] each ] simple-analysis ] [ [ [ build-liveness-graph ] each ] simple-analysis ]
[ [ [ compute-live-vregs ] each ] simple-analysis ] [ [ [ compute-live-vregs ] each ] simple-analysis ]
[ [ [ live-insn? ] filter! ] simple-optimization ] [ [ [ 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 rs-height get [ ##inc-r new-insn prefix ] unless-zero
] bi ; ] bi ;
: normalize-height ( cfg -- cfg' ) : normalize-height ( cfg -- )
dup [ height-step ] simple-optimization ; [ height-step ] simple-optimization ;

View File

@ -9,10 +9,12 @@ compiler.cfg.ssa.construction
compiler.cfg.alias-analysis compiler.cfg.alias-analysis
compiler.cfg.value-numbering compiler.cfg.value-numbering
compiler.cfg.copy-prop compiler.cfg.copy-prop
compiler.cfg.dce ; compiler.cfg.dce
kernel sequences ;
IN: compiler.cfg.optimizer IN: compiler.cfg.optimizer
: optimize-cfg ( cfg -- cfg' ) : optimize-cfg ( cfg -- cfg' )
dup {
optimize-tail-calls optimize-tail-calls
delete-useless-conditionals delete-useless-conditionals
split-branches split-branches
@ -22,4 +24,5 @@ IN: compiler.cfg.optimizer
alias-analysis alias-analysis
value-numbering value-numbering
copy-propagation copy-propagation
eliminate-dead-code ; eliminate-dead-code
} [ execute( x -- ) ] with each ;

View File

@ -182,10 +182,7 @@ SYMBOL: live-phis
PRIVATE> PRIVATE>
: construct-ssa ( cfg -- cfg' ) : construct-ssa ( cfg -- )
{
[ compute-merge-sets ] [ compute-merge-sets ]
[ compute-defs compute-phis ] [ compute-defs compute-phis ]
[ rename compute-live-phis insert-phis ] [ rename compute-live-phis insert-phis ] tri ;
[ ]
} cleave ;

View File

@ -71,7 +71,7 @@ IN: compiler.cfg.tco
} cond } cond
] [ drop ] if ; ] [ drop ] if ;
: optimize-tail-calls ( cfg -- cfg' ) : optimize-tail-calls ( cfg -- )
dup [ optimize-tail-call ] each-basic-block 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 [ first skip-empty-blocks 1vector ] change-successors
instructions>> [ pop* ] [ [ ##branch new-insn ] dip push ] bi ; instructions>> [ pop* ] [ [ ##branch new-insn ] dip push ] bi ;
: delete-useless-conditionals ( cfg -- cfg' ) : delete-useless-conditionals ( cfg -- )
dup [ dup [
dup delete-conditional? [ delete-conditional ] [ drop ] if dup delete-conditional? [ delete-conditional ] [ drop ] if
] each-basic-block ] each-basic-block
cfg-changed predecessors-changed ; cfg-changed predecessors-changed drop ;

View File

@ -1,9 +1,6 @@
! Copyright (C) 2008, 2010 Slava Pestov. ! Copyright (C) 2008, 2010 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: namespaces arrays assocs kernel accessors USING: accessors arrays assocs
sorting sets sequences locals
cpu.architecture
sequences.deep
compiler.cfg compiler.cfg
compiler.cfg.rpo compiler.cfg.rpo
compiler.cfg.def-use compiler.cfg.def-use
@ -16,7 +13,9 @@ compiler.cfg.value-numbering.math
compiler.cfg.value-numbering.rewrite compiler.cfg.value-numbering.rewrite
compiler.cfg.value-numbering.slots compiler.cfg.value-numbering.slots
compiler.cfg.value-numbering.misc 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 IN: compiler.cfg.value-numbering
GENERIC: process-instruction ( insn -- insn' ) GENERIC: process-instruction ( insn -- insn' )
@ -53,7 +52,6 @@ M: array process-instruction
init-value-graph init-value-graph
[ process-instruction ] map flatten ; [ process-instruction ] map flatten ;
: value-numbering ( cfg -- cfg ) : value-numbering ( cfg -- )
dup [ value-numbering-step ] simple-optimization dup [ value-numbering-step ] simple-optimization
cfg-changed predecessors-changed drop ;
cfg-changed predecessors-changed ;