[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 05/12: Closure conversion uses immediate variants of vec
From: |
Andy Wingo |
Subject: |
[Guile-commits] 05/12: Closure conversion uses immediate variants of vector instructions |
Date: |
Sat, 11 Nov 2017 16:12:25 -0500 (EST) |
wingo pushed a commit to branch master
in repository guile.
commit b27065fdf27aa43fa8b31ba16b6c691064efe762
Author: Andy Wingo <address@hidden>
Date: Thu Nov 9 14:03:23 2017 +0100
Closure conversion uses immediate variants of vector instructions
* module/language/cps/closure-conversion.scm (convert-one): Use
immediate variants of vector instructions.
---
module/language/cps/closure-conversion.scm | 33 +++++++++---------------------
1 file changed, 10 insertions(+), 23 deletions(-)
diff --git a/module/language/cps/closure-conversion.scm
b/module/language/cps/closure-conversion.scm
index 298784d..6553e2c 100644
--- a/module/language/cps/closure-conversion.scm
+++ b/module/language/cps/closure-conversion.scm
@@ -488,16 +488,12 @@ Otherwise @var{var} is bound, so @var{k} is called with
@var{var}."
(cond
(self-known?
(with-cps cps
- (letv var* u64)
+ (letv var*)
(let$ body (k var*))
(letk k* ($kargs (#f) (var*) ,body))
- (letk kunbox ($kargs ('idx) (u64)
- ($continue k* #f
- ($primcall 'vector-ref #f (self u64)))))
- ($ (with-cps-constants ((idx idx))
- (build-term
- ($continue kunbox #f
- ($primcall 'scm->u64 #f (idx))))))))
+ (build-term
+ ($continue k* #f
+ ($primcall 'vector-ref/immediate idx (self))))))
(else
(with-cps cps
(letv var*)
@@ -546,14 +542,10 @@ term."
(unless (> nfree 2)
(error "unexpected well-known nullary, unary, or binary closure"))
(with-cps cps
- ($ (with-cps-constants ((nfree nfree)
- (false #f))
- (letv u64)
- (letk kunbox ($kargs ('nfree) (u64)
- ($continue k src
- ($primcall 'make-vector #f (u64 false)))))
+ ($ (with-cps-constants ((false #f))
(build-term
- ($continue kunbox src ($primcall 'scm->u64 #f
(nfree))))))))))
+ ($continue k src
+ ($primcall 'make-vector/immediate nfree (false))))))))))
(define (init-closure cps k src var known? free)
"Initialize the free variables @var{closure-free} in a closure
@@ -598,14 +590,9 @@ bound to @var{var}, and continue to @var{k}."
(known?
(with-cps cps
(letv u64)
- (letk kunbox
- ($kargs ('idx) (u64)
- ($continue k src
- ($primcall 'vector-set! #f (var u64
v)))))
- ($ (with-cps-constants ((idx idx))
- (build-term
- ($continue kunbox src
- ($primcall 'scm->u64 #f (idx))))))))
+ (build-term
+ ($continue k src
+ ($primcall 'vector-set!/immediate idx (var
v))))))
(else
(with-cps cps
(build-term
- [Guile-commits] branch master updated (f96a670 -> 83a03a3), Andy Wingo, 2017/11/11
- [Guile-commits] 01/12: Fix effects analysis bug introduced with primcall param, Andy Wingo, 2017/11/11
- [Guile-commits] 02/12: Refactor numeric comparison bytecode emission, Andy Wingo, 2017/11/11
- [Guile-commits] 05/12: Closure conversion uses immediate variants of vector instructions,
Andy Wingo <=
- [Guile-commits] 06/12: Use immediate primcalls when unfolding constructors, Andy Wingo, 2017/11/11
- [Guile-commits] 09/12: Convert "ash" to "lsh"/"rsh" when lowering to CPS, Andy Wingo, 2017/11/11
- [Guile-commits] 12/12: Specialize rsh/lsh, not ash, Andy Wingo, 2017/11/11
- [Guile-commits] 07/12: Add tag-fixnum instruction, Andy Wingo, 2017/11/11
- [Guile-commits] 08/12: Compiler uses target fixnum range, Andy Wingo, 2017/11/11
- [Guile-commits] 03/12: Canonicalize <=, >=, and > primcalls to <, Andy Wingo, 2017/11/11
- [Guile-commits] 11/12: Add missing lsh/immediate, rsh/immediate type inferrers, Andy Wingo, 2017/11/11
- [Guile-commits] 04/12: Specialize comparisons to SCM as s64, Andy Wingo, 2017/11/11
- [Guile-commits] 10/12: Type folding has "macro reduction" phase, Andy Wingo, 2017/11/11