X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=OPTIMIZATIONS;h=42119acef2c0fd7a33780ca56d3204fa5fd5ec6a;hb=HEAD;hp=581291c1e5a49d9e981412a5e9ba490db8986cf5;hpb=e840f481796d191997a47421d60cd039cd260613;p=sbcl.git diff --git a/OPTIMIZATIONS b/OPTIMIZATIONS index 581291c..42119ac 100644 --- a/OPTIMIZATIONS +++ b/OPTIMIZATIONS @@ -157,11 +157,6 @@ 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. --------------------------------------------------------------------------------- #20 (defun-with-dx foo (x) (flet ((make (x) @@ -179,8 +174,7 @@ Result of MAKE is not stack allocated. IR2 does not perform unused code flushing. -------------------------------------------------------------------------------- #24 -a. Iterations on &REST lists, returning them as VALUES could be - rewritten with &MORE vectors. +a. Iterations on &REST lists could be rewritten with &MORE vectors. b. Implement local unknown-values mv-call (useful for fast type checking). -------------------------------------------------------------------------------- #26 @@ -247,21 +241,6 @@ vm-support-routine COMBINATION-IMPLEMENTATION-STYLE and its use in src/compiler/ir1opt.lisp, IR1-OPTIMIZE-COMBINATION. The above optimizations are left as an exercise for the reader.) -------------------------------------------------------------------------------- -#30 -(defun foo (x y) - (< x y)) - -FOO's IR1 representation is roughly: - -(defun foo (x y) - (if (< x y) - T - NIL)) - -However, if a full call is generated for < (and similarly for other -predicate functions), then the IF is unnecessary, since the return value -of (< x y) is already T or NIL. --------------------------------------------------------------------------------- #31 The typecheck generated for a declaration like (integer 0 45) on x86 looks like: @@ -405,3 +384,23 @@ can be transformed into which allows compiler-macro-expansion for FOO. (Only constant arguments can be moved inside the new lambda -- otherwise evaluation order is altered.) + +-------------------------------------------------------------------------------- +#41 + +The unibyte external formats are written in a very generic way. Three +optimizations immediately applicable that could be automatically +generated: + +(a) if the external format merely permutes the first 256 characters, a + constant-time lookup (rather than a binary search) could be + performed on output. This applies at least to EBCDIC, which + currently has a hand-rolled mapper instead. + +(b) if there are no undefined characters corresponding to the 256 + codes, then no error checking need be done on input. + +(c) if there is a way to use particular bits of the exceptional + characters, constant-time output (rather than binary search) can + still be achieved as used to be done by the latin-9 external + format before 1.0.31.