0.7.8.1:
authorAlexey Dejneka <adejneka@comail.ru>
Fri, 27 Sep 2002 01:57:13 +0000 (01:57 +0000)
committerAlexey Dejneka <adejneka@comail.ru>
Fri, 27 Sep 2002 01:57:13 +0000 (01:57 +0000)
        VALUES-LIST is no longer flushed when its values is not used.

NEWS
src/compiler/ir2tran.lisp
tests/compiler.pure.lisp
version.lisp-expr

diff --git a/NEWS b/NEWS
index 012ca20..6bacac8 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1297,6 +1297,9 @@ changes in sbcl-0.7.8 relative to sbcl-0.7.7:
     incremented seemed like the simplest and most conservative
     thing to do.)
 
+changes in sbcl-0.7.9 relative to sbcl-0.7.8:
+  * fixed bug: VALUES-LIST is no longer optimized away
+
 planned incompatible changes in 0.7.x:
 * When the profiling interface settles down, maybe in 0.7.x, maybe
   later, it might impact TRACE. They both encapsulate functions, and
index 9059525..d32325b 100644 (file)
 (defoptimizer (values-list ir2-convert) ((list) node block)
   (let* ((cont (node-cont node))
         (2cont (continuation-info cont)))
-    (when 2cont
-      (ecase (ir2-continuation-kind 2cont)
-       (:fixed (ir2-convert-full-call node block))
-       (:unknown
-        (let ((locs (ir2-continuation-locs 2cont)))
-          (vop* values-list node block
-                ((continuation-tn node block list) nil)
-                ((reference-tn-list locs t)))))))))
+    (cond ((and 2cont
+                (eq (ir2-continuation-kind 2cont) :unknown))
+           (let ((locs (ir2-continuation-locs 2cont)))
+             (vop* values-list node block
+                   ((continuation-tn node block list) nil)
+                   ((reference-tn-list locs t)))))
+          (t (aver (or (not 2cont) ; i.e. we want to check the argument
+                       (eq (ir2-continuation-kind 2cont) :fixed)))
+             (ir2-convert-full-call node block)))))
 
 (defoptimizer (%more-arg-values ir2-convert) ((context start count) node block)
   (let* ((cont (node-cont node))
index 07872ae..1dbd339 100644 (file)
   (assert (not (eval `(locally (declare (optimize (safety 0)))
                         (ignore-errors (progn ,form t)))))))
 
-(dolist (form '(#+nil(values-list '(1 . 2)) ; This case still fails
+(dolist (form '((values-list (car (list '(1 . 2))))
                 (fboundp '(set bet))
                 (atan #c(1 1) (car (list #c(2 2))))
                 (nthcdr (car (list (floor (cos 3)))) '(1 2 3 4 5))
index 6e870c1..752a85d 100644 (file)
@@ -18,4 +18,4 @@
 ;;; internal versions off the main CVS branch, it gets hairier, e.g.
 ;;; "0.pre7.14.flaky4.13".)
 
-"0.7.8"
+"0.7.8.1"