~ chicken-core (chicken-5) 8324031c8e3c5ef89928a2e3f0c62a7c5523efee
commit 8324031c8e3c5ef89928a2e3f0c62a7c5523efee Author: felix <felix@call-with-current-continuation.org> AuthorDate: Fri Dec 30 12:40:12 2011 +0100 Commit: Christian Kellermann <ckeen@pestilenz.org> CommitDate: Mon Jan 23 13:26:03 2012 +0100 inline calls to variables known to be bound to intrinsic Signed-off-by: Christian Kellermann <ckeen@pestilenz.org> diff --git a/optimizer.scm b/optimizer.scm index 3d917ff4..72fbb208 100644 --- a/optimizer.scm +++ b/optimizer.scm @@ -304,6 +304,7 @@ (test var 'local-value)))] [args (cdr subs)] ) (cond ((test var 'contractable) + ;; only called once (let* ([lparams (node-parameters lval)] [llist (third lparams)] ) (check-signature var args llist) @@ -316,6 +317,7 @@ void) fids gae) ) ) ((variable-mark var '##compiler#pure) + ;; callee is side-effect free (or (and-let* ((k (car args)) ((eq? '##core#variable (node-class k))) (kvar (first (node-parameters k))) @@ -339,6 +341,7 @@ (walk-generic n class params subs fids gae #f)) ) ((and lval (eq? '##core#lambda (node-class lval))) + ;; callee is a lambda (let* ([lparams (node-parameters lval)] [llist (third lparams)] ) (decompose-lambda-list @@ -433,6 +436,18 @@ (invalidate-gae! gae) n2) ) ) ) ) ) (else (walk-generic n class params subs fids gae #t)) ) ) ) ) ) ) + ((and lval + (eq? '##core#variable (node-class lval)) + (intrinsic? (first (node-parameters lval)))) + ;; callee is intrinsic + (debugging 'i "inlining call to intrinsic alias" + var (first (node-parameters lval))) + (walk + (make-node + '##core#call + params + (cons lval (cdr subs))) + fids gae)) (else (walk-generic n class params subs fids gae #t)) ) ) ] [(##core#lambda) (if (first params)Trap