X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=OPTIMIZATIONS;h=0308f8507c4e8955d713ea703e1744266bda8f25;hb=ed891a4fd882d1b9fe066ab14bcf2107aea95baa;hp=631501c154e62064e67e2a87c019127fa03df64d;hpb=bef0d9c1274819ee3fb886401209662bace136ce;p=sbcl.git diff --git a/OPTIMIZATIONS b/OPTIMIZATIONS index 631501c..0308f85 100644 --- a/OPTIMIZATIONS +++ b/OPTIMIZATIONS @@ -162,15 +162,6 @@ through TYPEP UNBOXED-ARRAY, within the compiler itself. rather than either constant-folding or manipulating NIL-VALUE or NULL-TN directly. -------------------------------------------------------------------------------- -#19 - (let ((dx (if (foo) - (list x) - (list y z)))) - (declare (dynamic-extent dx)) - ...) - -DX is not allocated on stack. --------------------------------------------------------------------------------- #20 (defun-with-dx foo (x) (flet ((make (x) @@ -185,14 +176,6 @@ DX is not allocated on stack. Result of MAKE is not stack allocated, which means that stack-allocation of structures is impossible. -------------------------------------------------------------------------------- -#21 -(defun-with-dx foo () - (let ((dx (list (list 1 2) (list 3 4)))) - (declare (dynamic-extent dx)) - ...)) - -External list in DX is allocated on stack, but internal are not. --------------------------------------------------------------------------------- #22 IR2 does not perform unused code flushing. -------------------------------------------------------------------------------- @@ -411,8 +394,25 @@ all three comparisons or b) eliminated the necessity of the MOV(s) altogether. The former option is probably easier than the latter. -------------------------------------------------------------------------------- -#37 +#38 + +(setf (subseq s1 start1 end1) (subseq s2 start2 end1)) + +could be transformed into + +(let ((#:s2 s2) + (#:start2 start2) + (#:end2 end2)) + (replace s1 #:s2 :start1 start1 :end1 end1 :start2 #:start2 :end2 #:end2)) + +when the return value is unused, avoiding the need to cons up the new sequence. + +-------------------------------------------------------------------------------- +#39 + +(let ((*foo* 42)) ...) -Dynamic extent allocation doesn't currently work for one-element lists, -since there's a source transform from (LIST X) to (CONS X NIL). +currently compiles to code that ensures the TLS index at runtime, which +is both a decently large chunk of code and unnecessary, as we could ensure +the TLS index at load-time as well.