From cda06eba58c24c607cc5905a9381310813b78d41 Mon Sep 17 00:00:00 2001 From: Abdulaziz Ghuloum Date: Mon, 6 Jul 2009 12:07:18 +0300 Subject: [PATCH] added a parameter to switch between different letrec handling routines --- scheme/ikarus.compiler.optimize-letrec.ss | 18 ++++++++++++++---- scheme/ikarus.compiler.ss | 4 ++-- scheme/last-revision | 2 +- scheme/makefile.ss | 2 ++ 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/scheme/ikarus.compiler.optimize-letrec.ss b/scheme/ikarus.compiler.optimize-letrec.ss index 5deb478..347e068 100644 --- a/scheme/ikarus.compiler.optimize-letrec.ss +++ b/scheme/ikarus.compiler.optimize-letrec.ss @@ -1,6 +1,6 @@ -(module (debug-scc optimize-letrec) +(module (debug-scc optimize-letrec current-letrec-pass) (define (unique-prelex x) @@ -467,11 +467,21 @@ (define debug-scc (make-parameter #f)) - (define current-letrec-pass - (make-parameter optimize-letrec/scc)) + (define current-letrec-pass + (make-parameter 'scc + (lambda (x) + (if (memq x '(scc waddell basic)) + x + (die 'current-letrec-pass "invalid" x))))) + (define (optimize-letrec x) - ((current-letrec-pass) x))) + (case (current-letrec-pass) + [(scc) (optimize-letrec/scc x)] + [(waddell) (optimize-letrec/waddell x)] + [(basic) (optimize-letrec/basic x)] + [else (die 'optimize-letrec "invalid" (current-letrec-pass))])) +) diff --git a/scheme/ikarus.compiler.ss b/scheme/ikarus.compiler.ss index e71acf0..669ae96 100644 --- a/scheme/ikarus.compiler.ss +++ b/scheme/ikarus.compiler.ss @@ -22,7 +22,7 @@ expand expand/optimize expand/scc-letrec optimizer-output cp0-effort-limit cp0-size-limit optimize-level perform-tag-analysis tag-analysis-output - strip-source-info generate-debug-calls) + strip-source-info generate-debug-calls current-letrec-pass) (import (rnrs hashtables) (ikarus system $fx) @@ -37,7 +37,7 @@ cp0-size-limit cp0-effort-limit expand/optimize expand/scc-letrec expand optimizer-output tag-analysis-output perform-tag-analysis - current-core-eval) + current-core-eval current-letrec-pass) (ikarus include) (ikarus.fasl.write) (ikarus.intel-assembler)) diff --git a/scheme/last-revision b/scheme/last-revision index 91d59b9..eebf2dd 100644 --- a/scheme/last-revision +++ b/scheme/last-revision @@ -1 +1 @@ -1823 +1824 diff --git a/scheme/makefile.ss b/scheme/makefile.ss index c8fa99e..419ed1e 100755 --- a/scheme/makefile.ss +++ b/scheme/makefile.ss @@ -17,6 +17,7 @@ ;;; vim:syntax=scheme (import (only (ikarus) import)) (import (except (ikarus) + current-letrec-pass current-core-eval assembler-output optimize-cp optimize-level cp0-size-limit cp0-effort-limit expand/optimize @@ -1502,6 +1503,7 @@ [cp0-effort-limit i] [tag-analysis-output i] [perform-tag-analysis i] + [current-letrec-pass i] [pointer? $for] [pointer->integer $for] [integer->pointer $for]