0.8.0.85:
[sbcl.git] / OPTIMIZATIONS
index 2b2d63b..df2c49b 100644 (file)
@@ -80,7 +80,6 @@ uses generic arithmetic
   memory location for iteration variable
 
 ;;; -*- mode: lisp -*-
-;;; $Id$
 ;;; http://www.bagley.org/~doug/shootout/
 ;;; from Friedrich Dominicus
 
@@ -128,7 +127,7 @@ The initial binding is effectless, and without it X is of type
 DOUBLE-FLOAT. Unhopefully, IR1 does not optimize away effectless
 SETs/bindings, and IR2 does not perform type inference.
 --------------------------------------------------------------------------------
-#9
+#9 "Multi-path constant folding"
 (defun foo (x)
   (if (= (cond ((irgh x) 0)
                ((buh x) 1)
@@ -144,28 +143,22 @@ This code could be optimized to
         ((buh x) :no)
         (t :no)))
 --------------------------------------------------------------------------------
-#10
-Reported by Robert E. Brown on sbcl-devel 2003-01-21:
+#11
+(inverted variant of #9)
 
-(defstruct trace-info
-  (foo nil :type (or null function)))
+(lambda (x)
+  (let ((y (sap-alien x c-string)))
+    (list (alien-sap y)
+          (alien-sap y))))
 
-(defun bad (x)
-  (declare (optimize (speed 3) (safety 0)))
-  (let ((wow (trace-info-foo x)))
-    (or (not wow) (funcall wow 1 2 3))))
+It could be optimized to
 
-Python does not derive that FUNCALL is applied to FUNCTION.
+(lambda (x) (list x x))
 
-(OR ...) is equivalent to
-
-(LET ((G2407 (NOT WOW)))
-  (IF G2407 G2407 (FUNCALL WOW 1 2 3)))
-
-or to
-
-(LET ((G2407 (IF WOW NIL T)))
-  (IF G2407 G2407 (FUNCALL WOW 1 2 3)))
+(if Y were used only once, the current compiler would optimize it)
+--------------------------------------------------------------------------------
+#12
+(typep (truly-the (simple-array * (*)) x) 'simple-vector)
 
-so this is similar to #9.
+tests lowtag.
 --------------------------------------------------------------------------------