summaryrefslogtreecommitdiff
path: root/module/system/base/compile.scm
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2020-05-08 16:47:07 +0200
committerAndy Wingo <wingo@pobox.com>2020-05-08 17:07:56 +0200
commit4311dc9858ba7c6db50a851e95fc7c387b9381b2 (patch)
tree6ad4eaa887b09aadea70c0664eb5ddf66becb136 /module/system/base/compile.scm
parente9c0f3071dedb0f6b39757e920cdc182435c8725 (diff)
downloadguile-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/system/base/compile.scm')
-rw-r--r--module/system/base/compile.scm12
1 files changed, 6 insertions, 6 deletions
diff --git a/module/system/base/compile.scm b/module/system/base/compile.scm
index 7ec2da3c2..3ea1e7aca 100644
--- a/module/system/base/compile.scm
+++ b/module/system/base/compile.scm
@@ -224,11 +224,11 @@
((#:warnings warnings . _) warnings)
((_ _ . opts) (lp opts))))))))
-(define (add-default-optimizations lang optimization-level opts)
+(define (compute-lowerer lang optimization-level opts)
(level-validator optimization-level)
- (match (language-optimizations-for-level lang)
- (#f opts)
- (get-opts (append opts (get-opts optimization-level)))))
+ (match (language-lowerer lang)
+ (#f (lambda (exp env) exp))
+ (proc (proc optimization-level opts))))
(define (compute-compiler from to optimization-level warning-level opts)
(let lp ((order (or (lookup-compilation-order from to)
@@ -237,10 +237,10 @@
(() (lambda (exp env) (values exp env env)))
(((lang . pass) . order)
(let* ((analyze (compute-analyzer lang warning-level opts))
- (opts (add-default-optimizations lang optimization-level opts))
+ (lower (compute-lowerer lang optimization-level opts))
(compile (lambda (exp env)
(analyze exp env)
- (pass exp env opts)))
+ (pass (lower exp env) env opts)))
(tail (lp order)))
(lambda (exp env)
(let*-values (((exp env cenv) (compile exp env))