From 8da43adb9b0fe13b1bcad58e1d4588a91adb74dd Mon Sep 17 00:00:00 2001 From: Juho Snellman Date: Tue, 6 Feb 2007 06:12:07 +0000 Subject: [PATCH] 1.0.2.16: Replace SVREF with DATA-VECTOR-REF in %INSTANCE-TYPEP deftransform * 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 | 20 +++++++++++++++----- version.lisp-expr | 2 +- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/compiler/typetran.lisp b/src/compiler/typetran.lisp index 8d8b421..62d2dcd 100644 --- a/src/compiler/typetran.lisp +++ b/src/compiler/typetran.lisp @@ -415,8 +415,8 @@ 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) @@ -456,8 +456,17 @@ (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. @@ -475,7 +484,8 @@ (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") diff --git a/version.lisp-expr b/version.lisp-expr index b2fbd40..0338ba1 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -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" -- 1.7.10.4