From 54876d0cba8e892e5298166d456c191fd43e53d1 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 30 Jun 2009 18:10:53 -0500 Subject: [PATCH] compiler.cfg.linear-scan.assignment: get check-assignment? to work with coalescing --- .../compiler/cfg/linear-scan/assignment/assignment.factor | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/basis/compiler/cfg/linear-scan/assignment/assignment.factor b/basis/compiler/cfg/linear-scan/assignment/assignment.factor index 1a7f32a0ea..ea717f9218 100644 --- a/basis/compiler/cfg/linear-scan/assignment/assignment.factor +++ b/basis/compiler/cfg/linear-scan/assignment/assignment.factor @@ -108,11 +108,14 @@ SYMBOL: check-assignment? ERROR: overlapping-registers intervals ; +: check-assignment ( intervals -- ) + dup [ copy-from>> ] map sift '[ vreg>> _ member? not ] filter + dup [ reg>> ] map all-unique? [ drop ] [ overlapping-registers ] if ; + : active-intervals ( insn -- intervals ) insn#>> pending-intervals get [ covers? ] with filter check-assignment? get [ - dup [ reg>> ] map all-unique? - [ overlapping-registers ] unless + dup check-assignment ] when ; M: vreg-insn assign-registers-in-insn