compiler.cfg.gvn: preparing for avail-based redundancy elimination
parent
cce1f9d859
commit
454c2f245b
|
@ -15,6 +15,10 @@ SYMBOL: exprs>vns
|
||||||
! assoc mapping value numbers to instructions
|
! assoc mapping value numbers to instructions
|
||||||
SYMBOL: vns>insns
|
SYMBOL: vns>insns
|
||||||
|
|
||||||
|
! assoc mapping basic blocks to the set of value numbers that
|
||||||
|
! are defined in the block
|
||||||
|
SYMBOL: bbs>defns
|
||||||
|
|
||||||
! boolean to track whether vregs>vns changes
|
! boolean to track whether vregs>vns changes
|
||||||
SYMBOL: changed?
|
SYMBOL: changed?
|
||||||
|
|
||||||
|
@ -27,12 +31,16 @@ SYMBOL: changed?
|
||||||
|
|
||||||
: vreg>insn ( vreg -- insn ) vreg>vn vn>insn ;
|
: vreg>insn ( vreg -- insn ) vreg>vn vn>insn ;
|
||||||
|
|
||||||
|
: defined ( bb -- vns ) bbs>defns get at ;
|
||||||
|
|
||||||
: clear-exprs ( -- )
|
: clear-exprs ( -- )
|
||||||
exprs>vns get clear-assoc
|
exprs>vns get clear-assoc
|
||||||
vns>insns get clear-assoc ;
|
vns>insns get clear-assoc
|
||||||
|
bbs>defns get clear-assoc ;
|
||||||
|
|
||||||
: init-value-graph ( -- )
|
: init-value-graph ( -- )
|
||||||
0 input-expr-counter set
|
0 input-expr-counter set
|
||||||
H{ } clone vregs>vns set
|
H{ } clone vregs>vns set
|
||||||
H{ } clone exprs>vns set
|
H{ } clone exprs>vns set
|
||||||
H{ } clone vns>insns set ;
|
H{ } clone vns>insns set
|
||||||
|
H{ } clone bbs>defns set ;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
! 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 fry grouping
|
USING: namespaces arrays assocs hashtables kernel accessors fry
|
||||||
sorting sets sequences locals
|
grouping sorting sets sequences locals
|
||||||
cpu.architecture
|
cpu.architecture
|
||||||
sequences.deep
|
sequences.deep
|
||||||
compiler.cfg
|
compiler.cfg
|
||||||
|
@ -29,6 +29,7 @@ GENERIC: process-instruction ( insn -- insn' )
|
||||||
vn vn set-vn
|
vn vn set-vn
|
||||||
vn expr exprs>vns get set-at
|
vn expr exprs>vns get set-at
|
||||||
insn vn vns>insns get set-at
|
insn vn vns>insns get set-at
|
||||||
|
vn vn basic-block get bbs>defns get [ ?set-at ] change-at
|
||||||
insn ;
|
insn ;
|
||||||
|
|
||||||
: check-redundancy ( insn -- insn' )
|
: check-redundancy ( insn -- insn' )
|
||||||
|
@ -62,6 +63,10 @@ M: array process-instruction
|
||||||
changed? get
|
changed? get
|
||||||
] loop ;
|
] loop ;
|
||||||
|
|
||||||
|
! FIXME can't just do a pass through the cfg to rewrite---not
|
||||||
|
! all canonical leaders are necessarily available in a
|
||||||
|
! particular rewrite
|
||||||
|
|
||||||
: eliminate-redundancies ( cfg -- )
|
: eliminate-redundancies ( cfg -- )
|
||||||
final-iteration? on
|
final-iteration? on
|
||||||
clear-exprs
|
clear-exprs
|
||||||
|
@ -69,5 +74,5 @@ M: array process-instruction
|
||||||
|
|
||||||
: value-numbering ( cfg -- cfg )
|
: value-numbering ( cfg -- cfg )
|
||||||
dup identify-redundancies
|
dup identify-redundancies
|
||||||
dup eliminate-redundancies
|
! dup eliminate-redundancies
|
||||||
cfg-changed predecessors-changed ;
|
cfg-changed predecessors-changed ;
|
||||||
|
|
Loading…
Reference in New Issue