diff options
author | Andy Wingo <wingo@pobox.com> | 2020-05-08 16:47:07 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2020-05-08 17:07:56 +0200 |
commit | 4311dc9858ba7c6db50a851e95fc7c387b9381b2 (patch) | |
tree | 6ad4eaa887b09aadea70c0664eb5ddf66becb136 /module/language/tree-il/optimize.scm | |
parent | e9c0f3071dedb0f6b39757e920cdc182435c8725 (diff) | |
download | guile-4311dc9858ba7c6db50a851e95fc7c387b9381b2.tar.gz |
Define new "lowering" phase in compiler
* module/language/cps/compile-bytecode.scm (compile-bytecode):
* module/language/tree-il/compile-bytecode.scm (compile-bytecode):
* module/language/tree-il/compile-cps.scm (compile-cps): Rely on
compiler to lower incoming term already.
* module/language/tree-il/optimize.scm (make-lowerer): New procedure.
* module/system/base/compile.scm (compute-lowerer): New procedure,
replaceing add-default-optimizations.
(compute-compiler): Lower before running compiler.
* module/system/base/language.scm (<language>): Change
optimizations-for-level field to "lowerer".
* module/scripts/compile.scm (%options, compile): Parse -O0, -O1 and so
on to #:optimization-level instead of expanding to all the
optimization flags.
* module/language/cps/optimize.scm (lower-cps): Move here from
compile-bytecode.scm.
(make-cps-lowerer): New function.
* module/language/cps/spec.scm (cps): Declare lowerer.
Diffstat (limited to 'module/language/tree-il/optimize.scm')
-rw-r--r-- | module/language/tree-il/optimize.scm | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/module/language/tree-il/optimize.scm b/module/language/tree-il/optimize.scm index 4123781bc..66725b9b6 100644 --- a/module/language/tree-il/optimize.scm +++ b/module/language/tree-il/optimize.scm @@ -28,6 +28,7 @@ #:use-module (language tree-il primitives) #:use-module (ice-9 match) #:export (optimize + make-lowerer tree-il-optimizations)) (define (kw-arg-ref args kw default) @@ -75,3 +76,14 @@ (#:seal-private-bindings? 3) (#:partial-eval? 1) (#:eta-expand? 2))) + +(define (make-lowerer optimization-level opts) + (define (enabled-for-level? level) (<= level optimization-level)) + (let ((opts (let lp ((all-opts (tree-il-optimizations))) + (match all-opts + (() '()) + (((kw level) . all-opts) + (acons kw (kw-arg-ref opts kw (enabled-for-level? level)) + (lp all-opts))))))) + (lambda (exp env) + (optimize exp env opts)))) |