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
parent
cf3c0d96a1
commit
8744d908b6
|
@ -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 ;
|
||||
|
|
|
@ -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 ;
|
||||
|
|
|
@ -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 ;
|
||||
|
|
|
@ -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 ;
|
||||
|
|
|
@ -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 ]
|
||||
|
|
|
@ -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 ;
|
||||
|
|
|
@ -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 ;
|
||||
|
|
|
@ -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 ;
|
||||
|
|
|
@ -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 ;
|
||||
|
|
|
@ -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 ;
|
||||
|
|
|
@ -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 ;
|
||||
|
|
Loading…
Reference in New Issue