factor/basis/compiler/cfg/value-numbering/value-numbering.factor

40 lines
1.1 KiB
Factor
Raw Normal View History

! Copyright (C) 2008, 2009 Slava Pestov.
2008-10-19 02:10:21 -04:00
! See http://factorcode.org/license.txt for BSD license.
2008-10-22 22:59:07 -04:00
USING: namespaces assocs biassocs classes kernel math accessors
sorting sets sequences fry
compiler.cfg
compiler.cfg.local
compiler.cfg.liveness
compiler.cfg.renaming
2008-10-22 22:59:07 -04:00
compiler.cfg.value-numbering.graph
compiler.cfg.value-numbering.expressions
2008-10-23 03:49:26 -04:00
compiler.cfg.value-numbering.simplify
compiler.cfg.value-numbering.rewrite ;
2008-10-19 02:10:21 -04:00
IN: compiler.cfg.value-numbering
! Local value numbering. Predecessors must be recomputed after this
: number-input-values ( live-in -- )
2009-05-27 19:58:41 -04:00
[ [ f next-input-expr simplify ] dip set-vn ] each ;
: init-value-numbering ( live-in -- )
2008-10-19 02:10:21 -04:00
init-value-graph
init-expressions
number-input-values ;
: vreg>vreg-mapping ( -- assoc )
vregs>vns get [ keys ] keep
'[ dup _ [ at ] [ value-at ] bi ] H{ } map>assoc ;
: rename-uses ( insns -- )
vreg>vreg-mapping renamings [
[ rename-insn-uses ] each
] with-variable ;
: value-numbering-step ( insns -- insns' )
[ rewrite ] map dup rename-uses ;
: value-numbering ( cfg -- cfg' )
[ init-value-numbering ] [ value-numbering-step ] local-optimization
cfg-changed ;