2008-10-19 02:10:21 -04:00
|
|
|
! Copyright (C) 2008 Slava Pestov.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2008-10-22 22:59:07 -04:00
|
|
|
USING: accessors kernel math namespaces assocs biassocs ;
|
2008-10-19 02:10:21 -04:00
|
|
|
IN: compiler.cfg.value-numbering.graph
|
|
|
|
|
|
|
|
SYMBOL: vn-counter
|
|
|
|
|
|
|
|
: next-vn ( -- vn ) vn-counter [ dup 1 + ] change ;
|
|
|
|
|
|
|
|
! biassoc mapping expressions to value numbers
|
|
|
|
SYMBOL: exprs>vns
|
|
|
|
|
2009-09-02 07:22:37 -04:00
|
|
|
TUPLE: expr ;
|
2009-07-22 04:08:28 -04:00
|
|
|
|
2008-10-19 02:10:21 -04:00
|
|
|
: expr>vn ( expr -- vn ) exprs>vns get [ drop next-vn ] cache ;
|
|
|
|
|
|
|
|
: vn>expr ( vn -- expr ) exprs>vns get value-at ;
|
|
|
|
|
2009-07-22 04:08:28 -04:00
|
|
|
! Expressions whose values are inputs to the basic block.
|
|
|
|
TUPLE: input-expr < expr n ;
|
|
|
|
|
|
|
|
SYMBOL: input-expr-counter
|
|
|
|
|
|
|
|
: next-input-expr ( -- expr )
|
2009-09-02 07:22:37 -04:00
|
|
|
input-expr-counter counter input-expr boa ;
|
2009-07-22 04:08:28 -04:00
|
|
|
|
2008-10-19 02:10:21 -04:00
|
|
|
SYMBOL: vregs>vns
|
|
|
|
|
2009-07-22 04:08:28 -04:00
|
|
|
: vreg>vn ( vreg -- vn )
|
|
|
|
vregs>vns get [ drop next-input-expr expr>vn ] cache ;
|
2008-10-19 02:10:21 -04:00
|
|
|
|
|
|
|
: vn>vreg ( vn -- vreg ) vregs>vns get value-at ;
|
|
|
|
|
|
|
|
: set-vn ( vn vreg -- ) vregs>vns get set-at ;
|
|
|
|
|
2008-10-22 22:59:07 -04:00
|
|
|
: vreg>expr ( vreg -- expr ) vreg>vn vn>expr ; inline
|
|
|
|
|
|
|
|
: vn>constant ( vn -- constant ) vn>expr value>> ; inline
|
|
|
|
|
2009-07-02 12:32:23 -04:00
|
|
|
: vreg>constant ( vreg -- constant ) vreg>vn vn>constant ; inline
|
|
|
|
|
2008-10-19 02:10:21 -04:00
|
|
|
: init-value-graph ( -- )
|
|
|
|
0 vn-counter set
|
2009-09-02 07:22:37 -04:00
|
|
|
0 input-expr-counter set
|
2008-10-19 02:10:21 -04:00
|
|
|
<bihash> exprs>vns set
|
|
|
|
<bihash> vregs>vns set ;
|