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 ]
|
[ 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 ;
|
||||||
|
|
|
@ -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 ;
|
||||||
|
|
|
@ -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 ;
|
||||||
|
|
|
@ -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 ;
|
|
||||||
|
|
|
@ -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 ]
|
||||||
|
|
|
@ -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 ;
|
||||||
|
|
|
@ -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 ;
|
||||||
|
|
|
@ -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 ;
|
|
||||||
|
|
|
@ -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 ;
|
||||||
|
|
|
@ -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 ;
|
||||||
|
|
|
@ -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 ;
|
|
||||||
|
|
Loading…
Reference in New Issue