]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/cfg/def-use/def-use.factor
CFG optimizer work in progress - adding phi nodes
[factor.git] / basis / compiler / cfg / def-use / def-use.factor
1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors arrays kernel compiler.cfg.instructions ;
4 IN: compiler.cfg.def-use
5
6 GENERIC: defs-vregs ( insn -- seq )
7 GENERIC: uses-vregs ( insn -- seq )
8
9 : dst/tmp-vregs ( insn -- seq ) [ dst>> ] [ temp>> ] bi 2array ;
10 M: ##flushable defs-vregs dst>> 1array ;
11 M: ##write-barrier defs-vregs [ card#>> ] [ table>> ] bi 2array ;
12 M: ##unary/temp defs-vregs dst/tmp-vregs ;
13 M: ##allot defs-vregs dst/tmp-vregs ;
14 M: ##dispatch defs-vregs temp>> 1array ;
15 M: ##slot defs-vregs dst/tmp-vregs ;
16 M: ##set-slot defs-vregs temp>> 1array ;
17 M: ##string-nth defs-vregs dst/tmp-vregs ;
18 M: ##set-string-nth-fast defs-vregs temp>> 1array ;
19 M: ##compare defs-vregs dst/tmp-vregs ;
20 M: ##compare-imm defs-vregs dst/tmp-vregs ;
21 M: ##compare-float defs-vregs dst/tmp-vregs ;
22 M: ##fixnum-mul defs-vregs [ temp1>> ] [ temp2>> ] bi 2array ;
23 M: ##fixnum-mul-tail defs-vregs [ temp1>> ] [ temp2>> ] bi 2array ;
24 M: insn defs-vregs drop f ;
25
26 M: ##unary uses-vregs src>> 1array ;
27 M: ##binary uses-vregs [ src1>> ] [ src2>> ] bi 2array ;
28 M: ##binary-imm uses-vregs src1>> 1array ;
29 M: ##effect uses-vregs src>> 1array ;
30 M: ##slot uses-vregs [ obj>> ] [ slot>> ] bi 2array ;
31 M: ##slot-imm uses-vregs obj>> 1array ;
32 M: ##set-slot uses-vregs [ src>> ] [ obj>> ] [ slot>> ] tri 3array ;
33 M: ##set-slot-imm uses-vregs [ src>> ] [ obj>> ] bi 2array ;
34 M: ##string-nth uses-vregs [ obj>> ] [ index>> ] bi 2array ;
35 M: ##set-string-nth-fast uses-vregs [ src>> ] [ obj>> ] [ index>> ] tri 3array ;
36 M: ##conditional-branch uses-vregs [ src1>> ] [ src2>> ] bi 2array ;
37 M: ##compare-imm-branch uses-vregs src1>> 1array ;
38 M: ##dispatch uses-vregs src>> 1array ;
39 M: ##alien-getter uses-vregs src>> 1array ;
40 M: ##alien-setter uses-vregs [ src>> ] [ value>> ] bi 2array ;
41 M: ##fixnum-overflow uses-vregs [ src1>> ] [ src2>> ] bi 2array ;
42 M: ##phi uses-vregs inputs>> ;
43 M: _conditional-branch uses-vregs [ src1>> ] [ src2>> ] bi 2array ;
44 M: _compare-imm-branch uses-vregs src1>> 1array ;
45 M: insn uses-vregs drop f ;
46
47 ! Instructions that use vregs
48 UNION: vreg-insn
49 ##flushable
50 ##write-barrier
51 ##dispatch
52 ##effect
53 ##fixnum-overflow
54 ##conditional-branch
55 ##compare-imm-branch
56 _conditional-branch
57 _compare-imm-branch ;