]> gitweb.factorcode.org Git - factor.git/blob - unfinished/compiler/cfg.bluesky/write-barrier/write-barrier.factor
Merge branch 'master' of git://factorcode.org/git/factor
[factor.git] / unfinished / compiler / cfg.bluesky / write-barrier / write-barrier.factor
1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel accessors namespaces assocs sets sequences
4 compiler.vops compiler.cfg ;
5 IN: compiler.cfg.write-barrier
6
7 ! Eliminate redundant write barrier hits.
8 SYMBOL: hits
9
10 GENERIC: eliminate-write-barrier* ( insn -- insn' )
11
12 M: %%allot eliminate-write-barrier*
13     dup out>> hits get conjoin ;
14
15 M: %write-barrier eliminate-write-barrier*
16     dup in>> hits get key?
17     [ drop nop ] [ dup in>> hits get conjoin ] if ;
18
19 M: %copy eliminate-write-barrier*
20     dup in/out hits get copy-at ;
21
22 M: vop eliminate-write-barrier* ;
23
24 : eliminate-write-barrier ( insns -- insns )
25     H{ } clone hits set
26     [ eliminate-write-barrier* ] map ;