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
7 ! Eliminate redundant write barrier hits.
10 GENERIC: eliminate-write-barrier* ( insn -- insn' )
12 M: %%allot eliminate-write-barrier*
13 dup out>> hits get conjoin ;
15 M: %write-barrier eliminate-write-barrier*
16 dup in>> hits get key?
17 [ drop nop ] [ dup in>> hits get conjoin ] if ;
19 M: %copy eliminate-write-barrier*
20 dup in/out hits get copy-at ;
22 M: vop eliminate-write-barrier* ;
24 : eliminate-write-barrier ( insns -- insns )
26 [ eliminate-write-barrier* ] map ;