compiler.cfg.ssa.destruction.leaders: break off leader-map to resolve circular dependencies (oops)

db4
Alex Vondrak 2012-12-31 10:30:17 -08:00 committed by Doug Coleman
parent dcb27c51e4
commit e90ce0865c
8 changed files with 23 additions and 12 deletions

View File

@ -9,7 +9,7 @@ compiler.cfg.liveness
compiler.cfg.registers compiler.cfg.registers
compiler.cfg.instructions compiler.cfg.instructions
compiler.cfg.linearization compiler.cfg.linearization
compiler.cfg.ssa.destruction compiler.cfg.ssa.destruction.leaders
compiler.cfg.renaming.functor compiler.cfg.renaming.functor
compiler.cfg.linear-scan.allocation compiler.cfg.linear-scan.allocation
compiler.cfg.linear-scan.allocation.state compiler.cfg.linear-scan.allocation.state

View File

@ -11,7 +11,7 @@ compiler.cfg.rpo
compiler.cfg.debugger compiler.cfg.debugger
compiler.cfg.def-use compiler.cfg.def-use
compiler.cfg.comparisons compiler.cfg.comparisons
compiler.cfg.ssa.destruction compiler.cfg.ssa.destruction.leaders
compiler.cfg.linear-scan compiler.cfg.linear-scan
compiler.cfg.linear-scan.numbering compiler.cfg.linear-scan.numbering
compiler.cfg.linear-scan.live-intervals compiler.cfg.linear-scan.live-intervals

View File

@ -7,7 +7,7 @@ compiler.cfg.registers
compiler.cfg.def-use compiler.cfg.def-use
compiler.cfg.liveness compiler.cfg.liveness
compiler.cfg.linearization compiler.cfg.linearization
compiler.cfg.ssa.destruction compiler.cfg.ssa.destruction.leaders
compiler.cfg compiler.cfg
cpu.architecture ; cpu.architecture ;
IN: compiler.cfg.linear-scan.live-intervals IN: compiler.cfg.linear-scan.live-intervals

View File

@ -3,7 +3,7 @@
USING: arrays kernel accessors assocs fry locals combinators USING: arrays kernel accessors assocs fry locals combinators
deques dlists namespaces sequences sets compiler.cfg deques dlists namespaces sequences sets compiler.cfg
compiler.cfg.def-use compiler.cfg.instructions compiler.cfg.def-use compiler.cfg.instructions
compiler.cfg.registers compiler.cfg.ssa.destruction compiler.cfg.registers compiler.cfg.ssa.destruction.leaders
compiler.cfg.utilities compiler.cfg.predecessors compiler.cfg.utilities compiler.cfg.predecessors
compiler.cfg.rpo cpu.architecture ; compiler.cfg.rpo cpu.architecture ;
FROM: namespaces => set ; FROM: namespaces => set ;
@ -55,8 +55,6 @@ GENERIC: visit-insn ( live-set insn -- live-set )
! representations) that would get lost if we just used the ! representations) that would get lost if we just used the
! leaders for everything. ! leaders for everything.
: ?leader ( vreg -- vreg' ) [ leader ] keep or ; inline
: kill-defs ( live-set insn -- live-set ) : kill-defs ( live-set insn -- live-set )
defs-vregs [ defs-vregs [
?leader '[ drop ?leader _ eq? not ] assoc-filter! ?leader '[ drop ?leader _ eq? not ] assoc-filter!

View File

@ -1,8 +1,8 @@
! Copyright (C) 2009 Slava Pestov. ! Copyright (C) 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: assocs cpu.architecture compiler.cfg.registers USING: assocs cpu.architecture compiler.cfg.registers
compiler.cfg.instructions compiler.cfg.ssa.destruction deques compiler.cfg.instructions compiler.cfg.ssa.destruction.leaders
dlists fry kernel locals namespaces sequences hashtables ; deques dlists fry kernel locals namespaces sequences hashtables ;
FROM: sets => conjoin ; FROM: sets => conjoin ;
IN: compiler.cfg.parallel-copy IN: compiler.cfg.parallel-copy

View File

@ -11,6 +11,7 @@ compiler.cfg.dominance
compiler.cfg.instructions compiler.cfg.instructions
compiler.cfg.liveness compiler.cfg.liveness
compiler.cfg.ssa.cssa compiler.cfg.ssa.cssa
compiler.cfg.ssa.destruction.leaders
compiler.cfg.ssa.interference compiler.cfg.ssa.interference
compiler.cfg.ssa.interference.live-ranges compiler.cfg.ssa.interference.live-ranges
compiler.cfg.parallel-copy compiler.cfg.parallel-copy
@ -33,10 +34,6 @@ IN: compiler.cfg.ssa.destruction
! compiler.cfg.liveness, so the linear scan register allocator ! compiler.cfg.liveness, so the linear scan register allocator
! does not need to compute liveness again. ! does not need to compute liveness again.
SYMBOL: leader-map
: leader ( vreg -- vreg' ) leader-map get compress-path ;
! Maps leaders to equivalence class elements. ! Maps leaders to equivalence class elements.
SYMBOL: class-element-map SYMBOL: class-element-map

View File

@ -0,0 +1 @@
Alex Vondrak

View File

@ -0,0 +1,15 @@
! Copyright (C) 2012 Alex Vondrak.
! See http://factorcode.org/license.txt for BSD license.
USING: compiler.utilities kernel namespaces ;
IN: compiler.cfg.ssa.destruction.leaders
! A map from vregs to canonical representatives due to
! coalescing done by SSA destruction. Used by liveness
! analysis and the register allocator, so we can use the
! original SSA names to get certain info (reaching definitions,
! representations).
SYMBOL: leader-map
: leader ( vreg -- vreg' ) leader-map get compress-path ;
: ?leader ( vreg -- vreg' ) [ leader ] keep or ; inline