X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=OPTIMIZATIONS;h=b0c8f47fe343d475fa73a9392c955dd31969ca9c;hb=eed9254936fe91e36dd4dbca02c342021917eeb1;hp=0ca48de3354fcab34182d424658a16d8ad663898;hpb=3a4229d4a91f04da79dfc7366433682f8c979f0a;p=sbcl.git diff --git a/OPTIMIZATIONS b/OPTIMIZATIONS index 0ca48de..b0c8f47 100644 --- a/OPTIMIZATIONS +++ b/OPTIMIZATIONS @@ -185,3 +185,49 @@ sbcl-0.8.12.30, this affects at least DUMP-OBJECT through COMPOUND-OBJECT-P, and (LABELS MAYBE-EMIT-MAKE-LOAD-FORMS GROVEL) through TYPEP UNBOXED-ARRAY, within the compiler itself. -------------------------------------------------------------------------------- +#18 +(lambda (x) (declare (null x)) (sxhash x)) goes through SYMBOL-HASH +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) + (let ((l (list nil nil))) + (setf (first l) x) + (setf (second l) (1- x)) + l))) + (let ((l (make x))) + (declare (dynamic-extent l)) + (mapc #'print l)))) + +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. +-------------------------------------------------------------------------------- +#23 +Python does not know that &REST lists are LISTs (and cannot derive it). +-------------------------------------------------------------------------------- +#24 +a. Iterations on &REST lists, returning them as VALUES could be + rewritten with &MORE vectors. +b. Implement local unknown-values mv-call (useful for fast type checking).