mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-17 01:00:20 +02:00
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.
This commit is contained in:
parent
4792577ab8
commit
3b60e79879
3 changed files with 292 additions and 6 deletions
|
@ -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))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue