From 58447d94faa3bc8b9fc9324a9a70f72f4cac9991 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 17 May 2010 05:41:52 -0400 Subject: [PATCH] compiler.cfg.ssa.interference.live-ranges: compute correct live ranges for ##phi instructions --- .../interference/live-ranges/live-ranges.factor | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/basis/compiler/cfg/ssa/interference/live-ranges/live-ranges.factor b/basis/compiler/cfg/ssa/interference/live-ranges/live-ranges.factor index be45485134..d0c729556d 100644 --- a/basis/compiler/cfg/ssa/interference/live-ranges/live-ranges.factor +++ b/basis/compiler/cfg/ssa/interference/live-ranges/live-ranges.factor @@ -25,15 +25,23 @@ SYMBOLS: local-def-indices local-kill-indices ; [ 1 + ] dip [ local-kill-indices get set-at ] with each ] if ; -: visit-insn ( insn n -- ) - 2 * swap [ record-def ] [ record-uses ] 2bi ; +GENERIC: record-insn ( n insn -- ) + +M: ##phi record-insn + record-def ; + +M: vreg-insn record-insn + [ 2 * ] dip [ record-def ] [ record-uses ] 2bi ; + +M: insn record-insn + 2drop ; SYMBOLS: def-indices kill-indices ; : compute-local-live-ranges ( bb -- ) H{ } clone local-def-indices set H{ } clone local-kill-indices set - [ instructions>> [ visit-insn ] each-index ] + [ instructions>> [ swap record-insn ] each-index ] [ [ local-def-indices get ] dip def-indices get set-at ] [ [ local-kill-indices get ] dip kill-indices get set-at ] tri ;