mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-16 01:07:34 +02:00
WIP
This commit is contained in:
parent
8cb0dd1b20
commit
bee311de80
1 changed files with 19 additions and 7 deletions
|
@ -1207,17 +1207,17 @@
|
|||
(define (inline-prim-call? exp scope-sym ivars args)
|
||||
(let ((fast-inline #t)
|
||||
(cannot-inline #f))
|
||||
(for-each
|
||||
(lambda (v)
|
||||
(with-var v (lambda (var)
|
||||
(if (adbv:mutated-by-set? var)
|
||||
(set! cannot-inline #t)))))
|
||||
args)
|
||||
;(for-each
|
||||
; (lambda (v)
|
||||
; (with-var v (lambda (var)
|
||||
; (if (adbv:mutated-by-set? var)
|
||||
; (set! cannot-inline #t)))))
|
||||
; args)
|
||||
(for-each
|
||||
(lambda (v)
|
||||
(with-var v (lambda (var)
|
||||
(if (or (member scope-sym (adbv:mutated-indirectly var))
|
||||
(adbv:mutated-by-set? var) ;; TOO restrictive, only matters if set! occurs in body we
|
||||
;(adbv:mutated-by-set? var) ;; TOO restrictive, only matters if set! occurs in body we
|
||||
) ;; are inlining to. Also, does not catch cases where the
|
||||
;; var might be mutated by a function call outside this
|
||||
;; module (but hopefully we already catch that elsewhere).
|
||||
|
@ -1306,6 +1306,18 @@
|
|||
; (inline-ok? (cadr exp) ivars args arg-used return)
|
||||
;)
|
||||
(else
|
||||
;(when (ref? (car exp))
|
||||
; (with-var (car exp) (lambda (var)
|
||||
; (when (adbv:defines-lambda-id var)
|
||||
; ;TODO: return #f if any ivars are members of vars-mutated-by-set from the adbf
|
||||
; (with-fnc (adbv:defines-lambda-id var) (lambda (fnc)
|
||||
; (for-each
|
||||
; (lambda (ivar)
|
||||
; (if (member ivar (adbf:vars-mutated-by-set fnc))
|
||||
; (return #f))
|
||||
; )
|
||||
; ivars))))
|
||||
; )))
|
||||
(for-each
|
||||
(lambda (e)
|
||||
(inline-ok? e ivars args arg-used return))
|
||||
|
|
Loading…
Add table
Reference in a new issue