summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2017-11-30 16:58:58 +0100
committerAndy Wingo <wingo@pobox.com>2017-11-30 16:58:58 +0100
commit5675e46410c9a24b05ddf58cbe3b998a4c9cad7c (patch)
treea72efb2a4726c90d212d00a1c62cc3f1a19f8616
parent2ab89102e7c82d114c0ac0ecd2a5d806637fdaab (diff)
downloadguile-5675e46410c9a24b05ddf58cbe3b998a4c9cad7c.tar.gz
-O1 disables call precoloring
* module/language/cps/compile-bytecode.scm (compile-function) (emit-bytecode): * module/language/cps/slot-allocation.scm (allocate-slots): * module/language/cps/optimize.scm (cps-default-optimization-options): Allow the "lazy vars" optimization, a form of slot precoloring, to be disabled. It will be disabled at -O0 or -O1, to speed compilation times.
-rw-r--r--module/language/cps/compile-bytecode.scm7
-rw-r--r--module/language/cps/optimize.scm4
-rw-r--r--module/language/cps/slot-allocation.scm8
3 files changed, 12 insertions, 7 deletions
diff --git a/module/language/cps/compile-bytecode.scm b/module/language/cps/compile-bytecode.scm
index 839313870..f7c8fbb5e 100644
--- a/module/language/cps/compile-bytecode.scm
+++ b/module/language/cps/compile-bytecode.scm
@@ -81,8 +81,9 @@
(_ forwarding-labels)))
cps empty-intmap)))
-(define (compile-function cps asm)
- (let* ((allocation (allocate-slots cps))
+(define (compile-function cps asm opts)
+ (let* ((allocation (allocate-slots cps #:precolor-calls?
+ (kw-arg-ref opts #:precolor-calls? #t)))
(forwarding-labels (compute-forwarding-labels cps allocation))
(frame-size (lookup-nlocals allocation)))
(define (forward-label k)
@@ -600,7 +601,7 @@
(define (emit-bytecode exp env opts)
(let ((asm (make-assembler)))
(intmap-for-each (lambda (kfun body)
- (compile-function (intmap-select exp body) asm))
+ (compile-function (intmap-select exp body) asm opts))
(compute-reachable-functions exp 0))
(values (link-assembly asm #:page-aligned? (kw-arg-ref opts #:to-file? #f))
env
diff --git a/module/language/cps/optimize.scm b/module/language/cps/optimize.scm
index e5f46b953..662191903 100644
--- a/module/language/cps/optimize.scm
+++ b/module/language/cps/optimize.scm
@@ -133,4 +133,6 @@
#:resolve-self-references? #t
#:specialize-numbers? #t
#:licm? #t
- #:rotate-loops? #t))
+ #:rotate-loops? #t
+ ;; This one is used by the slot allocator.
+ #:precolor-calls? #t))
diff --git a/module/language/cps/slot-allocation.scm b/module/language/cps/slot-allocation.scm
index 21f3e7fc2..d9963e3f8 100644
--- a/module/language/cps/slot-allocation.scm
+++ b/module/language/cps/slot-allocation.scm
@@ -793,13 +793,15 @@ are comparable with eqv?. A tmp slot may be used."
cps
empty-intmap))
-(define (allocate-slots cps)
+(define* (allocate-slots cps #:key (precolor-calls? #t))
(let*-values (((defs uses) (compute-defs-and-uses cps))
((representations) (compute-var-representations cps))
((live-in live-out) (compute-live-variables cps defs uses))
((needs-slot) (compute-needs-slot cps defs uses))
- ((lazy) (compute-lazy-vars cps live-in live-out defs
- needs-slot)))
+ ((lazy) (if precolor-calls?
+ (compute-lazy-vars cps live-in live-out defs
+ needs-slot)
+ empty-intset)))
(define (empty-live-slots)
#b0)