compiler.cfg.liveness: look up leaders (if possible) so liveness analysis doesn't break after leaving SSA (issue #22)

db4
Alex Vondrak 2012-12-29 10:59:25 -08:00 committed by Doug Coleman
parent b08c077023
commit 86a15ad47b
1 changed files with 13 additions and 4 deletions

View File

@ -3,8 +3,9 @@
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.utilities
compiler.cfg.predecessors compiler.cfg.rpo cpu.architecture ;
compiler.cfg.registers compiler.cfg.ssa.destruction
compiler.cfg.utilities compiler.cfg.predecessors
compiler.cfg.rpo cpu.architecture ;
FROM: namespaces => set ;
IN: compiler.cfg.liveness
@ -44,11 +45,19 @@ SYMBOL: base-pointers
GENERIC: visit-insn ( live-set insn -- live-set )
! If liveness analysis is run after SSA destruction, we need to
! use the canonical vreg representatives (leaders) because SSA
! destruction does not rename the old vregs.
: kill-defs ( live-set insn -- live-set )
defs-vregs [ over delete-at ] each ; inline
defs-vregs [
[ leader ] keep or over delete-at
] each ; inline
: gen-uses ( live-set insn -- live-set )
uses-vregs [ over conjoin ] each ; inline
uses-vregs [
[ leader ] keep or over conjoin
] each ; inline
M: vreg-insn visit-insn
[ kill-defs ] [ gen-uses ] bi ;