0.8.16.6:
[sbcl.git] / src / compiler / gtn.lisp
index 876e14a..0c0d873 100644 (file)
@@ -73,9 +73,9 @@
              reversed-ir2-physenv-alist)))
 
     (let ((res (make-ir2-physenv
-               :environment (nreverse reversed-ir2-physenv-alist)
+               :closure (nreverse reversed-ir2-physenv-alist)
                :return-pc-pass (make-return-pc-passing-location
-                                (external-entry-point-p clambda)))))
+                                (xep-p clambda)))))
       (setf (physenv-info lambda-physenv) res)
       (setf (ir2-physenv-old-fp res)
            (make-old-fp-save-location lambda-physenv))
 
   (values))
 
-;;; Return true if FUN's result continuation is used in a
-;;; tail-recursive full call. We only consider explicit :FULL calls.
-;;; It is assumed that known calls are never part of a tail-recursive
-;;; loop, so we don't need to enforce tail-recursion. In any case, we
-;;; don't know which known calls will actually be full calls until
-;;; after LTN.
+;;; Return true if FUN's result is used in a tail-recursive full
+;;; call. We only consider explicit :FULL calls. It is assumed that
+;;; known calls are never part of a tail-recursive loop, so we don't
+;;; need to enforce tail-recursion. In any case, we don't know which
+;;; known calls will actually be full calls until after LTN.
 (defun has-full-call-use (fun)
   (declare (type clambda fun))
   (let ((return (lambda-return fun)))
 (defun use-standard-returns (tails)
   (declare (type tail-set tails))
   (let ((funs (tail-set-funs tails)))
-    (or (and (find-if #'external-entry-point-p funs)
+    (or (and (find-if #'xep-p funs)
             (find-if #'has-full-call-use funs))
        (block punt
          (dolist (fun funs t)
            (dolist (ref (leaf-refs fun))
-             (let* ((cont (node-cont ref))
-                    (dest (continuation-dest cont)))
-               (when (and dest
+             (let* ((lvar (node-lvar ref))
+                    (dest (and lvar (lvar-dest lvar))))
+               (when (and (basic-combination-p dest)
                           (not (node-tail-p dest))
-                          (basic-combination-p dest)
-                          (eq (basic-combination-fun dest) cont)
+                          (eq (basic-combination-fun dest) lvar)
                           (eq (basic-combination-kind dest) :local))
                  (return-from punt nil)))))))))
 
                     inhibit-warnings))
       (dolist (fun funs
                   (let ((*compiler-error-context* (lambda-bind (first funs))))
-                    (compiler-note
+                    (compiler-notify
                      "Return value count mismatch prevents known return ~
-                      from these functions:~
-                      ~{~%  ~A~}"
+                       from these functions:~
+                       ~{~%  ~A~}"
                      (mapcar #'leaf-source-name
                              (remove-if-not #'leaf-has-source-name-p funs)))))
        (let ((ret (lambda-return fun)))
                (declare (ignore ignore))
                (when (eq count :unknown)
                  (let ((*compiler-error-context* (lambda-bind fun)))
-                   (compiler-note
+                   (compiler-notify
                     "Return type not fixed values, so can't use known return ~
-                     convention:~%  ~S"
+                      convention:~%  ~S"
                     (type-specifier rtype)))
                  (return)))))))))
   (values))
   (multiple-value-bind (types count) (values-types (tail-set-type tails))
     (let ((ptypes (mapcar #'primitive-type types))
          (use-standard (use-standard-returns tails)))
-      (when (and (eq count :unknown) (not use-standard))
+      (when (and (eq count :unknown) (not use-standard)
+                 (not (eq (tail-set-type tails) *empty-type*)))
        (return-value-efficiency-note tails))
       (if (or (eq count :unknown) use-standard)
          (make-return-info :kind :unknown
         (return (lambda-return fun)))
     (when (and return
               (not (eq (return-info-kind returns) :unknown))
-              (external-entry-point-p fun))
+              (xep-p fun))
       (do-uses (use (return-result return))
        (setf (node-tail-p use) nil))))
   (values))