2011-05-22 20:15:56 -04:00
|
|
|
! Copyright (C) 2008, 2010 Slava Pestov.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
|
|
USING: accessors kernel math namespaces assocs ;
|
|
|
|
IN: compiler.cfg.gvn.graph
|
|
|
|
|
|
|
|
SYMBOL: input-expr-counter
|
|
|
|
|
2011-06-09 20:08:41 -04:00
|
|
|
! assoc mapping vregs to *optimistic* value numbers
|
|
|
|
! initialized per iteration of global value numbering
|
2011-05-22 20:15:56 -04:00
|
|
|
! this is the identity on canonical representatives
|
|
|
|
SYMBOL: vregs>vns
|
|
|
|
|
|
|
|
! assoc mapping expressions to value numbers
|
|
|
|
SYMBOL: exprs>vns
|
|
|
|
|
|
|
|
! assoc mapping value numbers to instructions
|
|
|
|
SYMBOL: vns>insns
|
|
|
|
|
2011-06-09 20:08:41 -04:00
|
|
|
! assoc mapping vregs to value numbers
|
|
|
|
! once this stops changing, we know the value numbers are sound
|
|
|
|
SYMBOL: valid-vns
|
2011-05-22 20:15:56 -04:00
|
|
|
|
2011-06-09 20:08:41 -04:00
|
|
|
! boolean to track whether valid-vns changes
|
2011-05-22 20:15:56 -04:00
|
|
|
SYMBOL: changed?
|
|
|
|
|
|
|
|
: vn>insn ( vn -- insn ) vns>insns get at ;
|
|
|
|
|
2011-06-09 20:08:41 -04:00
|
|
|
: vreg>vn ( vreg -- vn ) valid-vns get at ;
|
2011-05-22 20:15:56 -04:00
|
|
|
|
2011-06-09 20:08:41 -04:00
|
|
|
: optimistic-vn ( default-vn vreg -- vn )
|
2011-05-22 20:15:56 -04:00
|
|
|
vregs>vns get ?at
|
|
|
|
[ nip ]
|
|
|
|
[ dupd vregs>vns get set-at ] if ;
|
|
|
|
|
2011-06-09 20:08:41 -04:00
|
|
|
: set-vn ( default-vn vreg -- )
|
|
|
|
[ optimistic-vn ] keep
|
|
|
|
valid-vns get maybe-set-at [ changed? on ] when ;
|
2011-05-22 20:15:56 -04:00
|
|
|
|
|
|
|
: vreg>insn ( vreg -- insn ) vreg>vn vn>insn ;
|
|
|
|
|
2011-06-09 20:08:41 -04:00
|
|
|
: clear-optimistic-value-graph ( -- )
|
|
|
|
vregs>vns get clear-assoc
|
|
|
|
exprs>vns get clear-assoc
|
|
|
|
vns>insns get clear-assoc ;
|
2011-05-22 20:15:56 -04:00
|
|
|
|
|
|
|
: init-value-graph ( -- )
|
|
|
|
0 input-expr-counter set
|
2011-06-09 20:08:41 -04:00
|
|
|
H{ } clone valid-vns set
|
2011-05-22 20:15:56 -04:00
|
|
|
H{ } clone vregs>vns set
|
|
|
|
H{ } clone exprs>vns set
|
|
|
|
H{ } clone vns>insns set ;
|