1.0.2.16: Replace SVREF with DATA-VECTOR-REF in %INSTANCE-TYPEP deftransform
authorJuho Snellman <jsnell@iki.fi>
Tue, 6 Feb 2007 06:12:07 +0000 (06:12 +0000)
committerJuho Snellman <jsnell@iki.fi>
Tue, 6 Feb 2007 06:12:07 +0000 (06:12 +0000)
* Since the SVREF is compiled with SAFETY 0, it'd eventually get
          transformed to exactly the same thing, but going through several
          heavy intermediate stages.
        * Big compilation speed improvement for code that uses structs.

src/compiler/typetran.lisp
version.lisp-expr

index 8d8b421..62d2dcd 100644 (file)
                         class:~%  ~S"
                        class))
       (t
-        ;; Delay the type transform to give type propagation a chance.
-        (delay-ir1-transform node :constraint)
+       ;; Delay the type transform to give type propagation a chance.
+       (delay-ir1-transform node :constraint)
 
        ;; Otherwise transform the type test.
        (multiple-value-bind (pred get-layout)
                           (and (> (layout-depthoid ,n-layout)
                                   ,depthoid)
                                (locally (declare (optimize (safety 0)))
-                                 (eq (svref (layout-inherits ,n-layout)
-                                            ,depthoid)
+                                 ;; Use DATA-VECTOR-REF directly,
+                                 ;; since that's what SVREF in a
+                                 ;; SAFETY 0 lexenv will eventually be
+                                 ;; transformed to. This can give a
+                                 ;; large compilation speedup, since
+                                 ;; %INSTANCE-TYPEPs are frequently
+                                 ;; created during GENERATE-TYPE-CHECKS,
+                                 ;; and the normal aref transformation path
+                                 ;; is pretty heavy.
+                                 (eq (data-vector-ref (layout-inherits ,n-layout)
+                                                      ,depthoid)
                                      ',layout))))))))
            ((and layout (>= (layout-depthoid layout) 0))
             ;; hierarchical layout depths for other things (e.g.
                           (let ((,n-inherits (layout-inherits ,n-layout)))
                             (declare (optimize (safety 0)))
                             (and (> (length ,n-inherits) ,depthoid)
-                                 (eq (svref ,n-inherits ,depthoid)
+                                 ;; See above.
+                                 (eq (data-vector-ref ,n-inherits ,depthoid)
                                      ',layout))))))))
            (t
             (/noshow "default case -- ,PRED and CLASS-CELL-TYPEP")
index b2fbd40..0338ba1 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.2.15"
+"1.0.2.16"