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

39 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.
USING: namespaces assocs kernel accessors
sorting sets sequences
compiler.cfg
compiler.cfg.rpo
compiler.cfg.instructions
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
: >copy ( insn -- ##copy )
dst>> dup vreg>vn vn>vreg \ ##copy new-insn ;
: rewrite-loop ( insn -- insn' )
dup rewrite [ rewrite-loop ] [ ] ?if ;
GENERIC: process-instruction ( insn -- insn' )
M: ##flushable process-instruction
dup rewrite
[ process-instruction ]
[ dup number-values [ >copy ] when ] ?if ;
M: insn process-instruction
dup rewrite
[ process-instruction ] [ ] ?if ;
: value-numbering-step ( insns -- insns' )
init-value-graph
init-expressions
[ process-instruction ] map ;
: value-numbering ( cfg -- cfg' )
[ value-numbering-step ] local-optimization cfg-changed ;