~ 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