[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 01/12: Renumber before CSE
From: |
Andy Wingo |
Subject: |
[Guile-commits] 01/12: Renumber before CSE |
Date: |
Fri, 29 May 2020 10:34:06 -0400 (EDT) |
wingo pushed a commit to branch master
in repository guile.
commit cf948e0f6f61ec3f2e3f5a798315d116d380a8f7
Author: Andy Wingo <wingo@pobox.com>
AuthorDate: Thu May 28 11:15:20 2020 +0200
Renumber before CSE
* module/language/cps/cse.scm (compute-equivalent-subexpressions):
Assume renumbered program.
(eliminate-common-subexpressions): Renumber. Will allow optimizations
later.
---
module/language/cps/cse.scm | 26 ++++++++++++++------------
1 file changed, 14 insertions(+), 12 deletions(-)
diff --git a/module/language/cps/cse.scm b/module/language/cps/cse.scm
index 53b8a51..ec1685c 100644
--- a/module/language/cps/cse.scm
+++ b/module/language/cps/cse.scm
@@ -31,6 +31,7 @@
#:use-module (language cps effects-analysis)
#:use-module (language cps intmap)
#:use-module (language cps intset)
+ #:use-module (language cps renumber)
#:export (eliminate-common-subexpressions))
(define (compute-available-expressions succs kfun effects)
@@ -284,14 +285,14 @@ false. It could be that both true and false proofs are
available."
((u <- untag-char #f s) (s <- tag-char #f u))
((s <- tag-char #f u) (u <- untag-char #f s)))))
- (define (visit-label label equiv-labels var-substs)
+ (define (visit-label label cont equiv-labels var-substs)
(define (term-defs term)
(match term
(($ $continue k)
(and (intset-ref singly-referenced k)
(intmap-ref defs label)))
(($ $branch) '())))
- (match (intmap-ref conts label)
+ (match cont
(($ $kargs names vars term)
(match (compute-term-key var-substs term)
(#f (values equiv-labels var-substs))
@@ -343,12 +344,12 @@ false. It could be that both true and false proofs are
available."
defs)))))))))))
(_ (values equiv-labels var-substs))))
- ;; Traverse the labels in fun in reverse post-order, which will
- ;; visit definitions before uses first.
- (fold2 visit-label
- (compute-reverse-post-order succs kfun)
- equiv-labels
- var-substs)))
+ ;; Because of the renumber pass, the labels are numbered in
+ ;; reverse post-order, which will visit definitions before uses.
+ (intmap-fold visit-label
+ conts
+ equiv-labels
+ var-substs)))
(intmap-fold visit-fun
(compute-reachable-functions conts kfun)
@@ -413,7 +414,8 @@ false. It could be that both true and false proofs are
available."
conts))
(define (eliminate-common-subexpressions conts)
- (call-with-values (lambda () (compute-equivalent-subexpressions conts 0))
- (lambda (equiv-labels var-substs)
- (let ((truthy-labels (compute-truthy-expressions conts 0)))
- (apply-cse conts equiv-labels var-substs truthy-labels)))))
+ (let ((conts (renumber conts 0)))
+ (call-with-values (lambda () (compute-equivalent-subexpressions conts 0))
+ (lambda (equiv-labels var-substs)
+ (let ((truthy-labels (compute-truthy-expressions conts 0)))
+ (apply-cse conts equiv-labels var-substs truthy-labels))))))
- [Guile-commits] branch master updated (4677c12 -> 4c59ff7), Andy Wingo, 2020/05/29
- [Guile-commits] 01/12: Renumber before CSE,
Andy Wingo <=
- [Guile-commits] 03/12: Refactor CSE to analyze and transform in a single pass, Andy Wingo, 2020/05/29
- [Guile-commits] 04/12: CSE eliminates expressions at continuations, Andy Wingo, 2020/05/29
- [Guile-commits] 02/12: Refactor CSE to take advantage of RPO numbering, Andy Wingo, 2020/05/29
- [Guile-commits] 06/12: Macro fix to CPS build-term, Andy Wingo, 2020/05/29
- [Guile-commits] 05/12: Thread flow analysis through CSE pass, Andy Wingo, 2020/05/29
- [Guile-commits] 07/12: Add indentation rule for let/ec, Andy Wingo, 2020/05/29
- [Guile-commits] 09/12: Use intmaps in CSE equivalent expression table, Andy Wingo, 2020/05/29
- [Guile-commits] 11/12: CSE forwards branch predecessors where the branch folds, Andy Wingo, 2020/05/29
- [Guile-commits] 12/12: CSE forward-propagates changes to CFG, Andy Wingo, 2020/05/29
- [Guile-commits] 08/12: Eager graph pruning in CSE, Andy Wingo, 2020/05/29