optimize.scm 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. ;;; Tree-il optimizer
  2. ;; Copyright (C) 2009, 2011, 2012, 2013 Free Software Foundation, Inc.
  3. ;;;; This library is free software; you can redistribute it and/or
  4. ;;;; modify it under the terms of the GNU Lesser General Public
  5. ;;;; License as published by the Free Software Foundation; either
  6. ;;;; version 3 of the License, or (at your option) any later version.
  7. ;;;;
  8. ;;;; This library is distributed in the hope that it will be useful,
  9. ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11. ;;;; Lesser General Public License for more details.
  12. ;;;;
  13. ;;;; You should have received a copy of the GNU Lesser General Public
  14. ;;;; License along with this library; if not, write to the Free Software
  15. ;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  16. ;;; Code:
  17. (define-module (language tree-il optimize)
  18. #:use-module (language tree-il)
  19. #:use-module (language tree-il primitives)
  20. #:use-module (language tree-il peval)
  21. #:use-module (language tree-il cse)
  22. #:use-module (language tree-il fix-letrec)
  23. #:use-module (language tree-il debug)
  24. #:use-module (ice-9 match)
  25. #:export (optimize))
  26. (define (optimize x env opts)
  27. (let ((peval (match (memq #:partial-eval? opts)
  28. ((#:partial-eval? #f _ ...)
  29. ;; Disable partial evaluation.
  30. (lambda (x e) x))
  31. (_ peval)))
  32. (cse (match (memq #:cse? opts)
  33. ((#:cse? #f _ ...)
  34. ;; Disable CSE.
  35. (lambda (x) x))
  36. (_ cse))))
  37. (fix-letrec
  38. (verify-tree-il
  39. (cse
  40. (verify-tree-il
  41. (peval (expand-primitives (resolve-primitives x env))
  42. env)))))))