delete compiler.cfg.gvn.redundancy-elimination

db4
Alex Vondrak 2011-06-27 15:43:24 -07:00 committed by John Benediktsson
parent 09c6a2c040
commit ffe70b55e9
2 changed files with 0 additions and 62 deletions

View File

@ -1 +0,0 @@
Alex Vondrak

View File

@ -1,61 +0,0 @@
! Copyright (C) 2011 Alex Vondrak.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors arrays assocs combinators.short-circuit
compiler.cfg.def-use compiler.cfg.gvn.avail
compiler.cfg.gvn.expressions compiler.cfg.gvn.graph
compiler.cfg.gvn.rewrite compiler.cfg.instructions
compiler.cfg.registers compiler.cfg.renaming.functor
compiler.cfg.rpo compiler.cfg.utilities kernel namespaces
sequences sequences.deep ;
IN: compiler.cfg.gvn.redundancy-elimination
RENAMING: copy-prop [ vreg>vn ] [ vreg>vn ] [ drop next-vreg ]
: copy-prop ( insn -- insn' )
dup vreg-insn? [ dup copy-prop-insn-uses ] when ;
GENERIC: update-insn ( insn -- insn/f )
: canonical-leader? ( vreg -- ? ) dup vreg>vn = ;
: check-redundancy? ( insn -- ? )
defs-vregs {
[ length 1 = ]
! [ first canonical-leader? not ]
} 1&& ;
: redundant? ( insn -- ? )
! [ dst>> ] [ >expr exprs>vns get at ] bi = not ;
>expr exprs>vns get key? ;
: check-redundancy ( insn -- insn/f )
dup check-redundancy? [
dup redundant?
[ [ dst>> ] [ >expr exprs>vns get at ] bi <copy> ]
[ make-available ] if
] when ;
M: insn update-insn
dup rewrite [ update-insn ] [ check-redundancy ] ?if ;
M: ##copy update-insn ;
M: array update-insn [ update-insn ] map ;
: (eliminate-redundancies) ( insns -- insns' )
[ update-insn ] map flatten sift ;
! USING: accessors io prettyprint compiler.cfg compiler.cfg.graphviz
! graphviz.render ;
: eliminate-redundancies ( cfg -- )
final-iteration? on
dup compute-avail-sets
[
! "Before:" print
! avail-ins get [ [ number>> ] [ keys ] bi* ] assoc-map .
(eliminate-redundancies)
! "After:" print
! avail-ins get [ [ number>> ] [ keys ] bi* ] assoc-map .
! cfg get cfgviz preview
] simple-optimization ;