]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/cfg/ssa/destruction/destruction.factor
b4d325e49a3753ca3572840de845f71962ff437f
[factor.git] / basis / compiler / cfg / ssa / destruction / destruction.factor
1 ! Copyright (C) 2009, 2011 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs compiler.cfg.def-use compiler.cfg.dominance
4 compiler.cfg.instructions compiler.cfg.liveness
5 compiler.cfg.parallel-copy compiler.cfg.rpo compiler.cfg.ssa.cssa
6 compiler.cfg.ssa.destruction.coalescing compiler.cfg.ssa.destruction.leaders
7 compiler.cfg.ssa.interference.live-ranges compiler.cfg.utilities
8 kernel make sequences ;
9 FROM: namespaces => set ;
10 IN: compiler.cfg.ssa.destruction
11
12 <PRIVATE
13
14 GENERIC: cleanup-insn ( insn -- )
15
16 : useful-copy? ( insn -- ? )
17     [ dst>> ] [ src>> ] bi leaders = not ; inline
18
19 M: ##copy cleanup-insn
20     dup useful-copy? [ , ] [ drop ] if ;
21
22 M: ##parallel-copy cleanup-insn
23     values>> [ leaders ] assoc-map [ first2 = ] reject
24     parallel-copy-rep % ;
25
26 M: ##tagged>integer cleanup-insn
27     dup useful-copy? [ , ] [ drop ] if ;
28
29 M: ##phi cleanup-insn drop ;
30
31 M: insn cleanup-insn , ;
32
33 : cleanup-cfg ( cfg -- )
34     [ [ [ cleanup-insn ] each ] V{ } make ] simple-optimization ;
35
36 PRIVATE>
37
38 : destruct-ssa ( cfg -- )
39     f leader-map set
40     {
41         needs-dominance
42         construct-cssa
43         compute-defs
44         compute-insns
45         compute-live-sets
46         compute-live-ranges
47         coalesce-cfg
48         cleanup-cfg
49         compute-live-sets
50     } apply-passes ;