diff --git a/scheme/cyclone/cps-opt-memoize-pure-fncs.scm b/scheme/cyclone/cps-opt-memoize-pure-fncs.scm index c0e35bc2..47319f4c 100644 --- a/scheme/cyclone/cps-opt-memoize-pure-fncs.scm +++ b/scheme/cyclone/cps-opt-memoize-pure-fncs.scm @@ -113,7 +113,7 @@ ) ;; Transformation to memoize simple recursive numeric functions -(define (opt:memoize-pure-fncs sexp) +(define (opt:memoize-pure-fncs sexp module-globals) (define memo-tbl '()) ;; exp - S-expression to scan @@ -321,12 +321,13 @@ )) -(let ((ast (ast:sexp->ast sexp))) +(let ((ast (ast:sexp->ast sexp)) + (module-globals (list))) (analyze-cps ast) ;(analyze:find-recursive-calls ast) (pretty-print (ast:ast->pp-sexp - (opt:memoize-pure-fncs ast)))) + (opt:memoize-pure-fncs ast module-globals)))) ;; (pretty-print ;; (ast:ast->pp-sexp diff --git a/scheme/cyclone/cps-optimizations.sld b/scheme/cyclone/cps-optimizations.sld index 1e20c0a7..b2632534 100644 --- a/scheme/cyclone/cps-optimizations.sld +++ b/scheme/cyclone/cps-optimizations.sld @@ -1700,7 +1700,7 @@ ;; TODO: re-run phases again until program is stable (less than n opts made, more than r rounds performed, etc) ;; END notes - (define (optimize-cps ast) + (define (optimize-cps ast . options) (adb:clear!) (analyze-cps ast) (trace:info "---------------- cps analysis db:") @@ -1715,10 +1715,12 @@ ;; (program size? heuristics? what else??) ) - ;; TODO: when memo flag (need to pass in) is enabled - (when #t - (set! new-ast (opt:memoize-pure-fncs new-ast))) - + ;; Memoize pure functions, if instructed + (let ((module-globals (assoc 'module-globals options))) + (when (and module-globals #t ;; TODO: (assoc 'memoize-pure-functions options) + ) + (set! new-ast (opt:memoize-pure-fncs new-ast module-globals))) + ) new-ast ) )