summaryrefslogtreecommitdiff
path: root/module/language/cps/optimize.scm
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2015-07-27 13:45:23 +0200
committerAndy Wingo <wingo@pobox.com>2015-07-27 13:45:23 +0200
commit3b60e79879c91bc5083f7a38db5a38ce4bfb4da8 (patch)
tree63c146ff358622efb562fcc095af3bd2f2539b60 /module/language/cps/optimize.scm
parent4792577ab8c5c6264a48cc8d6592ca7c1103c2c7 (diff)
downloadguile-3b60e79879c91bc5083f7a38db5a38ce4bfb4da8.tar.gz
Loop peeling
* module/language/cps/peel-loops.scm: New pass. Only enabled if the loop has one successor. * module/language/cps/optimize.scm: Peel instead of doing LICM on higher-order CPS, then LICM on first-order CPS. * module/Makefile.am: Wire up new pass.
Diffstat (limited to 'module/language/cps/optimize.scm')
-rw-r--r--module/language/cps/optimize.scm10
1 files changed, 4 insertions, 6 deletions
diff --git a/module/language/cps/optimize.scm b/module/language/cps/optimize.scm
index 7721d6385..c6576fc4a 100644
--- a/module/language/cps/optimize.scm
+++ b/module/language/cps/optimize.scm
@@ -30,6 +30,7 @@
#:use-module (language cps dce)
#:use-module (language cps elide-values)
#:use-module (language cps licm)
+ #:use-module (language cps peel-loops)
#:use-module (language cps prune-top-level-scopes)
#:use-module (language cps prune-bailouts)
#:use-module (language cps rotate-loops)
@@ -82,11 +83,6 @@
;; * Abort contification: turning abort primcalls into continuation
;; calls, and eliding prompts if possible.
;;
-;; * Loop peeling. Unrolls the first round through a loop if the
-;; loop has effects that CSE can work on. Requires effects
-;; analysis. When run before CSE, loop peeling is the equivalent
-;; of loop-invariant code motion (LICM).
-;;
(define-optimizer optimize-higher-order-cps
(split-rec #:split-rec? #t)
(eliminate-dead-code #:eliminate-dead-code? #t)
@@ -97,7 +93,7 @@
(specialize-primcalls #:specialize-primcalls? #t)
(elide-values #:elide-values? #t)
(prune-bailouts #:prune-bailouts? #t)
- (hoist-loop-invariant-code #:licm? #t)
+ (peel-loops #:peel-loops? #t)
(eliminate-common-subexpressions #:cse? #t)
(type-fold #:type-fold? #t)
(resolve-self-references #:resolve-self-references? #t)
@@ -105,6 +101,8 @@
(simplify #:simplify? #t))
(define-optimizer optimize-first-order-cps
+ (hoist-loop-invariant-code #:licm? #t)
+ ;; FIXME: CSE here to eliminate duplicate free-ref terms.
(eliminate-dead-code #:eliminate-dead-code? #t)
(rotate-loops #:rotate-loops? #t)
(simplify #:simplify? #t))