mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-12 23:00:22 +02:00
cse passes a lookup procedure to the effects analyzer
* module/language/tree-il/cse.scm (cse): Arrange to pass a lookup procedure to compute-effects, for better effects analysis.
This commit is contained in:
parent
83bd53abb6
commit
63216d80de
1 changed files with 17 additions and 4 deletions
|
@ -177,7 +177,7 @@
|
||||||
(lambda (sym)
|
(lambda (sym)
|
||||||
(vhash-assq sym table))))
|
(vhash-assq sym table))))
|
||||||
|
|
||||||
(define compute-effects
|
(define %compute-effects
|
||||||
(make-effects-analyzer assigned-lexical?))
|
(make-effects-analyzer assigned-lexical?))
|
||||||
|
|
||||||
(define (negate exp ctx)
|
(define (negate exp ctx)
|
||||||
|
@ -201,9 +201,6 @@
|
||||||
(make-application #f (make-primitive-ref #f 'not) (list exp)))))
|
(make-application #f (make-primitive-ref #f 'not) (list exp)))))
|
||||||
|
|
||||||
|
|
||||||
(define (bailout? exp)
|
|
||||||
(causes-effects? (compute-effects exp) &definite-bailout))
|
|
||||||
|
|
||||||
(define (hasher n)
|
(define (hasher n)
|
||||||
(lambda (x size) (modulo n size)))
|
(lambda (x size) (modulo n size)))
|
||||||
|
|
||||||
|
@ -338,6 +335,16 @@
|
||||||
(make-lexical-ref (tree-il-src exp) name sym)
|
(make-lexical-ref (tree-il-src exp) name sym)
|
||||||
(lp (1+ n) (- db-len db-len*))))))))))))
|
(lp (1+ n) (- db-len db-len*))))))))))))
|
||||||
|
|
||||||
|
(define (lookup-lexical sym env)
|
||||||
|
(let ((env-len (vlist-length env)))
|
||||||
|
(let lp ((n 0))
|
||||||
|
(and (< n env-len)
|
||||||
|
(match (vlist-ref env n)
|
||||||
|
((#(exp _ sym* _) . _)
|
||||||
|
(if (eq? sym sym*)
|
||||||
|
exp
|
||||||
|
(lp (1+ n)))))))))
|
||||||
|
|
||||||
(define (intersection db+ db-)
|
(define (intersection db+ db-)
|
||||||
(vhash-fold-right
|
(vhash-fold-right
|
||||||
(lambda (k h out)
|
(lambda (k h out)
|
||||||
|
@ -365,6 +372,12 @@
|
||||||
(lp (cdr in) (cons x out) (concat db** db*))))
|
(lp (cdr in) (cons x out) (concat db** db*))))
|
||||||
(values (reverse out) db*))))
|
(values (reverse out) db*))))
|
||||||
|
|
||||||
|
(define (compute-effects exp)
|
||||||
|
(%compute-effects exp (lambda (sym) (lookup-lexical sym env))))
|
||||||
|
|
||||||
|
(define (bailout? exp)
|
||||||
|
(causes-effects? (compute-effects exp) &definite-bailout))
|
||||||
|
|
||||||
(define (return exp db*)
|
(define (return exp db*)
|
||||||
(let ((effects (compute-effects exp)))
|
(let ((effects (compute-effects exp)))
|
||||||
(cond
|
(cond
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue