X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fir1opt.lisp;h=3a495b496d727f43b57f84e461dfcfb7a6763220;hb=031646c3b8236eb441434664e10fb88f8e7ec7be;hp=78ae5a8d21fd0a9fd516151a4e7b3db21b5f207f;hpb=d4624e03c64b15a86594b12020da88d7e5167e4f;p=sbcl.git diff --git a/src/compiler/ir1opt.lisp b/src/compiler/ir1opt.lisp index 78ae5a8..3a495b4 100644 --- a/src/compiler/ir1opt.lisp +++ b/src/compiler/ir1opt.lisp @@ -57,9 +57,10 @@ (values-type-union (node-derived-type (first current)) res)) (current (rest uses) (rest current))) - ((null current) res))) + ((or (null current) (eq res *wild-type*)) + res))) (t - (node-derived-type (lvar-uses lvar)))))) + (node-derived-type uses))))) ;;; Return the derived type for LVAR's first value. This is guaranteed ;;; not to be a VALUES or FUNCTION type. @@ -181,7 +182,7 @@ (lambda-var-p (ref-leaf node))) (let ((type (single-value-type int))) (when (and (member-type-p type) - (null (rest (member-type-members type)))) + (eql 1 (member-type-size type))) (change-ref-leaf node (find-constant (first (member-type-members type))))))) (reoptimize-lvar lvar))))) @@ -843,12 +844,6 @@ (:inline t) (:no-chance nil) ((nil :maybe-inline) (policy call (zerop space)))) - ;; FIXME & KLUDGE: This LET-CONVERSION check was added as a - ;; half-assed workaround for the bug for which the test - ;; case :HIGH-DEBUG-KNOWN-FUNCTION-INLINING checks in - ;; compiler.pure.lisp. The _real_ culprit seems to be - ;; the insertion of BIND/UNBIND-SENTINEL vops. - (policy call (plusp let-conversion)) (defined-fun-p leaf) (defined-fun-inline-expansion leaf) (let ((fun (defined-fun-functional leaf))) @@ -1449,8 +1444,8 @@ *policy*))) (setf (cast-type-to-check cast) *wild-type*) (substitute-lvar-uses value arg - ;; FIXME - t) + ;; FIXME + t) (%delete-lvar-use ref) (add-lvar-use cast lvar))))) (setf (node-derived-type ref) *wild-type*) @@ -1555,7 +1550,6 @@ ;;; 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)) (let* ((vars (lambda-vars fun)) @@ -1723,10 +1717,13 @@ (with-ir1-environment-from-node node (let* ((dums (make-gensym-list count)) (ignore (gensym)) + (leaf (ref-leaf ref)) (fun (ir1-convert-lambda `(lambda (&optional ,@dums &rest ,ignore) (declare (ignore ,ignore)) - (funcall ,(ref-leaf ref) ,@dums))))) + (%funcall ,leaf ,@dums)) + :source-name (leaf-%source-name leaf) + :debug-name (leaf-%debug-name leaf)))) (change-ref-leaf ref fun) (aver (eq (basic-combination-kind node) :full)) (locall-analyze-component *current-component*)