Update of /cvsroot/sbcl/sbcl/src/compiler
In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv25951/src/compiler
220.127.116.11: propagate-local-call-args for lambdas with optional-dispatches too
Previously we elided the propagation if the lambda had an entry-fun
or an optional-dispatch. The comment notes that we "If the function
has an XEP, then we don't do anything".
There are, however, lambdas with optional-dispatche that don't have
XEPs. Doing propagation for these is required for proper &REST list
RCS file: /cvsroot/sbcl/sbcl/src/compiler/ir1opt.lisp,v
retrieving revision 1.139
retrieving revision 1.140
diff -u -d -r1.139 -r1.140
--- ir1opt.lisp 18 Jul 2009 17:44:42 -0000 1.139
+++ ir1opt.lisp 6 Oct 2010 08:59:32 -0000 1.140
@@ -1706,8 +1706,8 @@
;;; variable, we compute the union of the types across all calls and
;;; propagate this type information to the var's refs.
-;;; If the function has an XEP, then we don't do anything, since we
-;;; won't discover anything.
+;;; If the function has an entry-fun, then we don't do anything: since
+;;; it has a XEP we would not discover anything.
;;; We can clear the LVAR-REOPTIMIZE flags for arguments in all calls
;;; corresponding to changed arguments in CALL, since the only use in
@@ -1715,8 +1715,7 @@
;;; right here.
(defun propagate-local-call-args (call fun)
(declare (type combination call) (type clambda fun))
- (unless (or (functional-entry-fun fun)
- (lambda-optional-dispatch fun))
+ (unless (functional-entry-fun fun)
(let* ((vars (lambda-vars fun))
(union (mapcar (lambda (arg var)
(when (and arg