(in-package "SB!C")
+(define-optimization-quality check-constant-modification
+ safety
+ ("no" "maybe" "yes" "yes")
+ "Control whether the compiler should check for constant
+modification. Defaults to SAFETY.")
+
(define-optimization-quality type-check
;; FIXME: grepping the tree for "policy.*safety" yields some
;; places which might want to use this instead -- or
("off" "maybe" "on" "on")
"Control inline-substitution of used-once local functions.")
+(define-optimization-quality rest-conversion
+ (if (= debug 3) 0 3)
+ ("off" "maybe" "on" "on")
+ "Control conversion of &REST argments to &MORE arguments when
+only used as the final argument to APPLY.")
+
+(define-optimization-quality alien-funcall-saves-fp-and-pc
+ (if (<= speed debug) 3 0)
+ ("no" "maybe" "yes" "yes")
+ "Control ALIEN-FUNCALL saving frame-pointer and program counter for
+more reliable bactracing across foreign calls.")
+
(define-optimization-quality verify-arg-count
(if (zerop safety) 0 3)
("no" "maybe" "yes" "yes"))
(define-optimization-quality merge-tail-calls
- (if (or (> space debug)
- (> speed debug))
- 3
- 0)
- ("no" "maybe" "yes" "yes")
- "Control whether tail-calls should reuse caller stack frame.
-Enabling this option make functions use less stack space, and make
-tail-recursive functions execute in constant stack, but debugging
-become harder, because backtraces show only part of function call
-sequence.
-
-This options has no effect when INSERT-DEBUG-CATCH is set.")
+ 3
+ "Deprecated: has no effect on compiled code. (Never really did.)")
(define-optimization-quality insert-debug-catch
(if (> debug (max speed space))
3
0)
("no" "maybe" "yes" "yes")
- "Enable possibility of returning from stack frames with the debugger.
-
-Enabling this option effectively disables MERGE-TAIL-CALLS.")
+ "Enables possibility of returning from stack frames with the debugger.
+Enabling this option causes apparent tail calls to no longer be in a tail
+position -- effectively disabling tail-merging, hence causing apparently tail
+recursive functions to no longer execute in constant stack space")
(define-optimization-quality recognize-self-calls
(if (> (max speed space) debug)
case of renaming described above, calls to FOO will not be recursive
and will refer to the new function, bound to FOO.")
-(define-optimization-quality stack-allocate-dynamic-extent
- (if (and (> (max speed space) (max debug safety))
- (< safety 3))
- 3
- 0)
- ("no" "maybe" "yes" "yes")
- "Control whether allocate objects, declared DYNAMIC-EXTENT, on
-stack.")
-
-(define-optimization-quality stack-allocate-vector
- (cond ((= stack-allocate-dynamic-extent 0) 0)
- ((= safety 0) 3)
- (t 2))
- ("no" "maybe" "one page" "yes")
- "Control what vectors, declared DYNAMIC-EXTENT, are allocated on stack:
-0: no vectors are allocated on stack;
-2: only short vectors (compiler knows them to fit on one page);
-3: every.
-
-This option has an effect only when STACK-ALLOCATE-DYNAMIC-EXTENT is
-set.")
-
(define-optimization-quality float-accuracy
3
("degraded" "full" "full" "full"))