compiler.cfg.ssa.live-ranges: clean up
parent
2a137bed0e
commit
291543c300
|
@ -1,8 +1,9 @@
|
||||||
! Copyright (C) 2009 Slava Pestov.
|
! Copyright (C) 2009, 2010 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors assocs fry kernel namespaces sequences math
|
USING: accessors assocs fry kernel namespaces sequences math
|
||||||
arrays compiler.cfg.def-use compiler.cfg.instructions
|
arrays compiler.cfg.def-use compiler.cfg.instructions
|
||||||
compiler.cfg.liveness.ssa compiler.cfg.rpo compiler.cfg.dominance ;
|
compiler.cfg.liveness.ssa compiler.cfg.rpo
|
||||||
|
compiler.cfg.dominance compiler.cfg ;
|
||||||
IN: compiler.cfg.ssa.interference.live-ranges
|
IN: compiler.cfg.ssa.interference.live-ranges
|
||||||
|
|
||||||
! Live ranges for interference testing
|
! Live ranges for interference testing
|
||||||
|
@ -12,18 +13,14 @@ IN: compiler.cfg.ssa.interference.live-ranges
|
||||||
SYMBOLS: local-def-indices local-kill-indices ;
|
SYMBOLS: local-def-indices local-kill-indices ;
|
||||||
|
|
||||||
: record-def ( n insn -- )
|
: record-def ( n insn -- )
|
||||||
! We allow multiple defs of a vreg as long as they're
|
defs-vreg dup [ local-def-indices get set-at ] [ 2drop ] if ;
|
||||||
! all in the same basic block
|
|
||||||
defs-vreg dup [
|
|
||||||
local-def-indices get 2dup key?
|
|
||||||
[ 3drop ] [ set-at ] if
|
|
||||||
] [ 2drop ] if ;
|
|
||||||
|
|
||||||
: record-uses ( n insn -- )
|
: record-uses ( n insn -- )
|
||||||
! Record live intervals so that all but the first input interfere
|
! Record live intervals so that all but the first input interfere
|
||||||
! with the output. This lets us coalesce the output with the
|
! with the output. This lets us coalesce the output with the
|
||||||
! first input.
|
! first input.
|
||||||
[ uses-vregs ] [ def-is-use-insn? ] bi over empty? [ 3drop ] [
|
dup uses-vregs dup empty? [ 3drop ] [
|
||||||
|
swap def-is-use-insn?
|
||||||
[ [ first local-kill-indices get set-at ] [ rest-slice ] 2bi ] unless
|
[ [ first local-kill-indices get set-at ] [ rest-slice ] 2bi ] unless
|
||||||
[ 1 + ] dip [ local-kill-indices get set-at ] with each
|
[ 1 + ] dip [ local-kill-indices get set-at ] with each
|
||||||
] if ;
|
] if ;
|
||||||
|
|
Loading…
Reference in New Issue