compiler.cfg.registers
compiler.cfg.instructions
compiler.cfg.linearization
-compiler.cfg.ssa.destruction
+compiler.cfg.ssa.destruction.leaders
compiler.cfg.renaming.functor
compiler.cfg.linear-scan.allocation
compiler.cfg.linear-scan.allocation.state
compiler.cfg.debugger
compiler.cfg.def-use
compiler.cfg.comparisons
-compiler.cfg.ssa.destruction
+compiler.cfg.ssa.destruction.leaders
compiler.cfg.linear-scan
compiler.cfg.linear-scan.numbering
compiler.cfg.linear-scan.live-intervals
compiler.cfg.def-use
compiler.cfg.liveness
compiler.cfg.linearization
-compiler.cfg.ssa.destruction
+compiler.cfg.ssa.destruction.leaders
compiler.cfg
cpu.architecture ;
IN: compiler.cfg.linear-scan.live-intervals
USING: arrays kernel accessors assocs fry locals combinators
deques dlists namespaces sequences sets compiler.cfg
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.rpo cpu.architecture ;
FROM: namespaces => set ;
! representations) that would get lost if we just used the
! leaders for everything.
-: ?leader ( vreg -- vreg' ) [ leader ] keep or ; inline
-
: kill-defs ( live-set insn -- live-set )
defs-vregs [
?leader '[ drop ?leader _ eq? not ] assoc-filter!
! Copyright (C) 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: assocs cpu.architecture compiler.cfg.registers
-compiler.cfg.instructions compiler.cfg.ssa.destruction deques
-dlists fry kernel locals namespaces sequences hashtables ;
+compiler.cfg.instructions compiler.cfg.ssa.destruction.leaders
+deques dlists fry kernel locals namespaces sequences hashtables ;
FROM: sets => conjoin ;
IN: compiler.cfg.parallel-copy
compiler.cfg.instructions
compiler.cfg.liveness
compiler.cfg.ssa.cssa
+compiler.cfg.ssa.destruction.leaders
compiler.cfg.ssa.interference
compiler.cfg.ssa.interference.live-ranges
compiler.cfg.parallel-copy
! compiler.cfg.liveness, so the linear scan register allocator
! does not need to compute liveness again.
-SYMBOL: leader-map
-
-: leader ( vreg -- vreg' ) leader-map get compress-path ;
-
! Maps leaders to equivalence class elements.
SYMBOL: class-element-map
--- /dev/null
+Alex Vondrak
--- /dev/null
+! 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