2009-07-10 00:14:26 -04:00
|
|
|
! 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
|
2009-07-10 00:14:26 -04:00
|
|
|
sorting sets sequences fry
|
2009-07-14 21:43:06 -04:00
|
|
|
compiler.cfg
|
2009-05-31 13:20:46 -04:00
|
|
|
compiler.cfg.local
|
2009-05-29 14:11:34 -04:00
|
|
|
compiler.cfg.liveness
|
2009-07-10 00:14:26 -04:00
|
|
|
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
|
|
|
|
|
2009-07-14 21:05:01 -04:00
|
|
|
! Local value numbering. Predecessors must be recomputed after this
|
|
|
|
|
2009-05-26 20:56:56 -04:00
|
|
|
: number-input-values ( live-in -- )
|
2009-05-27 19:58:41 -04:00
|
|
|
[ [ f next-input-expr simplify ] dip set-vn ] each ;
|
2009-05-26 20:31:19 -04:00
|
|
|
|
2009-05-26 20:56:56 -04:00
|
|
|
: init-value-numbering ( live-in -- )
|
2008-10-19 02:10:21 -04:00
|
|
|
init-value-graph
|
|
|
|
init-expressions
|
2009-05-26 20:56:56 -04:00
|
|
|
number-input-values ;
|
|
|
|
|
2009-07-10 00:14:26 -04:00
|
|
|
: 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 ;
|
|
|
|
|
2009-05-26 20:56:56 -04:00
|
|
|
: value-numbering-step ( insns -- insns' )
|
2009-07-14 17:05:25 -04:00
|
|
|
[ rewrite ] map dup rename-uses ;
|
2009-05-26 20:31:19 -04:00
|
|
|
|
2009-05-29 14:11:34 -04:00
|
|
|
: value-numbering ( cfg -- cfg' )
|
2009-07-14 21:43:06 -04:00
|
|
|
[ init-value-numbering ] [ value-numbering-step ] local-optimization
|
|
|
|
cfg-changed ;
|