Rework setting of globals and checking flags, for cps opt

This commit is contained in:
Justin Ethier 2019-02-13 18:53:43 -05:00
parent 3af8cef894
commit 53471fc4c1
2 changed files with 23 additions and 20 deletions

View file

@ -433,35 +433,40 @@
(trace:info "---------------- after CPS:") (trace:info "---------------- after CPS:")
(trace:info (ast:ast->pp-sexp input-program)) (trace:info (ast:ast->pp-sexp input-program))
(define ;(define
*cps-opt-options* ; *cps-opt-options*
(list ; (list
(cons 'module-globals module-globals) ; (cons 'module-globals module-globals)
;(cons) ; ;(cons)
)) ; ))
TODO: use this function to set module-globals and globals, then pass it instead of options above ;TODO: use this function to set module-globals and globals, then pass it instead of options above
(define (inject-globals lis) (define (inject-globals! lis)
(cons 'module-globals module-globals) (set! module-globals (append module-globals lis))
;(set! globals (union globals '())) ;; Ensure list is sorted (set! globals (append globals lis))
(set! globals (union globals '())) ;; Ensure list is sorted
) )
TODO: pass this function to check flags, instead of having search logic in CPS opt module ;TODO: pass this function to check flags, instead of having search logic in CPS opt module
(define (flag-set? flag) (define (flag-set? flag)
(cond
((eq? flag 'memoize-pure-functions)
#t)
(else #f)))
(when (> *optimization-level* 0) (when (> *optimization-level* 0)
(set! input-program (set! input-program
(optimize-cps input-program *cps-opt-options*)) (optimize-cps input-program inject-globals! flag-set?))
(report:elapsed "---------------- after cps optimizations (1):") (report:elapsed "---------------- after cps optimizations (1):")
(trace:info "---------------- after cps optimizations (1):") (trace:info "---------------- after cps optimizations (1):")
(trace:info (ast:ast->pp-sexp input-program)) (trace:info (ast:ast->pp-sexp input-program))
(set! input-program (set! input-program
(optimize-cps input-program *cps-opt-options*)) (optimize-cps input-program inject-globals! flag-set?))
(report:elapsed "---------------- after cps optimizations (2):") (report:elapsed "---------------- after cps optimizations (2):")
(trace:info "---------------- after cps optimizations (2):") (trace:info "---------------- after cps optimizations (2):")
(trace:info (ast:ast->pp-sexp input-program)) (trace:info (ast:ast->pp-sexp input-program))
(set! input-program (set! input-program
(optimize-cps input-program *cps-opt-options*)) (optimize-cps input-program inject-globals! flag-set?))
(report:elapsed "---------------- after cps optimizations (3):") (report:elapsed "---------------- after cps optimizations (3):")
(trace:info "---------------- after cps optimizations (3):") (trace:info "---------------- after cps optimizations (3):")
(trace:info (ast:ast->pp-sexp input-program)) (trace:info (ast:ast->pp-sexp input-program))

View file

@ -1700,7 +1700,7 @@
;; TODO: re-run phases again until program is stable (less than n opts made, more than r rounds performed, etc) ;; TODO: re-run phases again until program is stable (less than n opts made, more than r rounds performed, etc)
;; END notes ;; END notes
(define (optimize-cps ast . options) (define (optimize-cps ast add-globals! flag-set?)
(adb:clear!) (adb:clear!)
(analyze-cps ast) (analyze-cps ast)
(trace:info "---------------- cps analysis db:") (trace:info "---------------- cps analysis db:")
@ -1716,10 +1716,8 @@
) )
;; Memoize pure functions, if instructed ;; Memoize pure functions, if instructed
(let ((module-globals-pair (assoc 'module-globals (car options)))) (when (and (procedure? flag-set?) (flag-set? 'memoize-pure-functions))
(when (and module-globals-pair #t ;; TODO: (assoc 'memoize-pure-functions (car options)) (set! new-ast (opt:memoize-pure-fncs new-ast add-globals!))
)
(set! new-ast (opt:memoize-pure-fncs new-ast (cdr module-globals-pair))))
) )
new-ast new-ast
) )