diff options
Diffstat (limited to 'module/language')
-rw-r--r-- | module/language/cps/compile-bytecode.scm | 6 | ||||
-rw-r--r-- | module/language/cps/optimize.scm | 29 | ||||
-rw-r--r-- | module/language/tree-il/optimize.scm | 8 |
3 files changed, 36 insertions, 7 deletions
diff --git a/module/language/cps/compile-bytecode.scm b/module/language/cps/compile-bytecode.scm index 5b0c32990..86c9d307d 100644 --- a/module/language/cps/compile-bytecode.scm +++ b/module/language/cps/compile-bytecode.scm @@ -34,6 +34,7 @@ #:use-module (language cps optimize) #:use-module (language cps reify-primitives) #:use-module (language cps renumber) + #:use-module (language cps split-rec) #:use-module (language cps intmap) #:use-module (language cps intset) #:use-module (system vm assembler) @@ -513,6 +514,11 @@ env))) (define (lower-cps exp opts) + ;; FIXME: For now the closure conversion pass relies on $rec instances + ;; being separated into SCCs. We should fix this to not be the case, + ;; and instead move the split-rec pass back to + ;; optimize-higher-order-cps. + (set! exp (split-rec exp)) (set! exp (optimize-higher-order-cps exp opts)) (set! exp (convert-closures exp)) (set! exp (optimize-first-order-cps exp opts)) diff --git a/module/language/cps/optimize.scm b/module/language/cps/optimize.scm index c6576fc4a..8777222c9 100644 --- a/module/language/cps/optimize.scm +++ b/module/language/cps/optimize.scm @@ -37,11 +37,11 @@ #:use-module (language cps self-references) #:use-module (language cps simplify) #:use-module (language cps specialize-primcalls) - #:use-module (language cps split-rec) #:use-module (language cps type-fold) #:use-module (language cps verify) #:export (optimize-higher-order-cps - optimize-first-order-cps)) + optimize-first-order-cps + cps-default-optimization-options)) (define (kw-arg-ref args kw default) (match (memq kw args) @@ -75,8 +75,7 @@ (maybe-verify (pass program)) program)) ... - (verify program) - program)) + (maybe-verify program))) ;; Passes that are needed: ;; @@ -84,7 +83,11 @@ ;; calls, and eliding prompts if possible. ;; (define-optimizer optimize-higher-order-cps - (split-rec #:split-rec? #t) + ;; FIXME: split-rec call temporarily moved to compile-bytecode and run + ;; unconditionally, because closure conversion requires it. Move the + ;; pass back here when that's fixed. + ;; + ;; (split-rec #:split-rec? #t) (eliminate-dead-code #:eliminate-dead-code? #t) (prune-top-level-scopes #:prune-top-level-scopes? #t) (simplify #:simplify? #t) @@ -106,3 +109,19 @@ (eliminate-dead-code #:eliminate-dead-code? #t) (rotate-loops #:rotate-loops? #t) (simplify #:simplify? #t)) + +(define (cps-default-optimization-options) + (list ;; #:split-rec? #t + #:eliminate-dead-code? #t + #:prune-top-level-scopes? #t + #:contify? #t + #:inline-constructors? #t + #:specialize-primcalls? #t + #:elide-values? #t + #:prune-bailouts? #t + #:peel-loops? #t + #:cse? #t + #:type-fold? #t + #:resolve-self-references? #t + #:licm? #t + #:rotate-loops? #t)) diff --git a/module/language/tree-il/optimize.scm b/module/language/tree-il/optimize.scm index d5d4f43a0..8fa6a80e8 100644 --- a/module/language/tree-il/optimize.scm +++ b/module/language/tree-il/optimize.scm @@ -1,6 +1,6 @@ ;;; Tree-il optimizer -;; Copyright (C) 2009, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. +;; Copyright (C) 2009, 2011, 2012, 2013, 2014, 2015 Free Software Foundation, Inc. ;;;; This library is free software; you can redistribute it and/or ;;;; modify it under the terms of the GNU Lesser General Public @@ -25,7 +25,8 @@ #:use-module (language tree-il fix-letrec) #:use-module (language tree-il debug) #:use-module (ice-9 match) - #:export (optimize)) + #:export (optimize + tree-il-default-optimization-options)) (define (optimize x env opts) (let ((peval (match (memq #:partial-eval? opts) @@ -37,3 +38,6 @@ (verify-tree-il (peval (expand-primitives (resolve-primitives x env)) env))))) + +(define (tree-il-default-optimization-options) + '(#:partial-eval? #t)) |