1.0.24.34: IR2: additional representation for predicates, conditional moves
[sbcl.git] / src / compiler / policy.lisp
index d0beebe..d5fe59d 100644 (file)
@@ -37,7 +37,7 @@ This is intended to be used interactively, to facilitate recompiling large
 bodies of code with eg. a known minimum safety.
 
 EXPERIMENTAL INTERFACE: Subject to change."
-  (declare (policy-quality min))
+  (declare (type policy-quality min))
   (when quality
     (aver (policy-quality-name-p quality))
     (if (zerop min)
@@ -72,6 +72,16 @@ EXPERIMENTAL INTERFACE: Subject to change."
   (or (memq x *policy-qualities*)
       (assq x *policy-dependent-qualities*)))
 
+;;; Is it deprecated?
+(defun policy-quality-deprecation-warning (quality spec)
+  (when (member quality '(stack-allocate-dynamic-extent stack-allocate-vector
+                          stack-allocate-value-cells))
+    (make-instance 'simple-reference-warning
+                   :format-control "~@<Ignoring deprecated optimization quality ~S in:~_ ~S~:>"
+                   :format-arguments (list quality spec)
+                   :references (list '(:sbcl :variable *stack-allocate-dynamic-extent*)
+                                     '(:sbcl :node "Dynamic-extent allocation")))))
+
 ;;; *POLICY* holds the current global compiler policy information, as
 ;;; an alist mapping from optimization quality name to quality value.
 ;;; Inside the scope of declarations, new entries are added at the
@@ -154,16 +164,19 @@ EXPERIMENTAL INTERFACE: Subject to change."
 
 ;;; Dependent qualities
 (defmacro define-optimization-quality
-    (name expression &optional documentation)
+    (name expression &optional values-documentation documentation)
+  (declare (ignorable documentation))
   `(eval-when (:compile-toplevel :load-toplevel :execute)
      (let ((acons (assoc ',name *policy-dependent-qualities*))
            (item (make-policy-dependent-quality
                   :name ',name
                   :expression ',expression
                   :getter (lambda (policy) (policy policy ,expression))
-                  :values-documentation ',documentation)))
+                  :values-documentation ',values-documentation)))
        (if acons
            (setf (cdr acons) item)
            (setf *policy-dependent-qualities*
                  (nconc *policy-dependent-qualities* (list `(,',name . ,item))))))
+     #-sb-xc-host
+     ,@(when documentation `((setf (fdocumentation ',name 'optimize) ,documentation)))
      ',name))