compiler.cfg.liveness: look up leaders (if possible) so liveness analysis doesn't break after leaving SSA (issue #22)
parent
b08c077023
commit
86a15ad47b
|
@ -3,8 +3,9 @@
|
||||||
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.utilities
|
compiler.cfg.registers compiler.cfg.ssa.destruction
|
||||||
compiler.cfg.predecessors compiler.cfg.rpo cpu.architecture ;
|
compiler.cfg.utilities compiler.cfg.predecessors
|
||||||
|
compiler.cfg.rpo cpu.architecture ;
|
||||||
FROM: namespaces => set ;
|
FROM: namespaces => set ;
|
||||||
IN: compiler.cfg.liveness
|
IN: compiler.cfg.liveness
|
||||||
|
|
||||||
|
@ -44,11 +45,19 @@ SYMBOL: base-pointers
|
||||||
|
|
||||||
GENERIC: visit-insn ( live-set insn -- live-set )
|
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 )
|
: 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 )
|
: 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
|
M: vreg-insn visit-insn
|
||||||
[ kill-defs ] [ gen-uses ] bi ;
|
[ kill-defs ] [ gen-uses ] bi ;
|
||||||
|
|
Loading…
Reference in New Issue