[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 25/27: Better f64 unboxing for loop vars that might flow
From: |
Andy Wingo |
Subject: |
[Guile-commits] 25/27: Better f64 unboxing for loop vars that might flow to $ktail |
Date: |
Wed, 11 Nov 2015 11:39:16 +0000 |
wingo pushed a commit to branch master
in repository guile.
commit 80f2726310c26f2efb64a8460352df19361130b0
Author: Andy Wingo <address@hidden>
Date: Thu Oct 29 14:50:59 2015 +0000
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 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/module/language/cps/specialize-numbers.scm
b/module/language/cps/specialize-numbers.scm
index 6d61f5b..9aa8035 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))
- [Guile-commits] 11/27: Remove use of return in disassembler.scm, (continued)
- [Guile-commits] 11/27: Remove use of return in disassembler.scm, Andy Wingo, 2015/11/11
- [Guile-commits] 10/27: rtl.test uses return-values, Andy Wingo, 2015/11/11
- [Guile-commits] 13/27: Treat tail $values as generating lazy allocations, Andy Wingo, 2015/11/11
- [Guile-commits] 14/27: VM support for raw slots, Andy Wingo, 2015/11/11
- [Guile-commits] 15/27: Reflection support for unboxed f64 slots, Andy Wingo, 2015/11/11
- [Guile-commits] 06/27: return-values opcode resets the frame, Andy Wingo, 2015/11/11
- [Guile-commits] 20/27: Scalar replacement for f64->scm, Andy Wingo, 2015/11/11
- [Guile-commits] 21/27: Add fadd, fsub, fmul, fdiv instructions, Andy Wingo, 2015/11/11
- [Guile-commits] 23/27: Fix slot representation computation for fadd, fmul, etc, Andy Wingo, 2015/11/11
- [Guile-commits] 19/27: bv-{f32, f64}-{ref, set!} operate on raw f64 values, Andy Wingo, 2015/11/11
- [Guile-commits] 25/27: Better f64 unboxing for loop vars that might flow to $ktail,
Andy Wingo <=
- [Guile-commits] 17/27: Add VM ops to pack and unpack raw f64 values., Andy Wingo, 2015/11/11
- [Guile-commits] 03/27: CSE can run on first-order CPS, Andy Wingo, 2015/11/11
- [Guile-commits] 16/27: Stack slots can hold a double, Andy Wingo, 2015/11/11
- [Guile-commits] 12/27: Remove return opcode, Andy Wingo, 2015/11/11
- [Guile-commits] 09/27: Always emit return-values, Andy Wingo, 2015/11/11
- [Guile-commits] 08/27: Replace return primcalls with $values, Andy Wingo, 2015/11/11
- [Guile-commits] 24/27: The compiler can unbox float64 loop variables, Andy Wingo, 2015/11/11
- [Guile-commits] 26/27: Remove debug printout in specialize-numbers, Andy Wingo, 2015/11/11
- [Guile-commits] 18/27: Type inference distinguishes between untagged and tagged flonums, Andy Wingo, 2015/11/11
- [Guile-commits] 02/27: Revert "Bootstrap build doesn't have to expand CPS optimizations", Andy Wingo, 2015/11/11