From 80f2726310c26f2efb64a8460352df19361130b0 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Thu, 29 Oct 2015 14:50:59 +0000 Subject: [PATCH] Better f64 unboxing for loop vars that might flow to $ktail * module/language/cps/specialize-numbers.scm (compute-specializable-f64-vars): Tweak to allow f64 values to flow directly to return sites. --- module/language/cps/specialize-numbers.scm | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/module/language/cps/specialize-numbers.scm b/module/language/cps/specialize-numbers.scm index 6d61f5b35..9aa803533 100644 --- a/module/language/cps/specialize-numbers.scm +++ b/module/language/cps/specialize-numbers.scm @@ -178,14 +178,20 @@ (match exp (($ $primcall 'scm->f64 (var)) (intset-add f64-uses var)) - (($ $values (var)) + (($ $values vars) (match (intmap-ref cps k) - (($ $kargs (_) (def)) - (if (intset-ref f64-defs def) - (intset-add f64-uses var) - f64-uses)) - ;; Could be $ktail. - (_ f64-uses))) + (($ $kargs _ defs) + (fold (lambda (var def f64-uses) + (if (intset-ref f64-defs def) + (intset-add f64-uses var) + f64-uses)) + f64-uses vars defs)) + (($ $ktail) + ;; Assume return is rare and that any f64-valued def can + ;; be reboxed when leaving the procedure. + (fold (lambda (var f64-uses) + (intset-add f64-uses var)) + f64-uses vars)))) (_ f64-uses))) (_ f64-uses))) body empty-intset))