! Copyright (C) 2009, 2010 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: assocs compiler.cfg compiler.cfg.def-use compiler.cfg.dominance compiler.cfg.instructions compiler.cfg.liveness compiler.cfg.rpo kernel math namespaces sequences ; IN: compiler.cfg.ssa.interference.live-ranges : compute-live-ranges ( cfg -- ) H{ } clone def-indices set H{ } clone kill-indices set [ needs-dominance ] [ [ compute-local-live-ranges ] simple-analysis ] bi ; : def-index ( vreg bb -- n ) def-indices get at at ; ERROR: bad-kill-index vreg bb ; : kill-index ( vreg bb -- n ) 2dup live-out? [ 2drop 1/0. ] [ 2dup kill-indices get at at* [ 2nip ] [ drop 2dup live-in? [ bad-kill-index ] [ 2drop -1/0. ] if ] if ] if ;