diff options
author | Andy Wingo <wingo@pobox.com> | 2015-07-27 13:45:23 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2015-07-27 13:45:23 +0200 |
commit | 3b60e79879c91bc5083f7a38db5a38ce4bfb4da8 (patch) | |
tree | 63c146ff358622efb562fcc095af3bd2f2539b60 /module/language/cps/optimize.scm | |
parent | 4792577ab8c5c6264a48cc8d6592ca7c1103c2c7 (diff) | |
download | guile-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.scm | 10 |
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)) |