X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fpack.lisp;h=1673e940efbe5b2ebe2f8c85a73e89550cfaf800;hb=0ee1135a83da462e6de2a98bb2eff837b278f926;hp=a911dbd106695f448777de3529941ecb197e02e6;hpb=d604a358d8e5eb5587989e0a4f1d31dbe6ac5ffe;p=sbcl.git diff --git a/src/compiler/pack.lisp b/src/compiler/pack.lisp index a911dbd..1673e94 100644 --- a/src/compiler/pack.lisp +++ b/src/compiler/pack.lisp @@ -607,20 +607,6 @@ save tn before)) (values)) -(eval-when (:compile-toplevel :execute) - -;;; Do stuff to note a read of TN, for OPTIMIZED-EMIT-SAVES-BLOCK. -(defmacro save-note-read (tn) - `(let* ((tn ,tn) - (num (tn-number tn))) - (when (and (sc-save-p (tn-sc tn)) - (zerop (sbit restores num)) - (not (eq (tn-kind tn) :component))) - (setf (sbit restores num) 1) - (push tn restores-list)))) - -) ; EVAL-WHEN - ;;; Start scanning backward at the end of BLOCK, looking which TNs are ;;; live and looking for places where we have to save. We manipulate ;;; two sets: SAVES and RESTORES. @@ -700,9 +686,7 @@ (setq saves-list (delete tn saves-list :test #'eq)))))) - (macrolet (;; Do stuff to note a read of TN, for - ;; OPTIMIZED-EMIT-SAVES-BLOCK. - (save-note-read (tn) + (macrolet ((save-note-read (tn) `(let* ((tn ,tn) (num (tn-number tn))) (when (and (sc-save-p (tn-sc tn)) @@ -1603,15 +1587,15 @@ (do-ir2-blocks (block component) (emit-saves block) (pack-load-tns block)))) - (when *repack-blocks* - (loop - (when (zerop (hash-table-count *repack-blocks*)) (return)) - (maphash (lambda (block v) - (declare (ignore v)) - (remhash block *repack-blocks*) - (event repack-block) - (pack-load-tns block)) - *repack-blocks*)))) + (loop + (unless *repack-blocks* (return)) + (let ((orpb *repack-blocks*)) + (setq *repack-blocks* nil) + (maphash (lambda (block v) + (declare (ignore v)) + (event repack-block) + (pack-load-tns block)) + orpb)))) (values)) (clean-up-pack-structures)))