]> gitweb.factorcode.org Git - factor.git/blob - unfinished/compiler/cfg.bluesky/vn/constant-fold/constant-fold.factor
Merge branch 'master' of git://factorcode.org/git/factor
[factor.git] / unfinished / compiler / cfg.bluesky / vn / constant-fold / constant-fold.factor
1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors kernel compiler.vops compiler.cfg.vn.graph
4 compiler.cfg.vn.expressions ;
5 IN: compiler.cfg.vn.constant-fold
6
7 GENERIC: constant-fold ( insn -- insn' )
8
9 M: vop constant-fold ;
10
11 : expr>insn ( out constant-expr -- constant-op )
12     [ value>> ] [ op>> ] bi new swap >>value swap >>out ;
13
14 M: pure-op constant-fold
15     dup out>>
16     dup vreg>vn vn>expr
17     dup constant-expr? [ expr>insn nip ] [ 2drop ] if ;